目录

PE 文件基址及其随机化

PE (Portable Executable) 文件是 Windows 操作系统中可执行文件和动态链接库 (DLL) 的标准格式。在操作系统加载 PE 文件时,它会将文件映射到进程的虚拟地址空间中。PE 文件的基址 (Base Address) 是指操作系统尝试将该文件加载到内存中的首选地址。一般来说,在 Windows 系统中,x86 架构的 EXE 文件默认基址是 0x00400000,而 x64 架构的 EXE 文件默认基址是 0x140000000

ASLR (Address Space Layout Randomization) 是一种安全技术,用于随机化进程的内存地址布局,以防止攻击者利用已知的内存地址进行攻击。通过随机化基址,ASLR 使得攻击者难以预测关键数据结构和代码的位置,从而增加了攻击的难度。详见 Wikipedia

然而,对于逆向分析和调试来说,这一机制导致每次重启调试器时,PE 文件的基址都会发生变化。而一些反编译工具会采用默认基址进行分析,导致对比分析出现不便。

PE 文件格式中,有一个标志位 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE,用于指示操作系统是否启用 ASLR。如果该标志位被置零,操作系统将不会随机化该 PE 文件的基址,而是使用其默认基址进行加载。

该标志位位于 PE 文件的可选头 (Optional Header) 中的 DllCharacteristics 字段。这个字段是一个 16 位的位掩码,每一位代表不同的特性。可以通过将该 ushort 值与 0x0040 进行按位与操作来检查该标志位是否被设置。

使用任何 PE 编辑工具或十六进制编辑器,打开目标 PE 文件,找到并修改 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 标志位。

  1. 打开 010 Editor,加载目标 PE 文件。
  2. 运行 EXE.bt 模板,定位到 Optional Header 部分,找到 DllCharacteristics 字段下的 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 位。 IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 位置
  3. 将其改为 0,保存。

x64dbg 调试器中,选择 选项 -> 引擎,勾选 禁用 ASLR 选项。

注意
修改该设置后可能报错!如出现任何问题,请使用方法一。