我是逆向工程的新手。我从这里开始,正在处理第一个文件“ Muadib1.zip”。我在十六进制编辑器中用
E842000000
替换了909090909090
,但看来它破坏了exe。任何想法为什么它不起作用?我还尝试了用5个NOP(而不是6个)替换序列,但结果却是相同的。
#1 楼
问题是:您正在粉碎堆栈。让我们看一下要修补的函数:
您可以看到,它将四个参数压入堆栈并调用USER32!MessageBoxA。快速浏览其文档可以看到我们,它需要四个参数并利用标准的WINAPI调用约定(也称为__stdcall)。描述中的一件事对于这种情况至关重要:
被调用方清理堆栈
(您还可以看到该函数没有清除本身,否则我们可能会遇到类似
add esp, 16
)的情况。这意味着,如果我们不进行调用的调用,则也必须对所进行的函数设置进行响应: br />
亲切的问候
评论
在x86上,无前缀的E8调用应为5个字节如果我们还原此帖子的先前版本,可以吗?很遗憾,我们将以@Norwald的如此出色的回答结束
Die.234567767654454443344444433445555555555555455544