IDA代码片段,eax移入全局变量

IDA code snippet, eax moved into global variable

做书中的练习 实用恶意软件分析(实验 5-1)

全局变量 dword_1008E5C4(第 2 张图片)应该包含 OS 版本,但据我所知,它应该始终设置为 0,因为 xor eax, eax 中的指令 sub_10003695

我是不是漏掉了什么?

是的,setz指令,它根据上面的比较结果设置aleax的一部分)的值。

GetVersionEx 函数具有此签名:

BOOL WINAPI GetVersionEx(
  _Inout_ LPOSVERSIONINFO lpVersionInfo
);

所以它 return 是一个 OSVERSIONINFO 结构(或 OSVERSIONINFOEX,但这与此处无关)在堆栈上的局部变量中(此处引用 rel 到 EBP ) 用

检查哪个字段 dwPlatformId
cmp [ebp+VersionInformation.dwPlatformId], 2

说明。 2 的值表示

The operating system is Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003, Windows XP, or Windows 2000.

因此在这些系统上 CMP 设置 ZERO? 标志以指示相等性。因为现在设置了 ZERO? 标志并且 EAX 仍然为零

setz al

EAX 设置为 00000001 - 作为子例程的 return 值