我编写了一个简单的 python 脚本(只是一个消息框)并使用 pyInstaller 使其可执行。我想使用 Powershell 脚本Invoke-ReflectivePEInjection.ps1反射性地加载该 exe 文件,但 powershell 抛出错误(PE 文件不支持 ASLR)
有没有办法从 python 脚本制作兼容 ASLR 的 exe 文件。
我编写了一个简单的 python 脚本(只是一个消息框)并使用 pyInstaller 使其可执行。我想使用 Powershell 脚本Invoke-ReflectivePEInjection.ps1反射性地加载该 exe 文件,但 powershell 抛出错误(PE 文件不支持 ASLR)
有没有办法从 python 脚本制作兼容 ASLR 的 exe 文件。
有一个工具editbin
可以用来更改 PE 文件设置。在你的情况下,/DYNAMICBASE
似乎/HIGHENTROPYVA
适用。创建可执行文件后使用该工具。
请参阅如何确定 EXE(或 DLL)是否参与 ASLR,即是否可重定位?
ASLR 意味着您的基地址将被随机化,因此所有绝对内存引用都将被破坏。也就是说,如果编译器和链接器假定基地址是 0x04000000 并且存在对 0x0400102F 的绝对内存引用,但您的模块实际上在 0x05000000 处加载,则必须将 0x01000000 添加到机器代码中硬编码的绝对地址中,该地址引用 0x0400102F 所以它现在引用 0x0400102F。这些代码修正称为基本重定位,它们是在加载可执行文件时由 Windows 加载器执行的。只有当可执行文件可重定位时,这些修复必须完成的位置才包含在可执行文件中。
如果在文件头的特性字段中设置了 IMAGE_FILE_RELOCS_STRIPPED (0x0001) 位标志,则此可执行文件没有重定位,因此它不能放置在头中基地址以外的任何位置,因此如果您在此可执行文件中启用 ASLR,它将break 因为内存引用不正确。您还可以编写与位置无关的代码,该代码在内存中的任何位置都可以正确运行,而无需加载时间重定位。