能力值:
( LV3,RANK:30 )
|
-
-
2 楼
我记得前阵看雪有个逆向病毒的文章,逆到了判断系统版本的逻辑。 你可以去找找。。。感觉那个病毒写的很简洁。
最后于 2019-7-12 05:57
被Dstlemoner编辑
,原因:
|
能力值:
( LV7,RANK:100 )
|
-
-
3 楼
|
能力值:
( LV12,RANK:380 )
|
-
-
4 楼
哪用得着这么麻烦啊 直接PEB读取
|
能力值:
( LV7,RANK:110 )
|
-
-
5 楼
RtlGetVersion
|
能力值:
( LV3,RANK:30 )
|
-
-
6 楼
kernel32.dll 的详细信息
|
能力值:
( LV3,RANK:35 )
|
-
-
7 楼
Tennn
哪用得着这么麻烦啊 直接PEB读取
正规软件还是最好不要用peb取,用RtlGetVersion 最靠谱
|
能力值:
( LV5,RANK:60 )
|
-
-
8 楼
这个头文件的函数太臃肿了,直接拿到buildnumber比较十几个值就知道是那个版本的系统了
|
能力值:
( LV7,RANK:116 )
|
-
-
9 楼
这样子嘛 #include<Windows.h>
#include<stdio.h>
int main()
{
uintptr_t PEB;
int OsBuildNumber;
#ifdef _WIN64
PEB = __readgsqword(0x60);
OsBuildNumber = *((INT *)(PEB + 0x120));
#else
PEB = __readfsdword(0x30);
OsBuildNumber = *((INT *)(PEB + 0xAC));
#endif // _WIN64
switch (OsBuildNumber)
{
case 17134:
printf("Win10 1803\n");
break;
case 17763:
printf("Win10 1809\n");
break;
case 18362:
printf("Win10 1903\n");
break;
case 15063:
printf("Win10 1703\n");
break;
case 16299:
printf("Win10 1709\n");
break;
// ........Other Windows OS Version
default:
break;
}
printf("OsBuildNumber: %d", OsBuildNumber);
getchar();
}
|
能力值:
( LV6,RANK:90 )
|
-
-
10 楼
|
能力值:
( LV12,RANK:380 )
|
-
-
11 楼
StriveXjun
正规软件还是最好不要用peb取,用RtlGetVersion 最靠谱
为什么会有这种的说法……
|
能力值:
( LV7,RANK:110 )
|
-
-
12 楼
Tennn
为什么会有这种的说法……
PEB不是相当于KPROCESS嘛,各种偏移。而这个API是公开的,易用也方便维护。我的看法。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
RtlGetVersion 和 GetVersionEx 没区别,不靠谱。
|
能力值:
( LV3,RANK:35 )
|
-
-
14 楼
賈可
RtlGetVersion 和 GetVersionEx 没区别,不靠谱。
自己没用过就别下结论。 去win8.1以上的系统用用就知道了。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
你这代码写了跟没写一样,XP就是XP,还 “或更高版本”,跟没说一样嘛,我做过此功能,但是你一般的方法8.1及之后的版本默认都是8.1,你要特殊处理,方法较多,有种是修改manifest文件
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
StriveXjun
自己没用过就别下结论。 去win8.1以上的系统用用就知道了。
我又去验证了一下,确实记错了,RtlGetVersion 不受 manifest 的影响,但是实测还是会被兼容性设置所影响。
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
void Demo::Get_WinVer() { /* 调用信息 : 功能: 得到 系统版本 无返回值 支持UNICODE 头文件: Demo.h 调用 Get_WinVer(); */ HKEY dh_h_key; LPCWSTR strSubKey = (L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion"); LPCWSTR strMainVersion = (L"ProductName"); LPCWSTR strSubVersion = (L"CurrentBuildNumber");
DWORD dwType = REG_SZ; DWORD dwLen = MAX_PATH; wchar_t main_ver_data[MAX_PATH]; wchar_t sub_ver_ata[MAX_PATH];
RegOpenKey(HKEY_LOCAL_MACHINE, strSubKey, &dh_h_key); RegQueryValueEx(dh_h_key, strMainVersion, 0, &dwType, (LPBYTE)main_ver_data, &dwLen); RegQueryValueEx(dh_h_key, strSubVersion, 0, &dwType, (LPBYTE)sub_ver_ata, &dwLen); wcout << main_ver_data << " : " << sub_ver_ata << endl; RegCloseKey(dh_h_key); }
|
能力值:
( LV3,RANK:23 )
|
-
-
18 楼
StriveXjun
正规软件还是最好不要用peb取,用RtlGetVersion 最靠谱
用 ntdll 的PE信息比较准确,比如在兼容模式运行 GetVersion 返回就有不对
|
|
|