1. 数据压缩
经过压缩的文件若能100%恢复,就称该压缩为”无损压缩”(Lossless Data Compression) ;若不能恢复原状,称之为”有损压缩”(Loss Data Compression).
1.1 无损压缩
它们最根本的压缩理念也是Run-Lenght, Lempel-Ziv, Huffman, 然后应有了一些各自特有的技术(压缩率,压缩/解压时间).
1.2 有损压缩
有损压缩允许压缩文件(数据)时损失一定信息,以此换取高压缩率.
2. 运行时压缩器
项目 | 普通压缩 | 运行时压缩 |
---|---|---|
对象文件 | 所有文件 | PE文件(exe,dll,sys) |
压缩结果 | 压缩文件(zip,rar) | PE文件(exe,dll,sys) |
解压缩方式 | 使用专门解压缩程序 | 内部含有解码程序 |
文件是否可执行 | 本身不可执行 | 本身可执行 |
优点 | 可以对所有文件以高压缩率压缩 | 无须专门解压缩程序便可直接运行 |
缺点 | 若无专门解压缩软件则无法使用压缩文件 | 每次运行均需要解码程序导致运行时间过长 |
把普通PE文件创建后运行时压缩文件的实用程序称为”压缩器(Packer)”.经反逆向(Anti-Reversing)技术特别处理的压缩器称为保护器(Protector).
2.1 压缩器
PE压缩器是指可执行文件的压缩器,称为”运行时压缩器”,它是PE文件的专用压缩器.
实用目的
压缩PE文件的大小,便于网络传输保存
隐藏PE文件内部代码与资源
压缩后的数据以难以辨认的二进制保存,从文件本身来看,还能有效隐藏内部代码与资源.使用现状
现状的实用程序,”打补丁”文件,普通程序都广泛应用运行时压缩.
- 压缩器种类
PE压缩器大致分两类 : 一类是单纯用于压缩普通PE文件的压缩器;另一类是对源文件进行较大变形,严重破坏PE头的压缩器.
2.2 保护器
不但像普通压缩器一样仅对PE文件进行运行时压缩,而应用了多种防止代码逆向分析的技术.
使用目的
防止破解,保护代码与资源.使用现状
安全保护程序为了防止恶意破解而使用各种保护器来保护自己,常见的恶性代码中也大量使用保护器来防止(或减少)杀毒软件的检测.有些保护器还提供”多变的代码”,每次都会生成不同形态(但功能相同)的代码,这给病毒诊断带来很大的困难.保护器种类
保护器种类多样,有公用程序,商业程序,还有专门提供而已代码使用的保护器.
3. 运行时压缩测试
用压缩器UPX压缩notepad.exe,比较了下文件状态.
比较notepad.exe与notepad_upx.exe
- PE头的大小一样(0~400h)
- 节区名称改变(“.text->”upx0”,”.data”->”upx1”).
- 第一个节区的RawDataSize=0(文件中的大小为0).
- EP位于第二个节区(原notepad.exe的EP在第一个节区).
- 资源节区(.rsrc)大小几乎无变化.
我们用PEView查看第一个节区头,如图.
从VirtualSize值可以发现问题,第一个节区的VirtualSize值竟被设置为10000(而SizeOFRawData值为0).也就是说,经过UPX压缩后的PE文件在运行瞬间将(文件中)压缩的代码解压到(内存中的)第一个节区.