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
直接就可以找到了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?