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