【脱壳-寻找OEP】通过内存定位OEP实现脱壳

这个方法使用的是特殊OD,这个OD也叫VBOD 这个OD只会在执行的时候断点,其他异常之类的操作都不会进行断点。

这个方法是通过运行壳后壳会对原来的代码段进行 解密 还原 写入 这三个步骤,我们通过在他写入的那个段的时候设置一个执行断点

这次用的也是UPX的壳,载入特殊od后可以看到upx的壳是在我们原始oep的代码外面,UPX0里面才包含我们的原始入口点,UPX1是不包含的,UPX1这块就对 解密 还原 写入这三个步骤进行操作,然后写入到UPX0这个输入表中,也就是我们真实的OEP入口代码地址。
在这里插入图片描述
我们在UPX0原始代码段设置内存访问断点,只要UPX1这个代码段完成了解密 还原 这两个步骤,我们就在写入这个步骤完成后给他拦截,他写入完成后肯定要执行程序,因为这个od的特殊性,只会在他写入完成后执行原始oep代码段第一行代码的时候才会进行断点。
【脱壳-寻找OEP】通过内存定位OEP实现脱壳_第1张图片
设置完后F9运行,可以发现他断在了我们的入口点处,代码已经解密完成了,加壳程序已经还原了他的代码,这也是还原后执行的第一行代码段被我们断了下来。
【脱壳-寻找OEP】通过内存定位OEP实现脱壳_第2张图片
有些壳会有很多个区段,我们就一个个排除去执行断点,如果直接跑起来了证明就不是这个代码段,继续在他的下一个代码断进行执行断点,只要没有直接运行起来程序,哪他大概率就是加壳程序还原的第一行代码。注意:不需要去断加壳程序原本的代码断,因为他本身的代码断是做解密 还原 写入的,没必要在他本身做断点。

你可能感兴趣的:(脱壳入门,java)