文章目录
概述
主要讲解加壳脱壳,每周讲解一种壳。
参考教材:可以买来当字典。
《逆向工程核心原理》,作者李承远
《加密与解密(第4版)》,作者段钢
《恶意代码分析实战》,作者Michael Sikorski
《0day安全:软件漏洞分析技术(第二版) 》,作者王清等
《IDA Pro权威指南(第2版)》,作者Eagle。
操作系统环境:Windows XP Service Pack系统,Win7环境可能出现执行失败等问题。
本节目标:了解UPX壳解压缩过程、查找用UPX解壳软件的OEP(original entry point,原始入口点)。
基本概念
有损压缩
有损压缩会损失一定的信息,常见的有损压缩有MP3、MP4、jpg等,无损压缩可以完全恢复原始数据,但文件大小会更大,常见的有png、加壳文件压缩器等,bmp是无压缩文件。
Misc隐写:jpeg/jpg图片属性中的说明、来源都可以添加内容。
LSB应用范围(最低有效位隐写):一般只能在无损压缩(PNG)、或无压缩(BMP)的图片上实现最低有效位隐写。JPG图片对像数进行了有损压缩,所以无法使用LSB隐写。
加壳
加壳是指运行时压缩,即对可执行程序资源进行压缩,通过修改程序入口点等压缩、加密、保护exe和dll文件。
只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。加壳后程序可以直接运行,但不能查看源代码,除非脱壳。
目的:反跟踪、被人跟踪调试、防止算法程序被别人静态分析。
解压原理:是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。当加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。
壳的装载及其分类
壳是什么?外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正程序。
壳的装载过程:获取壳自己需要使用的API地址。解压解密原程序的各个区块。进行必要的重定位。跳转到程序原入口点OEP。
脱壳的目的是找到OEP(Original Entry Point,原程序的入口点),软件加壳就是隐藏了OEP(或者用了假的OEP),只要我们找到程序真正的OEP,就可以立刻脱壳。PUSHAD(压栈)代表程序的入口点。
常见寻找OEP脱壳的方法,搜索OEP百度百科有五种方法。
壳的分类
压缩壳:想把程序压缩变小,例如ASPack、UPX、PECompact等;
加密壳(保护器):商业程序防破解,ASProtect、Armadillo、ExeCryptor、Themida、VMProtect等;
其他:病毒加壳,反病毒AntiVirus。
压缩器和保护器
压缩器:PE压缩器是指可执行文件的压缩器。
使用目的:缩减PE文件大小;隐藏PE文件内部代码与资源。
两种分类:单纯压缩普通PE文件的压缩器。对源文件进行较大变形、严重破坏PE头、意图不纯的压缩器,指专用于恶意程序的压缩器。
目的纯粹的压缩器(未经VirusTotal诊断): UPX、ASPack等;
目的不纯的压缩器(经VirusTotal诊断): UPack、PESpin、 NSAnti等。
保护器:PE保护器是一类保护PE文件免受代码逆向分析的实用程序。
应用了多种防止代码逆向分析的技术(反调试、反模拟、代码混乱、多态代码、垃圾代码、调试器监视等),使压缩后的PE文件尺寸反而比源文件要大一些,调试难度高。
使用目的:防破解;保护代码和资源。(保护器不仅可以保护PE文件本身,还可在文件运行时保护进程内存,防止打开Dump窗口。)
使用现状:大量应用于对破解很敏感的安全程序。因为恶意的游戏破解者破解游戏的安全保护程序,利用“游戏内核”获取金钱回报。
另一方面,常见的恶性代码( Trojan、Worm )中也大量使用保护器来防止(或降低)杀毒软件的检测。
分类:商用保护器: ASProtect、Themida、 SVKP等;
公用保护器: UltraProtect、Morphine等。
恶意程序在线分析网站
www.virustotal.com,是一个提供免费的可疑文件分析服务的网站,可以用来分析恶意程序。
它与传统杀毒软件的不同之处,在于通过多种反病毒引擎扫描文件。
使用多种反病毒引擎对上传的文件进行检测, 以判断文件是否被病毒, 蠕虫, 木马, 以及各类恶意软件感染。
UPX实验
介绍UPX
UPX软件(The Ultimate Packer For Executables,可执行文件终极打包器)是一款可执行文件压缩器,压缩过的可执行文件体积缩小50%-70%。
UPX压缩器官网:http://upx.sourceforge.net
下载地址: https://en.softonic.com/download/upx/windows/post-download
UPX是一个著名的压缩壳,主要功能是压缩PE文件(比如exe,dll等文件),
有时候也可能被病毒用于免杀。
使用UPX压缩文件
开启Windows XP SP3虚拟机,拖拽upx-3.96-win32文件夹到虚拟机。
命令行跳转到upx文件夹。
1.输入命令upx
2.压缩样例文件命令:upx -o 输出文件 被压缩文件
压缩到原来的71.97%,压缩率比ZIP压缩(35kb)要低。原因在于,upx压缩后得到的是PE文件(需要添加PE头),还要放入解压缩代码。
3.比较原程序和upx压缩程序:
不变:
PE头的大小一样(0~400h)
第一个节区的RawDataSize=0,即在PE文件中的大小为0
变化:
节区名称改变:.text->.upx0,节区头.data->.upx1。
EP(Entry point入口点)位于第二个节区.upx1,原notepad. exe的EP在第一个节区.text。(复习EP和.text的概念就能明白这一点)
资源节区(.rsrc)大小变化不大。
UPX加壳原理
首先将程序压缩。 所谓的压缩包括两方面:
一方面在程序的开头或者其他合适的地方插入一段代码。 另一方面是将程序的其他地方做压缩(也就是上面讲到的压缩),压缩也可以叫做加密。
当程序执行时:实时的对程序解压缩。解压缩功能是在第一步插入代码时完成的功能。
联起来就是: UPX可以完成代码的压缩和实时解压执行。且不会影响程序的执行效率。
使用工具查看和脱壳
Lord PE
安装
LordPE,是一款功能强大的PE文件分析、修改、脱壳软件。LordPE是查看PE格式文件信息的首选工具,并且可以修改相关信息。
学习之初最好使用中文版,花费10C币重新下载中文版,
CSDN地址https://download.csdn.net/download/gdcat2008/1254308:
运行程序,发现报错:
参考《记修复“LordPE已停止工作”》,得知是LordPeFix.dll有错误,
直接下载文章作者分享的LordPeFix.dll,成功运行:
文章地址https://zhuanlan.zhihu.com/p/29924819
实验:使用Lord PE对比两个程序的区段表
Lord PE打开notepad.exe,查看nodepad.exe的区段表:
Lord PE打开notepad_upx.exe,查看nodepad_upx.exe的区段表:
从VirtualSize值可以发现notepad_upx.exe第一个节区的VirtualSize值竟被设置为10000(而SizeOfRawData值为0)。
这就是说,经过UPX压缩后的PE文件,在运行瞬间将文件中的压缩代码解压到内存中的第一个节(UPX0)。
说得更详细一点,解压缩代码与压缩的原代码( notepad.exe 的代码)都在第二个节区(UPX1)。文件运行时首先执行解压缩代码,把处于压缩状态的原代码解压到第一个节区(UPX0)。解压过程结束后即运行原文件的EP代码。
工具PEiD
介绍
PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名,可以探测大多数PE文件封包器、加密器和编译器。
具有三种扫描模式:
正常扫描模式:可在PE文档的入口点扫描所有记录的签名;
深度扫描模式:可深入扫描所有记录的签名,范围更广、更深入;
核心扫描模式:可完整地扫描整个PE文档,建议将此模式作为最后的选择。
使用
点击右下角箭头,选择深度扫描,得到加壳方式;
点击右下角箭头,选择Plugins- generic oep finder,得到OEP;
点击右下角箭头,选择PEiD generic Unpacker,脱壳得到原程序。
(本地下载的PEiD v0.95自带插件不佳,脱壳失败)
脱壳工具UPX UnPacKer 0.3
脱壳失败,参考《UPX UnPacKer 0.3 中文版》,
文章地址http://www.52bug.cn/cracktool/3371.html
(在软件园经常下载到流氓软件,不考虑软件园渠道寻找资源)
直接手动脱壳吧!
使用upx进行脱壳
询问同学得知,upx软件也可以用来脱壳。
输入命令upx -d notepad_upx.exe,查看文件,脱壳成功:
使用Ollydbg手动脱壳(重点)
反思
把耐心用在关键环节!
顺序学习,到了手动脱壳部分已经做不动了。