ximo脱壳1—手脱UPX壳
ximo脱壳之基础教程第一课——手脱UPX壳
UPX壳为一种简单的压缩壳
调试工具为PEID和OD
手脱UPX有四种方式找到OEP
第一种:单步跟踪
第二种:ESP寻址
第三种:2次内存镜像法
第四种:一次直达法
一、单步跟踪法
首先,打开OD,将示例程序

打开该文件之后,我们进行单步跟踪

图中标出的即为单步跟踪的按钮
当我们遇到跳转语句,例如JMP语句时,我们要判断他是往下跳还是往上跳,如果为往下跳,我们直接跳过去就可以,但是如果是往上跳,可能会有循环等结构,比较的麻烦,所以我们才去直接断点的方式来避免往上跳的情况
比如:

这里我们可以看到执行的该条语句为向上跳转,此时我们可以在该条语句的下一句处设下断点,然后点击运行按钮,即可直接到达,而不需要在向上跳转

如图所示
之后我们一直单步跟进就可以
知道我们发现一个比较特殊的JMP跳转

这里我们发现这条JMP指令跳转的幅度很大,我们单步跟进去

这里就是OEP了,到此我们就找到OEP了
接下来演示如何脱壳
脱壳可以使用OD自带的插件,右键点击使用OllyDebug脱壳调试进程

然后选择第一种或者第二种方式都可以脱壳
二、ESP定律法
这种方法的原理就是堆栈平衡,在跳转到OEP之前,程序肯定会平衡堆栈,也就是会经过同一个地址(这里描述的可能不是很清楚)
下面开始操作

首先右键点击ESP寄存器,点击Follow in dump
或者在命令行中输入 dd/hr esp寄存器中的值

然后汇编代码区右键点击breakpoint断点,选择hardware on access(硬件断点),后面选择word,dword都可以
然后点击运行

可以看到直接定位到了那句JMP到OEP的指令
三、两次内存映像法

点击M

进入该界面
点击.rsrc那一行右键下断点,然后运行
然后再点击UPX0那一行,再次下断点运行,

两次断点之后,我们又发现了跳转到OEP的指令
四、一次直达法
右键查找,选择命令

由于第一条是pushad,所以一定有一条popad与之对应,我们这里直接查找popad

直接就可以找到了

浙公网安备 33010602011771号