我不确定我问这个问题是否有任何法律障碍,所以如果要求拆箱建议违反规则,我深表歉意。
我是逆向工程的新手,并尝试手动解压 PEtite 2.2/2.3 作为学习经验,并且一直在尝试遵循本指南:http : //users.freenet.am/~softland/tutorials/Petite.v2.3。 MUP.txt。我正在解包的程序是原始的 PEtite 打包程序本身。
我禁用了传递异常,因为感觉像是在作弊,而且我还没有完全理解异常在这种情况下的工作原理,似乎在这里用来破坏调试器,所以我想知道为什么以及如何自己解决它。我已经来到指南中的这一部分:
and this exception program generates for jumping to exception handler, so at that line put
breakpoint on exception handler (goto to 4164E3 and press F2), then press SHIFT+F9 and
you are at the beginning of exception handle
当使用 OllyDbg 1.10(未打补丁)时,这是我在异常处理程序的地址中找到的(这个地址也是 Olly 在我尝试自动解包器 SFX 功能时所说的 OEP 所在的地址):

在指南中它说我应该在004164E3 CALL PETGUI.00416537这里找到这条线。正如您所看到的,这里真的什么都没有,但是无论我尝试使用哪种方法(或在教程等中看到),它都是我最终到达的地址,所以我做了一个进程转储,突然我得到了这个:

现在让我震惊的是,由于程序是自我修改的,这自然会混淆 Olly,所以我告诉 Olly 重新分析代码(在转储进程之前),我最终得到了这个:

我得到了预期的结果,但是缺少一些东西......CALL可以在操作码部分看到该指令,但它没有被 Olly 解析。现在我的问题:
- 为什么 Olly 不能
CALL正确解析这条指令? - 怎么会
E8 4F000000神奇地变成CALL 416537?我416537在操作码中看不到任何内容。在这里找到了答案,留作参考:https : //stackoverflow.com/questions/10376787/need-help-understanding-e8-asm-call-instruction-x86。 - 在
MOVS异常处理程序结束之前引发异常的指令中,如果我按Shift-F7或Shift-F8单步执行而不是Shift-F9我以某种方式结束了 4E3137,它充满了ADD BYTE PTR DS:[EAX], AL指令,大概是填充指令的区域,稍后将被覆盖。我怎么到了这里?如果我尝试继续踩踏,我会被告知EIP已设置为00000000无法继续。每当我选择异常单步时,情况似乎就是这样;如果我刚刚使用Shift-F9.
我在 OllyDbg 2.01 中也有同样的问题。