用 NOP 修补 exe

逆向工程 qt
2021-06-30 16:01:58

我是逆向工程的新手。我从这里开始,我正在处理第一个文件“Muadib1.zip”。在十六进制编辑器中替换E842000000909090909090,但它似乎破坏了 exe。任何想法为什么它不起作用?

我还尝试用 5 个 NOP 而不是 6 个替换序列,但结果是一样的。

1个回答

问题是:您正在粉碎堆栈

让我们看看您要修补的功能:

在此处输入图片说明

如您所见,它将四个参数压入堆栈并调用 USER32!MessageBoxA。快速浏览一下它的文档向我们展示了它需要四个参数并使用标准的 WINAPI 调用约定(也称为__stdcall)。其描述中的一件事对这种情况至关重要:

被调用者清理堆栈

(您还可以看到该函数本身不进行清理,否则我们可以期待类似的东西add esp, 16

这意味着如果我们 NOP-out 调用,我们也必须 NOP-out 函数设置:

在此处输入图片说明

亲切的问候