ESP定律是炒的很老的一个东东的,简单介绍下原理
压缩壳可以理解成良性的loader,在完成原程序的释放后不参与程序的运行,解压后由pe原来的机制来进行程序运行。相当于用真空袋装被子,要拿出来用的时候还是一样的(import table等)。
ESP定律的根据是压缩壳在进入自身代码和离开自身代码的时候堆栈必须保持平衡来打着寻找OEP的目的的。
进入操作
实验程序是个98notepad,OD载入,停在如图位置:
F8单步一次,过pushad
这时候已经完成程序进入之处的寄存器环境保存,看当前esp值。
这里即进入之初的栈顶位置,根据堆栈平衡原理,当压缩壳完成解压的时候需要保持平衡,即在popad之后会再次访问当前esp指向地址。
hr 0012ffa4
下硬件访问断点。
然后F9运行,程序被断在了出口附近,如图:
当前esp保持为0012ffa4
程序停在popad后
接下来是个变形的jmp
push 后ret
就到OEP了
dump后执行正常。
OVER。
ps:几乎所有的压缩壳就可以esp脱衣服。记录下。慢慢学