我使用的是Windows7 x64和OllyDbg 2.01(alpha 2)
我有一个exe,我想在执行期间弹出一个MessageBox来显示一些信息,并且有一个很棒的教程向你展示如何执行此操作: How to inject code into a exe file,基本上,它是关于添加MessageBoxA API打电话给想要的信息:
PUSH 0 ; BUTTONS = <OK ONLY>
PUSH 1008751 ; CAPTION = Our adress of the "INJECTED NOTEPAD"
PUSH 1008751 ; MESSAGE = Same like above.
PUSH 0 ; ICON = <NO ICON>
CALL MessageBoxA ; Run MessageBoxA with the Params above.
在实时调试会话中它确实有效:我注入了代码,然后调试它 - 弹出消息框。但是在我保存可执行文件之后 (RMB-&gt; Edit-&gt; Select all; RMB-&gt; Edit-&gt; Copy to executable;在新窗口中,RMB-&gt;保存文件),然后执行,它只是崩溃了。
以下是我观察到的内容:
在保存之前,CALL MessageBoxA实际上是CALL 74DAFD1E,其中 表示74DAFD1E是API MessageBoxA的地址,但保存后, 地址被更改为其他值。
另外,您是否认为ASLR实际上会停止注入Windows API调用?
有什么想法吗?我怎么能设法从那个exe中显示我想要的信息呢? 提前谢谢!
答案 0 :(得分:0)
这是由ASLR造成的,为了使其在Windows7中运行,一种方法是禁用ASLR(风险自负)。
您可以在弹出的对话框中下载Enhanced Mitigation Experience Toolkit (EMET)工具,安装并运行EMET_GUI.exe,禁用ASLR并重启:
您可能希望在完成工作后重新启用ASLR,因为它会影响您的操作系统的安全性。