破解之脱壳练习

0X01    初体验

作业一:??(OD入口和区段都很迷)  exeinfo下界面显示 UPX

作业二:e语言  (界面显示是:nspack(我也不知道这是什么))  exeinfo区段信息没什么用,都被修改过了

作业三:VMP   

问题:od怎么看区段信息.....界面稍有点复杂

要了解win32API

0X02      再分析

作业一:

(1)Exeinfo

 UPX -> Markus & Laszlo ver. [      ] <- from file. [ ! Modified ! ] ( sign like UPX packer ) 

故可以确定为是UPX壳

(2)  手脱UPX壳

★ 新知识   ESP定律

ESP定律从我理解来说,就是程序开始时有个PUSHAD指令来保存所有寄存器状态,PUSHAD指令就像是大括号,有PUSH就有POP,两者共同的特点就是修改了ESP寄存器的值,所以我们需要在被修改的值上下硬件断点,来找到POP指令的位置,找到POP后就离原本的程序OEP不远了

第一条指令就是pushad,这显然不是普通程序应该有的第一条指令,pushad保存当前的上下文,即把寄存器的值存到堆栈中。

pushad后,可以看到堆栈中的内容正是之前的各个寄存器的值,其中栈顶保存的是EDI的值。栈顶的地址存储在ESP中。如果程序要正常运行,必定要从栈中取回这些值,因此可以到栈顶的内容表示的地址去看看会进行什么操作。

 

练习链接,感兴趣自取。

链接:https://pan.baidu.com/s/1K8nPCIefj8NwBuaXCXDYJQ
提取码:lgdd

猜你喜欢

转载自www.cnblogs.com/blazarstar/p/12892640.html