我使用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的信息?
在此先感谢!
是的,最有可能的是ASLR在这里杀死你,因为MessageBoxA的地址在加载时是固定的。一个简单的方法就是在调用MessageBoxA的EXE中找到另一个位置,并复制它使用的调用__'代码。最可能的情况是它会调用一个已修复的存根。 – 2012-08-06 23:45:28
谢谢,我试过了,它调用类似于:CALL DWORD PTR DS:[<&USER32.MessageBoxA>],但是当我在我的位置注入此代码时,它仅转换为固定地址,将失败 – 2012-08-07 03:02:09
否,您需要查看静态可执行文件。试试[IDA](http://www.hex-rays.com/products/ida/index.shtml)。他们有一个免费版本。或者,使用十六进制编辑器。 – 2012-08-07 14:46:10