实用恶意软件分析 - 实验 5.1 问题 11 函数 sub_100036C3

Practical Malware Analysis - Lab 5.1 Question 11 function sub_100036C3

只是想问一个关于 sub_100036C3 的问题,因为我没有得到 book 中给出的详细答案。

简介:

第107页问题11.导出PSLIST有什么作用?

第 498 页。答案:sub_100036C3 函数检查是否 OS 版本是 Windows Vista/7 或 XP/2003/2000.

反汇编代码:

我们看到指令:

cmp [ebp+VersionInformation.dwMajorVersion], 5
jb short loc_100036FA

dwMajorVersion 是 XP/2003/2000.

的 5

dwMajorVersion 是 Windows Vista/7.

的 6

但在反汇编代码指令中 jb short loc_100036FA 只有当 dwMajorversion >= 5 时才会跳转到 loc_100036FA 并且只有当 dwMajorVersion < 5 时才会跳转(如果低于则跳转)。

所以我认为它不能用来在XP和Vista/7之间进行选择,因为5和6都落在红色箭头中。

拜托,有人可以解释一下,我是对的还是我做错了什么?

函数sub_100036C3只是判断主机操作系统是否为Win2000或以上(这可能就是为什么returns一个bool值而不是三个选项的原因(Windows Vista/7?或者XP/2003/2000?或者两者都不是?))。

如果我们使用反汇编的话,这个函数的逻辑大致如下:

BOOL sub_100036C3()
{
    OSVERSIONINFOA VersionInformation;
    VersionInformation.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXA);
    GetVersionExA(&VersionInformation);

    return VersionInformation.dwPlatformId == 2 && VersionInformation.dwMajorVersion >= 5;
}

所以只要版本不是Windows95,他们都会走中间的流程。