小编DD3*_*314的帖子

OllyDbg 中的地址在程序重新加载时发生变化

这是我的第一篇文章,我是组装和调试的新手,所以请耐心等待。

我试图将一些代码(对 MessageBoxA 的一个小调用)注入到 Windows 7 记事本可执行文件中。但是,我遇到了地址问题。首先,我在 OllyDbg 中打开 exe,然后我转到包含“notepad.pdb” ASCII 文本的行。然后我在它下面放了一个 ASCII 字符串(例如,“INJECTED NOTEPAD”)。接下来,在下面,我输入了这个汇编代码:

PUSH 0
PUSH address_of_ASCII_string ; In this case, 00A6B668C
PUSH address_of_ASCII_string ; In this case, 00A6B668C
PUSH 0
CALL MessageBoxA
Run Code Online (Sandbox Code Playgroud)

接下来,我转到程序中的第一行代码(只需右键单击并按Go to Origin(或直接按数字键盘上的*))然后我用JMP指令替换第一行到第一个的地址在我注入的代码中按 0。然后,我将替换的指令放在注入代码的末尾。在那之后,我在跳转到我注入的代码的 JMP 指令之后的代码行中放置了一条 JMP 指令(是的,我刚刚描述了一个 codecave 或某种类型)。当我运行它时一切正常。但是,当我将修改后的代码保存到新的可执行文件中并再次使用 OllyDbg 运行它时,它不起作用。当我尝试引用我输入的 ASCII 字符串时,地址完全错误。示例如下图所示:

如您所见,我将字符串压入堆栈,但是当我再次将修改后的程序重新加载到调试器中时,字符串的地址发生了变化,但我的代码没有变化。因此,当我调用 MessageBoxA 函数时,它会出错,因为我为 Text 和 Caption 参数加载了错误的地址。我该如何解决?

windows x86 assembly memory-address codecave

2
推荐指数
1
解决办法
2213
查看次数

标签 统计

assembly ×1

codecave ×1

memory-address ×1

windows ×1

x86 ×1