IDA代码片段,eax移入全局变量
IDA code snippet, eax moved into global variable
做书中的练习 实用恶意软件分析(实验 5-1)
全局变量 dword_1008E5C4
(第 2 张图片)应该包含 OS 版本,但据我所知,它应该始终设置为 0,因为
xor eax, eax
中的指令 sub_10003695
我是不是漏掉了什么?
是的,setz
指令,它根据上面的比较结果设置al
(eax
的一部分)的值。
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 值 。
做书中的练习 实用恶意软件分析(实验 5-1)
全局变量 dword_1008E5C4
(第 2 张图片)应该包含 OS 版本,但据我所知,它应该始终设置为 0,因为
xor eax, eax
中的指令 sub_10003695
我是不是漏掉了什么?
是的,setz
指令,它根据上面的比较结果设置al
(eax
的一部分)的值。
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 值 。