逆向工程核心原理-第十四章-运行时压缩
14.1 数据压缩
数据压缩分为两类:
- 经压缩后的文件能完全复原, 无损压缩
- 经压缩后的文件不能完全复原, 有损压缩
下面我们分开介绍
无损压缩
最具代表性的无损压缩算法:
- Run-Length
- Lempel-Ziv
- Huffman
有损压缩
有损压缩允许压缩文件是损失一定信息, 以此换取高压缩率. 图片, 音乐, 视频(jpg, mp3, mp4)大部分都是用这种方法. 因为其中损失的数据非常小, 人们感受不到, 而且其中还有无用的数据, 比如音乐文件有损压缩删除了超越人类听觉范围的波长区段来缩减大小.
14.2 运行时压缩
运行时压缩器时针对可执行文件而言的, 通过文件中的解压代码, 在文件运行时解压.
运行时压缩文件也是PE文件, 内部含有原PE文件和解码程序. 下面是普通压缩, 和运行时压缩区别
二者最大的不同点时: PE文件的可运行性!!!!!!!!!!!!!!!!!!!!!!!!!!
运行时压缩器分类:
- 普通的压缩器称为: 压缩器(Packer)
- 经反逆向技术特别处理的压缩器: 保护器(Protector)
(运行时)压缩器
使用压缩器的目的一般有两个:
- 缩减文件大小
- 隐藏代码数据
保护器
在压缩的同时使用多项反逆向技术的压缩器.
使用目的更明确:
- 防止破解
- 保护代码资源
常见的保护器:
- 商用: ASProtect, Themida, SVKP
- 公用: UltraProtect, Morphine
14.3 实例测试
使用upx对notepad.exe进行压缩, 也叫加壳, 这个是压缩壳
压缩后的文件与压缩前文件比较
有些改变的是:
- .text节变成了UPX0, .data变成了UPX1
- UPX0的节大小变成了0
- EP(入口点)变成了第二个节区UPX1, 原本是在第一个节区.text
使用PEView查看第一个节区头(UPX0)
虽然在磁盘中大小为0, 但它的虚拟地址大小为0x10000, 也就是说解压后文件会将压缩的代码放入UPX0中.
后面会调试加壳后notepad