如何在Windows7 x64中使用ollydbg注入Windows API调用

时间:2012-08-06 23:43:38

标签: windows debugging process cracking ollydbg

我使用的是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中显示我想要的信息呢? 提前谢谢!

1 个答案:

答案 0 :(得分:0)

这是由ASLR造成的,为了使其在Windows7中运行,一种方法是禁用ASLR(风险自负)。

您可以在弹出的对话框中下载Enhanced Mitigation Experience Toolkit (EMET)工具,安装并运行EMET_GUI.exe,禁用ASLR并重启: EMET GUI

您可能希望在完成工作后重新启用ASLR,因为它会影响您的操作系统的安全性。