手脱UPX壳的几种方法
最近在研究各个壳的脱壳方法,有些心得,和大家分享一下如何手脱UPX的壳
我们的流程是 PEID查壳
得知壳的形式为 UPX 0.89.6 - 1.02/ 1.05 - 2.90 -> Markus & Laszlo
OD载入,提示为“压缩代码是否继续分析”,我们选择否
方法一:单步跟踪法
程序停在如下图的地方
F8单步向下运行,注意向上的跳转
遇到向上的箭头我们就在下一行 F4(运行到此处),注意,红色代表跳转实现,灰色代表没有实现,我们的目的就是不让他实现,灰色的我们就不用管,具体的说明一下:
0040E8D6 90 nop
0040E8D7 90 nop
0040E8D8 8A06 mov al,byte ptr ds:[esi]
0040E8DA 46 inc esi
0040E8DB 8807 mov byte ptr ds:[edi],al
0040E8DD 47 inc edi
0040E8DE 01DB add ebx,ebx
0040E8E0 75 07 jnz short UPX.0040E8E9
0040E8E2 8B1E mov ebx,dword ptr ds:[esi]
0040E8E4 83EE FC sub esi,-0x4
0040E8E7 11DB adc ebx,ebx
0040E8E9 ^ 72 ED jb short UPX.0040E8D8 //这里要往回跳,跳到0040E8D8处
0040E8EB B8 01000000 mov eax,0x1 //F4,继续F8
0040E8F0 01DB add ebx,ebx
0040E8F2 75 07 jnz short UPX.0040E8FB
我们一路向下运行,发现出现了如下的代码
两个向上的跳转,下面为NOP语句,我的处理办法是在NOP下一行代码 下F4,因为NOP为空,没有数据。同样的方法我们继续F8单步运行。
当然了,程序中有许多类似的向上跳转,我就不一一叙述,当F8单步运行到一段时间后,你可能就会遇见这样的情况
重点说明一下:
0040E9F4 F2:AE repne scas byte ptr es:[edi]
0040E9F6 55 push ebp
0040E9F7 FF96 A4EC0000 call dword ptr ds:[esi+ECA4]
0040E9FD 09C0 or eax,eax
0040E9FF 74 07 je short NOTEPAD.0040EA08
0040EA01 8903 mov dword ptr ds:[ebx],eax
0040EA03 83C3 04 add ebx,4
0040EA06 ^ EB E1 jmp short NOTEPAD.0040E9E9 //要往回跳了
0040EA08 FF96 A8EC0000 call dword ptr ds:[esi+ECA8] //关于这个call,不同的程序不一样,我的跑飞了,再次运行时我直接跳过了
0040EA0E 61 popad //这里F4,继续F8
0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC //在这里直接跳到了OEP
在脱壳的时候。我们要注意popad这个指令,它的出现标志着我们的程序可能到达OEP
我们到达OEP了,然后使用OD自带的脱壳工具进行脱壳
方法二:ESP定律手动脱壳
F8单步运行,发现右边的寄存器ESP处变红,说明此处可以进行ESP定律
dd 0012FFA4回车, 断点--硬件访问--WORD,F9运行,直接来到这里
0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC //来到这 单步就到了OEP
脱壳步骤和上面一样
方法三:内存镜像法
ALT+M打开内存
找到.rsrc,F2下断,F9运行
ALT+M打开内存
找到UPX0,F2下断,F9运行
出现如下图所示
说明一下:
0040EA01 8903 mov dword ptr ds:[ebx],eax //来到这,F8继续
0040EA03 83C3 04 add ebx,4
0040EA06 ^ EB E1 jmp short NOTEPAD.0040E9E9
0040EA08 FF96 A8EC0000 call dword ptr ds:[esi+ECA8]
0040EA0E 61 popad //即将到达oep
0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC
最后一种办法: 秒到oep法
直接CTRL+F,输入popad
0040EA0E 61 popad //F2下断,F9运行,F2取消断点,单步F8
0040EA0F - E9 B826FFFF jmp NOTEPAD.004010CC
单步向下,最后到达了OEP
最后特别的提醒一下,我们发现jmp是一个很大的跳转,遇到大的跳转我们就要留意
可能不只这几个方法,常用的脱壳方法共计大概7种左右,只是针对UPX的壳目前这几种最好用,欢迎大家来探讨
手脱UPX壳的几种方法相关推荐
- 手动脱UPX壳的几种方法
UPX是一种常见的压缩壳.通过PEID检测到是UPX的壳的话,可以用如下四种方式来脱壳: 单步跟踪法.ESP定律.内存镜像法.POPAD查找法. 1.单步跟踪法.就是使用ollydbg(简称OD)加载 ...
- 简单脱壳教程笔记(2)---手脱UPX壳(1)
本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...
- 简单脱壳教程笔记(3)---手脱UPX壳(2)
我们接着上一篇 "简单脱壳教程笔记(2)---手脱UPX壳(1)"继续.我们说了UPX我们可以使用四种方式,上一篇已经详细的讲解了单步跟踪法,接下来,我们讲解其他方式. 方法2 ...
- RE入门之脱壳——手脱UPX壳
很多加了壳的软件是很难逆向分析的,需要手脱.下面以UPX壳为例简单介绍一下如何手动脱壳 需要工具:x64dbg. 以buuctf中re的新年快乐为例 拿到程序以后使用x64dbg打开. F9运行到程序 ...
- 用ollydbg手脱UPX加壳的DLL
用Ollydbg手脱UPX加壳的DLL 作者:fly [目标程序]:UPX加壳的EdrLib.dll.附件中还有输入表.重定位数据.UPXAngela以及UnPacked以供参考. [作 ...
- 【2022.1.3】手脱压缩壳练习(含练习exe)
[2022.1.3]手脱压缩壳练习(含练习exe) 文章目录 [2022.1.3]手脱压缩壳练习(含练习exe) 0.简介 1.单步跟踪法 (#)方法介绍 (0)练习exe下载 (1).查看源程序 ( ...
- 手脱压缩壳UPX的4种查OEP方法
目录 先使用PEid进行查壳,可以看出壳的详细信息 方法一 单步跟踪 方法二 ESP定律法 方法三 两次内存镜像法 方法四 一步直到法 先使用PEid进行查壳,可以看出壳的详细信息 方法一 单步跟踪 ...
- 监督学习:KNN(K-近邻)算法实现手写数字识别的三种方法
没人会看的开场白:本来觉得自己从数据建模转人工智能方向应该问题不大(自我感觉自己算法学的不错).结果一个K-邻近实现手写数字识别的代码就让我改了三四天.虽然网上这方面的代码是很多,但是我运行了好几个, ...
- 手脱UPX v0.89.6 - v1.02
声明: 只为纪录自己的脱壳历程,高手勿喷 这个壳的脱法很多一般都一步直达的,步过我喜欢ESP定律 1.载入OD,在入口下一行ESP定律运行一次 00457170 > 60 pushad ; // ...
最新文章
- matplotlib可视化去除轴标签、轴刻度线和轴刻度数值实战:Axis Text Ticks or Tick Labels
- iis 网页HTTP 错误 404.3 - Not Found解决方案
- Xamarin.Forms支持的地图显示类型
- 乐观锁、悲观锁简单分析,回忆旧(新)知识...
- element 密码输入框用*显示_用 Java 实现天天酷跑,这个真的有点强了
- sql range 范围内查询
- 页面 渲染 回流 测试 笔记
- mysql的操作语句_Mysql最常用的操作语句收集
- 隐藏多行文本框的滚动条
- matlab 中pid tuning,PID Tuning Algorithm
- ARCGIS 分区统计的时候,出现无法解决的重大问题,程序崩溃
- 不知道如何做好精益生产管理?可能是你的企业还没有进行工时分析
- 十道经典javaWeb面试题
- 物联网(IoT)课程
- 抽象代数学习 阿贝尔群
- 【微信小程序】z-index失效
- 网站制作教程:PageAdmin建站系统在win2012上的安装
- Spring 测试运行的时候提示 Unable to find a @SpringBootConfiguration 错误
- 360 冰刃实验室研究员获得微软史上最高漏洞赏金
- dos命令为java程序赋值_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是() (5.0分)_学小易找答案...