【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)

本次教程用的还是用UPX的加密,直接载入这个文件可以看到一个pushad,每个pushad都有他对应的popad,他的作用就是把右边的寄存器内容压入栈中,popad就是把压入栈中的内容进行还原。
【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)_第1张图片
对比后发现他把内容都给压入到栈中了,到popad那一步的时候他又会把压入的内容还原到堆栈中去。
【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)_第2张图片
我们到堆栈里给他设置一个硬件访问断点,因为他是从第一个开始弹出所以要在第一个地址里设置断点,所以等到他pop出来还原的时候也就是解码完成了,就可以顺着找到oep。

下面来讲解详细步骤,载入程序后F8单步往下走,让他压入栈之后设置硬件访问断点
【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)_第3张图片
【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)_第4张图片
随便设置个字节断点
【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)_第5张图片
F9运行【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)_第6张图片
跳过去就是我们的OEP了
【脱壳-寻找OEP】通过堆栈平衡法找到OEP(ESP定律)_第7张图片

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