为什么内存中PE ImageBase地址会发生变化?

逆向工程 视窗 恶意软件 反调试 pe32 虚拟内存
2021-06-10 21:24:02

我正在反转恶意的 32 位 x86 Windows 可执行文件。静态查看 Ghidra 中的 PE 标头,我看到它ImageBase0x400000按预期设置但是,当二进制文件加载到内存中时,初始 RVAImageBase与文件中定义的不匹配例如,我已经看到内存中基地址设置为0x4B00000x900000此行为发生在干净的 VM 上,以及使用 Immunity 和 x32dbg 以及 IDA Free 进行调试时。

我的理解是 Windows 加载程序读取ImageBase并使用该偏移量来开始将部分映射到虚拟地址空间。因为系统代码处理加载,并且我的系统在第一次执行时是干净的,所以我假设异常ImageBase是加载器细微差别的症状而不是篡改。我从未遇到过这种情况,希望得到任何见解。

MD5: 1f63d04ee95ea041f2f6b1e818d94a7c

SHA1: 823ad6abb05f2393c44cf4b7f1d00e32ac04d1d1


ImageBase0x400000在 Ghidra 中查看 PE 标头时设置为

ImageBase 设置为 0x400000


ImageBase内存映射 PE 标头 ( 0x4B0000) 与ImageBase静态文件中的设置不匹配

PE标头转储


PE节映射到内存ImageBase0x4B0000

映射到内存中的 PE 部分

1个回答

这只是一个首选地址。Windows 几乎可以在任何地址加载二进制文件,并将其重新定位到这个新位置。

ImageBase:图片加载到内存时第一个字节的首选地址;必须是 64 K 的倍数。 DLL 的默认值为 0x10000000。Windows CE EXE 的默认值为 0x00010000。Windows NT、Windows 2000、Windows XP、Windows 95、Windows 98 和 Windows Me 的默认值是 0x00400000。

来源:MSDN