数据压缩
- 经过压缩的文件若能100%恢复,则称该压缩为"无损压缩",若不能恢复原状,则称该压缩为有损压缩。
- 无损压缩用来缩减文件的大小,压缩后的文件更易保管、移动,使用经过压缩的文件之前,需要先对文件解压缩。
- 有损压缩允许压缩文件时损失一定信息,以此换取高压缩率,压缩多媒体文件时,大部分都是用这种有损压缩方式,从压缩特性来看,有损压缩的数据压缩后不能完全恢复原始数据,人类的肉眼与听觉几乎无法觉察到这些多媒体文件在压缩时中损失的数据。
运行时压缩器
- 运行时压缩器是针对可执行文件而言的,可执行文件内部还有解压缩代码,文件在运行瞬间于内存中解压缩后执行。
- 运行时压缩文件也是PE文件,内部含有原PE文件于解码程序,在程序的EP代码中执行解码程序,同时在内存中解压缩后执行。
- 把普通PE文件创建成运行时压缩文件的使用程序称为压缩器,经反逆向技术特别处理的压缩器称为保护器。
压缩器
- 使用目的
- 压缩器的种类
- PE压缩器大致可分为两类:一类是单纯用于压缩普通文件的压缩器;另一类是对源文件进行较大变性、严重破坏PE头、意图稍显不纯的压缩器。
保护器
- PE保护器是一类保护PE文件免受代码逆向分析的使用程序,它们不想普通的压缩器一样仅对PE文件进行运行时压缩,而应用了多种防止代码逆向分析技术(反调试、反模拟、代码混乱、多态代码、垃圾代码、调试器监控等。),这类保护器使压缩后的PE文件尺寸反而比源文件要大一些,调试起来非常难。
- 使用目的
- 使用现状
- 这类保护器大量应用于对破解很敏感的安全程序,比如安装在线游戏时会自动安装安全保护程序,游戏安全保护程序就是为了防止游戏破解工具运行的。
- 常见的恶意代码中也大量使用保护器来防止杀毒软件的检测。
运行时压缩测试
- 以notepad.exe为例进行运行时压缩测试。
C:\Users\12586\Downloads\example\02\14\bin>upx -o notepad_upx.exe notepad.exe
Ultimate Packer for eXecutables
Copyright (C) 1996 - 2008
UPX 3.03w Markus Oberhumer, Laszlo Molnar & John Reiser Apr 27th 2008
File size Ratio Format Name
-------------------- ------ ----------- -----------
67584 -> 48128 71.21% win32/pe notepad_upx.exe Packed 1 file.
- 可以看到压缩后的文件尺寸明显减小了(67584 -> 48128),若使用ZIP压缩,则文件大小缩减为35231,也就是说,运行时的压缩率要比普通的ZIP压缩低一些,这是由于其压缩后得到的是PE文件,需要添加PE头,并且还要放入解压缩代码。
- Compare notepad.exe and notepad_upx.exe
- PE头大小一样(0~400h)。
- 节区名称改变(".text" -> “UPX0”, “.data” -> “UPX1”)
- 第一个节区的RawDataSize = 0
- EP位于第二个节区,原来notepad.exe的EP在第一个节区。
- 资源节区大小几乎没有变化。
- 需要注意的是第一个节区的VirtualSize(在内存中的大小)的值被设置为1000,而SizeOfRawData的值为0(在磁盘中的大小),这就说明,解压缩代码与压缩的源代码都在第二个节区,文件运行时首先执行解压缩代码,把处于解压缩状态的源代码解压到第一个节区,解压过程结束后即运行源文件的EP代码。