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

 

 直接就可以找到了

posted @   写在风中的信  阅读(496)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示