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

我还尝试了用5个NOP(而不是6个)替换序列,但结果却是相同的。

评论

在x86上,无前缀的E8调用应为5个字节

如果我们还原此帖子的先前版本,可以吗?很遗憾,我们将以@Norwald的如此出色的回答结束

Die.234567767654454443344444433445555555555555455544

#1 楼

问题是:您正在粉碎堆栈。

让我们看一下要修补的函数:



您可以看到,它将四个参数压入堆栈并调用USER32!MessageBoxA。快速浏览其文档可以看到我们,它需要四个参数并利用标准的WINAPI调用约定(也称为__stdcall)。描述中的一件事对于这种情况至关重要:


被调用方清理堆栈


(您还可以看到该函数没有清除本身,否则我们可能会遇到类似add esp, 16)的情况。

这意味着,如果我们不进行调用的调用,则也必须对所进行的函数设置进行响应: br />
亲切的问候