我写了一个简单的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文件。
2条答案
按热度按时间omtl5h9j1#
有一个叫做
editbin
的工具可以用来改变PE文件的设置。在你的例子中,/DYNAMICBASE
和/HIGHENTROPYVA
似乎是适用的。在创建可执行文件之后使用那个工具。t3psigkw2#
请参阅如何确定EXE(或DLL)是否参与ASLR,即是否可重定位?
ASLR意味着你的基址将被随机化,因此所有的绝对内存引用都将被中断。如果编译器和链接器假定基址为0x04000000,并且存在对0x0400102F的绝对内存引用,但您的模块实际上是在0x05000000处加载的,则必须将0x01000000添加到引用0x0400102F的机器代码,因此它现在引用0x0400102F。这些代码修正称为基重定位,它们是在装入可执行文件时由Windows装入程序执行的。只有当可执行文件可重定位时,必须执行这些修正的位置才包括在可执行文件中。
如果图像文件重新定位已剥离(0x0001)位标志集,则此可执行文件没有重定位,因此只能将其放置在文件头中的基地址处,因此如果在此可执行文件中启用ASLR,它将中断,因为内存引用不正确。您还可以编写位置无关代码,其在存储器中的任何地方正确地运行,而不需要加载时间重新定位。