2012-08-06 152 views
1

我使用Windows7的x64和OllyDbg的2.01(阿尔法2)如何注入在Windows7 64位Windows API调用使用OllyDbg的

我有一个exe,我想弹出一个消息框,显示执行过程中的一些信息,并有一个伟大的教程告诉您如何做到这一点: 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->编辑 - >全选; RMB->编辑 - >复制到可执行文件;在新窗口中,人民币 - >保存文件),然后执行,它只是坠毁。

下面是我观察到:

之前保存的CALL MessageBoxA实际上CALL 74DAFD1E,这意味着 是74DAFD1E API MessageBoxA的地址,但保存之后, 地址更改为一些其他的价值。

另外,你认为ASLR将几乎停止注入Windows API调用?

任何想法?我怎么能设法显示我想从那个EXE的信息?
在此先感谢!

+0

是的,最有可能的是ASLR在这里杀死你,因为MessageBoxA的地址在加载时是固定的。一个简单的方法就是在调用MessageBoxA的EXE中找到另一个位置,并复制它使用的调用__'代码。最可能的情况是它会调用一个已修复的存根。 – 2012-08-06 23:45:28

+0

谢谢,我试过了,它调用类似于:CALL DWORD PTR DS:[<&USER32.MessageBoxA>],但是当我在我的位置注入此代码时,它仅转换为固定地址,将失败 – 2012-08-07 03:02:09

+1

否,您需要查看静态可执行文件。试试[IDA](http://www.hex-rays.com/products/ida/index.shtml)。他们有一个免费版本。或者,使用十六进制编辑器。 – 2012-08-07 14:46:10

回答

0

这是由ASLR引起的,为了使它在Windows7中工作,一种方法是禁用ASLR(需要您自担风险)。

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

您可能要完成你的工作后,重新启用ASLR,如它会影响您的操作系统的安全性。