攻防世界 simple-unpack 之UPX脱壳初探

目录

0x01 “壳”what?

0x02 加壳的目的和作用

0x03 常见壳介绍

0x04 查壳

0x05 脱壳


 


0x01 “壳”what?

计算机软件中有一段专门负责保护软件不被非法修改或反编译的程序。他一般都先于程序运行,拿到控制权限,完成保护软件的任务。就像鸡蛋的壳一样起到保护蛋黄和蛋白的作用,基于命名的规则于是这样的程序就成为“壳”了。

加壳的过程实际上是将可执行程序压缩,并包上一层特殊的程序,这里类似于zip、rar压缩包,但是不同的是加壳过的EXE文件依然是是可执行文件,它可以同正常的EXE文件一样执行。用户执行的实际上是外壳程序,这个外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正程序,这一切工作都是在内存中运行的,整个过程对用户是透明的。

壳和病毒在某些方面比较类似,都需要比原程序代码更早的获得控制权。壳修改了原程序的执行文件的组织结构,从而能够比原程序的代码提前获得控制权,并且不会影响原程序的正常运行。

0x02 加壳的目的和作用

1.压缩(Packers):压缩这类壳主要目的是减小程序体积,如ASPacK、UPX和PECompact等。

2.保护(Protectors):保护程序,用上了各种反跟踪技术保护程序不被调试、脱壳等,其加壳后的体积大小不是其考虑的主要因素,如ASProtect、Armadillo、EXECryptor等。随着加壳技术的发展,这两类软件之间的界线越来越模糊,很多加壳软件除具有较强的压缩性能,同时也有了较强的保护性能。

0x03 常见壳介绍

1.压缩型

 1).ASPacK   

ASPack是款Win32可执行文件压缩软件,可压缩Windows 32位可执行文件(.exe)以及库文件(.dll、.ocx),文件压缩比率高达40%~70%。

2).UPX

UPX是一个以命令行方式操作的可执行文件经典免费压缩程序,压缩算法自己实现,速度极快。(开源)

3). PECompact

 PECompact同样也是一款能压缩可执行文件的工具(支持EXE、DLL、SCR、OCX等文件)。相比同类软件,PECompact提供了多种压缩项目的选择,用户可以根据需要确定哪些内部资源需要压缩处理。同时,该软件还提供了加解密的插件接口功能。

2.保护型

1).ASProtec

ASProtect是一款非常强大的Windows 32位保护工具,这4、5年来,其一直在更新进步。其开发者是俄国人Alexey Solodovnikov。它拥有压缩、加密、反跟踪代码、反-反汇编代码、CRC校验和花指令等保护措施。它使用Blowfish、Twofish、TEA等强劲的加密算法,还用RSA1024作为注册密钥生成器。它还通过API钩子(API hooks,包括Import hooks(GPA hook)和Export hooks)与加壳的程序进行通信。甚至用到了多态变形引擎(Polymorphic Engine)。反Apihook代码(Anti-Apihook Code)和BPE32的多态变形引擎(BPE32的Polymorphic Engine)。并且ASProtect为软件开发人员提供SDK,实现加密程序内外结合。

ASProtect SKE系列己采用了部分虚拟机技术,主要是在Protect Original EntryPoint与SDK上。保护过程中建议大量里使用SDK, SDK使用请参考其帮助文档,在使用时注意SDK不要嵌套,并且同一组标签用在同一个子程序段里。ASProtect使用相当的简单,打开被保护的EXE/DLL文件后,选上保护的选项。再单击菜单Modes,单击Add Mode按钮,将Is this Mode Avtive选上,最后,单击Protection标签,对软件进行保护即可。ASProtect加壳过程中也可外挂用户自己写的DLL文件,方法是在上图中的External Options选项加上目标DLL即可。这样,用户可以在DLL加入自己的反跟踪代码,以提高软件的反跟踪能力。

由于ASProtect名气太大,研究它的人很多,因此很容易被脱壳,不推荐使用。 

2).Armadillo

 Armadillo也称穿山甲,是一款应用面较广的壳。可以运用各种手段来保护你的软件,同时也可以为软件加上种种限制,包括时间、次数,启动画面等等!很多商用软件采用其加壳。Armadillo对外发行时有Public,Custom两个版本。Public是公开演示的版本,Custom是注册用户拿到的版本。只有Custom才有完整的功能,Public版有功能限制,没什么强度,不建议采用。

3).EXECryptor

EXECryptor也是一款猛壳,可能由于兼容性等原因,采用其保护的商业软件不是太多。这款壳的特点是Anti-Debug做的比较隐蔽,另外就是采用了虚拟机保护一些关键代码。

用好EXECryptor 虚拟机保护功能,将关键敏感代码用虚拟机保护起来,能提高强度。EXECryptor 壳能脱的人很多,但对付其虚拟机代码的人不多。 

4).Themida

Themida是Oreans的一款商业壳,官方链接:www.oreans.com。Themida 1.1以前版本带驱动,稳定性有些影响。Themida最大特点就是其虚拟机保护技术,因此在程序中擅用SDK,将关键的代码让Themida用虚拟机保护起来。Themida最大的缺点就是生成的软件有些大。WinLicense这款壳和Themida是同一公司的一个系列产品,WinLicense主要多了一个协议,可以设定使用时间,运行次数等功能,两者核心保护是一样的。

5). VMProtect

VMProtect是一款纯虚拟机保护软件,官方链接:www.VMProtect.ru。它是当前最强的虚拟机保护软件,经VMProtect处理过的代码,至今还没有人公开宣称能还原。

  但也有缺点,就是会影响程序速度,因此在一些对速度要求很高的场合就不适合用了。VMProtect 1.22.3之前是免费版,可以支持EXE,DLL等文件。更高版本需要购买,其支持驱动的保护。现在流行的做法,先用VMProtect将你的核心代码处理一下,再选用一款兼容性好的壳保护。

 

加壳效果对比如图

攻防世界 simple-unpack 之UPX脱壳初探_第1张图片

0x04 查壳

要想解壳,当拿到一个加壳的程序后首先分析是什么方式加壳,俗称查壳,查壳的方法有多种,可以通过文件数据分析的形式查壳,更过的是使用相关工具,对于查壳工具有多种,这里列举几个常用的查壳工具。

1.PEID

攻防世界 simple-unpack 之UPX脱壳初探_第2张图片

2.exeinfopepjhhb

攻防世界 simple-unpack 之UPX脱壳初探_第3张图片

3.FileInfo

攻防世界 simple-unpack 之UPX脱壳初探_第4张图片

有时,FileInfo和PEID会报“PE Win GUI”,Win GUI就是Windows图形用户界面程序统称,表明程序可能没加壳。但不排除也有加壳的可能性,下图是一个ExeCryptor 2.2x的壳,FileInfo报“*PE Win GUI *section* ??”,其不能识别出来。识别信息中带了个问号,表明FI对给出的结果不是太肯定。

使用数据分析的方法也是可行的,例如在此题中的加壳文件使用WinHex或010 Editor打开,通过16进制数据分析可以查看到UPX字段的存在,就可以确定加壳的方式为UPX  如下图

攻防世界 simple-unpack 之UPX脱壳初探_第5张图片

0x05 脱壳

一般的压缩型壳,都会有专用的脱壳机,其加壳的目的就是压缩文件,正如我们常用的zip、rar一样的目的,而加密型的壳一般就没有脱壳机,必须手动脱壳,其加密的目的就是保护程序,更不用提让你容易的解壳了。手工脱壳一般分三个步骤,第一步查找程序的真正入口点(OEP),二是抓取内存映像文件,三是输入表重建。当然现在的加密壳复杂些,还要要考虑更多的东西。

攻防世界 simple-unpack 之UPX脱壳初探_第6张图片

以本题为例,上述已经介绍了本题程序是UPX加壳的,接下来我们使用kali去解壳。

这里要解释一下为什么要用Linux去解壳

攻防世界 simple-unpack 之UPX脱壳初探_第7张图片

通过16进制分析数据不难可以看出此程序是.ELF文件,.ELF是Linux的可执行文件,而非.EXE

使用命令 upx -d filename 解壳

攻防世界 simple-unpack 之UPX脱壳初探_第8张图片

以16进制打开解壳后的文件搜索flag字段,找到了flag字段所在地址,使用地址检索查看flag后全部信息解出此题,

flag{Upx_1s_n0t_a_d3liv3r_c0mp4ny}

攻防世界 simple-unpack 之UPX脱壳初探_第9张图片

 

参考文章https://bbs.pediy.com/thread-20366.htm

你可能感兴趣的:(攻防世界 simple-unpack 之UPX脱壳初探)