【发布时间】:2012-08-03 23:10:44
【问题描述】:
我使用的是 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.
在实时调试会话中它确实有效:我注入代码,然后调试它 - 消息框确实弹出。但是在我保存可执行文件之后 (人民币->编辑->全选;人民币->编辑->复制到可执行文件;在新窗口,人民币->保存文件),然后执行,就崩溃了。
这是我观察到的:
在保存之前,CALL MessageBoxA 实际上是 CALL 74DAFD1E,它 表示 74DAFD1E 是 API MessageBoxA 的地址,但是保存后 地址更改为其他值。
另外,你认为ASLR 会不会几乎停止注入 Windows API 调用?
有什么想法吗?我怎么能设法从那个 exe 中显示我想要的信息?
提前致谢!
【问题讨论】:
-
是的,ASLR 很可能在这里杀死你,因为
MessageBoxA的地址在加载时是固定的。一个简单的技巧是在 EXE 中找到另一个调用MessageBoxA的位置,然后复制它使用的call __代码。很可能会调用已修复的存根。 -
谢谢,我试过了,它的调用类似于:CALL DWORD PTR DS:[],但是当我在我的位置注入这段代码时,它只是转换为固定的地址,会失败
-
不,您需要查看静态可执行文件。试试IDA。他们有一个免费版本。或者,使用十六进制编辑器。
标签: windows debugging process cracking ollydbg