最近在研究各个壳的脱壳方法,有些心得,和大家分享一下如何手脱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壳的几种方法相关推荐

  1. 手动脱UPX壳的几种方法

    UPX是一种常见的压缩壳.通过PEID检测到是UPX的壳的话,可以用如下四种方式来脱壳: 单步跟踪法.ESP定律.内存镜像法.POPAD查找法. 1.单步跟踪法.就是使用ollydbg(简称OD)加载 ...

  2. 简单脱壳教程笔记(2)---手脱UPX壳(1)

    本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...

  3. 简单脱壳教程笔记(3)---手脱UPX壳(2)

    我们接着上一篇   "简单脱壳教程笔记(2)---手脱UPX壳(1)"继续.我们说了UPX我们可以使用四种方式,上一篇已经详细的讲解了单步跟踪法,接下来,我们讲解其他方式. 方法2 ...

  4. RE入门之脱壳——手脱UPX壳

    很多加了壳的软件是很难逆向分析的,需要手脱.下面以UPX壳为例简单介绍一下如何手动脱壳 需要工具:x64dbg. 以buuctf中re的新年快乐为例 拿到程序以后使用x64dbg打开. F9运行到程序 ...

  5. 用ollydbg手脱UPX加壳的DLL

    用Ollydbg手脱UPX加壳的DLL 作者:fly [目标程序]:UPX加壳的EdrLib.dll.附件中还有输入表.重定位数据.UPXAngela以及UnPacked以供参考.        [作 ...

  6. 【2022.1.3】手脱压缩壳练习(含练习exe)

    [2022.1.3]手脱压缩壳练习(含练习exe) 文章目录 [2022.1.3]手脱压缩壳练习(含练习exe) 0.简介 1.单步跟踪法 (#)方法介绍 (0)练习exe下载 (1).查看源程序 ( ...

  7. 手脱压缩壳UPX的4种查OEP方法

    目录 先使用PEid进行查壳,可以看出壳的详细信息 方法一 单步跟踪 方法二 ESP定律法 方法三 两次内存镜像法 方法四 一步直到法 先使用PEid进行查壳,可以看出壳的详细信息 方法一 单步跟踪 ...

  8. 监督学习:KNN(K-近邻)算法实现手写数字识别的三种方法

    没人会看的开场白:本来觉得自己从数据建模转人工智能方向应该问题不大(自我感觉自己算法学的不错).结果一个K-邻近实现手写数字识别的代码就让我改了三四天.虽然网上这方面的代码是很多,但是我运行了好几个, ...

  9. 手脱UPX v0.89.6 - v1.02

    声明: 只为纪录自己的脱壳历程,高手勿喷 这个壳的脱法很多一般都一步直达的,步过我喜欢ESP定律 1.载入OD,在入口下一行ESP定律运行一次 00457170 > 60 pushad ; // ...

最新文章

  1. matplotlib可视化去除轴标签、轴刻度线和轴刻度数值实战:Axis Text Ticks or Tick Labels
  2. iis 网页HTTP 错误 404.3 - Not Found解决方案
  3. Xamarin.Forms支持的地图显示类型
  4. 乐观锁、悲观锁简单分析,回忆旧(新)知识...
  5. element 密码输入框用*显示_用 Java 实现天天酷跑,这个真的有点强了
  6. sql range 范围内查询
  7. 页面 渲染 回流 测试 笔记
  8. mysql的操作语句_Mysql最常用的操作语句收集
  9. 隐藏多行文本框的滚动条
  10. matlab 中pid tuning,PID Tuning Algorithm
  11. ARCGIS 分区统计的时候,出现无法解决的重大问题,程序崩溃
  12. 不知道如何做好精益生产管理?可能是你的企业还没有进行工时分析
  13. 十道经典javaWeb面试题
  14. 物联网(IoT)课程
  15. 抽象代数学习 阿贝尔群
  16. 【微信小程序】z-index失效
  17. 网站制作教程:PageAdmin建站系统在win2012上的安装
  18. Spring 测试运行的时候提示 Unable to find a @SpringBootConfiguration 错误
  19. 360 冰刃实验室研究员获得微软史上最高漏洞赏金
  20. dos命令为java程序赋值_在DOS命令行状态下,如果源程序HelloWorld.java在当前目录下,那么编译该程序的命令是() (5.0分)_学小易找答案...

热门文章

  1. 开发Garmin佳明手表应用准备工作
  2. 使用NDB调试Linux内核的线程切换过程
  3. MS word、Excel 双击打开很慢问题解决
  4. Andriod_圆形图标
  5. 微软确认裁员1万人,遣散费约54亿元,人均获赔54万!
  6. 《系统思考》:先有鸡还是先有蛋?(转)
  7. Linux下搭建File Browser文件管理系统
  8. Windows键盘对应苹果的Option键
  9. 高级操作系统选择判断总结
  10. 365gps怎样修改服务器,gps365定位器怎么用(gps定位器ID号怎么获取)