【问题标题】:How to inject a Windows API call use ollydbg in Windows7 x64如何在 Windows7 x64 中注入 Windows API 调用使用 ollydbg
【发布时间】: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


【解决方案1】:

这是由 ASLR 引起的,要使其在 Windows7 中正常工作,一种方法是禁用 ASLR(风险自负)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-03
    • 2020-02-11
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2013-08-23
    • 2021-03-19
    相关资源
    最近更新 更多