# OEP

OEP 是程序的入口点,软件加了壳就是隐藏了 OEP 或是用了假的 OEP,以达到保护程序的目的,只要我们可以找到程序的真正的 OEP 就可以脱壳,pushad(压栈)是代表程序的入口点,popad(出栈)代表程序的出口点,与 pushad 相对应,找到 popad,oep 一般就在这附近

# ESP 定律步骤

1、首先 F8(一般刚进去的时候会在 pushad 附近),然后观察右上角寄存器中 ESP 有没有突变成红色,如果变成红色就进行接下来的步骤

2、在底下的命令行输入指令 dd XXXXXXX 或 hr XXXXXXX (即当前 ESP 的地址),然后回车(也可以直接右键跟随)

3、选中刚刚下断点的地址,右键选择断点 ——> 硬件访问 ——>word 断点,英文 breakpoint——>hardware,on access——>word

4、F9 运行到跳转出,F8 到达程序 OEP

5、用自带插件 olly dump 保存文件

# 注意事项

我在用 esp 定律脱壳的时候,第一次用 OD 是可以正常脱壳的,但后面不知道为什么,一直会弹出一个 “无法读取被调用程序的内存” 的提示,无法脱壳,然后我在网上找了很多方法,也有很多我还不理解的,但有一个比较方便的方法是可以用的,就是用虚拟机,用 windows xp 的虚拟机运行 OD 就可以正常脱壳了,不过在本机上为什么不能脱壳,我还不知道是什么原因,欢迎大佬指点

# 其他脱壳方法

ESP 定律脱壳只是手动脱壳其中一个方法,想更深层次理解 ESP 定律或学习其他方法可以看这个博客:ESP 定理如何判断找出 OEP 【OEP 脱壳的 5 种方法】