我正在反转恶意的 32 位 x86 Windows 可执行文件。静态查看 Ghidra 中的 PE 标头,我看到它ImageBase
已0x400000
按预期设置。但是,当二进制文件加载到内存中时,初始 RVAImageBase
与文件中定义的不匹配。例如,我已经看到内存中基地址设置为0x4B0000
和0x900000
。此行为发生在干净的 VM 上,以及使用 Immunity 和 x32dbg 以及 IDA Free 进行调试时。
我的理解是 Windows 加载程序读取ImageBase
并使用该偏移量来开始将部分映射到虚拟地址空间。因为系统代码处理加载,并且我的系统在第一次执行时是干净的,所以我假设异常ImageBase
是加载器细微差别的症状而不是篡改。我从未遇到过这种情况,希望得到任何见解。
MD5: 1f63d04ee95ea041f2f6b1e818d94a7c
SHA1: 823ad6abb05f2393c44cf4b7f1d00e32ac04d1d1
ImageBase
0x400000
在 Ghidra 中查看 PE 标头时设置为:
ImageBase
内存映射 PE 标头 ( 0x4B0000
) 与ImageBase
静态文件中的设置不匹配:
PE节映射到内存ImageBase
中0x4B0000