我在玩关于解包的教程/白皮书,特别是 UPX。由于 Olly 2.01 是我选择的调试器,我试图用它解压一个 UPX 打包的 exe,令我惊讶的是,它看起来好像没有打破它应该的地方。
在 Olly 1.10 中,执行将停止两次:
1) 首先在 ntdll
2)然后是实际模块中众所周知的PUSHAD指令:
上面可见的 JMP 将跳转到解压后的代码:
这是我期望的行为。但是,具有相同设置(在“主模块的入口点”处中断)的 Olly 2.01 将在此跳转处停止:
如果遵循,将立即将我们带到解压后的代码:
此外,这两种情况下 JMP 之前的字节似乎不同,地址也是如此,这表明这实际上是一段不同的代码。
怎么了?Olly 2.01 是否真的“更聪明”了,识别打包机并在未打包的 OEP 处停下来?另外,为什么解包代码的 JMP 不同(如上所述,它们之前的不同指令和不同地址)?