powershell 如何启用exe文件的ASLR

c3frrgcw  于 2023-03-18  发布在  Shell
关注(0)|答案(2)|浏览(168)

我写了一个简单的python脚本(只是一个消息框),并使用pyInstaller使其可执行。我想使用Powershell脚本Invoke-ReflectivePEInjection.ps1反射加载该exe文件,但Powershell抛出错误(PE文件不支持ASLR)
有没有办法从python脚本制作ASLR兼容的exe文件。

omtl5h9j

omtl5h9j1#

有一个叫做editbin的工具可以用来改变PE文件的设置。在你的例子中,/DYNAMICBASE/HIGHENTROPYVA似乎是适用的。在创建可执行文件之后使用那个工具。

t3psigkw

t3psigkw2#

请参阅如何确定EXE(或DLL)是否参与ASLR,即是否可重定位?
ASLR意味着你的基址将被随机化,因此所有的绝对内存引用都将被中断。如果编译器和链接器假定基址为0x04000000,并且存在对0x0400102F的绝对内存引用,但您的模块实际上是在0x05000000处加载的,则必须将0x01000000添加到引用0x0400102F的机器代码,因此它现在引用0x0400102F。这些代码修正称为基重定位,它们是在装入可执行文件时由Windows装入程序执行的。只有当可执行文件可重定位时,必须执行这些修正的位置才包括在可执行文件中。
如果图像文件重新定位已剥离(0x0001)位标志集,则此可执行文件没有重定位,因此只能将其放置在文件头中的基地址处,因此如果在此可执行文件中启用ASLR,它将中断,因为内存引用不正确。您还可以编写位置无关代码,其在存储器中的任何地方正确地运行,而不需要加载时间重新定位。

相关问题