如何启用 exe 文件的 ASLR
How to enable ASLR of an exe file
我写了一个简单的 python 脚本(只是一个消息框)并使用 pyInstaller 使其可执行。我想使用 Powershell 脚本反射加载该 exe 文件 Invoke-ReflectivePEInjection.ps1 但 powershell 抛出错误(PE 文件不支持 ASLR)
有什么方法可以从 python 脚本制作 ASLR 兼容的 exe 文件。
有一个名为 editbin
的工具可用于更改 PE 文件设置。在您的情况下,/DYNAMICBASE
和 /HIGHENTROPYVA
似乎适用。创建可执行文件后使用该工具。
见How do I determine if an EXE (or DLL) participate in ASLR, i.e. is relocatable?
ASLR 意味着您的基地址将被随机化,因此所有绝对内存引用都将被破坏。也就是说,如果编译器和链接器假定基地址是 0x04000000 并且存在对 0x0400102F 的绝对内存引用,但您的模块实际上是在 0x05000000 处加载的,那么必须将 0x01000000 添加到引用 0x0400102F 的机器代码中硬编码的绝对地址,因此它现在引用 0x0400102F。这些代码修复称为基本重定位,它们在加载可执行文件时由 windows 加载程序执行。必须完成这些修复的地方只有在可重定位时才包含在可执行文件中。
如果在文件头的特征字段中设置的 IMAGE_FILE_RELOCS_STRIPPED (0x0001) 位标志被设置,那么这个可执行文件没有重定位,所以它不能放在头文件中基地址以外的任何地方,所以如果您在此可执行文件中启用 ASLR,它将中断,因为内存引用不正确。您还可以编写与位置无关的代码,无论放在内存中的任何位置都可以正确运行,无需加载时重定位。
我写了一个简单的 python 脚本(只是一个消息框)并使用 pyInstaller 使其可执行。我想使用 Powershell 脚本反射加载该 exe 文件 Invoke-ReflectivePEInjection.ps1 但 powershell 抛出错误(PE 文件不支持 ASLR)
有什么方法可以从 python 脚本制作 ASLR 兼容的 exe 文件。
有一个名为 editbin
的工具可用于更改 PE 文件设置。在您的情况下,/DYNAMICBASE
和 /HIGHENTROPYVA
似乎适用。创建可执行文件后使用该工具。
见How do I determine if an EXE (or DLL) participate in ASLR, i.e. is relocatable?
ASLR 意味着您的基地址将被随机化,因此所有绝对内存引用都将被破坏。也就是说,如果编译器和链接器假定基地址是 0x04000000 并且存在对 0x0400102F 的绝对内存引用,但您的模块实际上是在 0x05000000 处加载的,那么必须将 0x01000000 添加到引用 0x0400102F 的机器代码中硬编码的绝对地址,因此它现在引用 0x0400102F。这些代码修复称为基本重定位,它们在加载可执行文件时由 windows 加载程序执行。必须完成这些修复的地方只有在可重定位时才包含在可执行文件中。
如果在文件头的特征字段中设置的 IMAGE_FILE_RELOCS_STRIPPED (0x0001) 位标志被设置,那么这个可执行文件没有重定位,所以它不能放在头文件中基地址以外的任何地方,所以如果您在此可执行文件中启用 ASLR,它将中断,因为内存引用不正确。您还可以编写与位置无关的代码,无论放在内存中的任何位置都可以正确运行,无需加载时重定位。