自分自身を バージョン偽装する 変な Windows 8.1
Windows 8.1を導入したけどバージョンチェック(GetVersionEx)がうまくいかなくて…
どうやら、マニフェストファイル(~.exe.manifest)に、Windows 8.1に対応することの宣言をしないと、GetVersionEx() API が古いバージョン番号を返すような仕様に変わってしまった |
という記事を見かけて追試をしてみた・ω・
ax=GetVersion(); printf("GetVersion:[%x]\n",ax); os.dwOSVersionInfoSize=sizeof(OSVERSIONINFOA); memset(&os,0,sizeof(os)); if(RegOpenKeyExA(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion",0,KEY_READ,&hKey)==ERROR_SUCCESS){ ExpandEnvironmentStringsW(L"%systemroot%\\system32\\ntdll.dll",path,sizeof(path)); |
ソースはこんな感じ
実行結果
GetVersion → 6.02 Build 9200
GetVersionEx → 6.2
RtlGetVersion → 6.3
レジストリ SOFTWARE\Microsoft\Windows NT\CurrentVersion の CurrentVersion 文字列 → 6.3
ファイル ntdll.dll のバージョンを参照する → 6.3.9600.16384
偽装してるの、GetVersion系 だけ! というお話でした ・ω・
Comments