运行时压缩

数据压缩

  1. 经过压缩的文件若能100%恢复,则称该压缩为"无损压缩",若不能恢复原状,则称该压缩为有损压缩。
  2. 无损压缩用来缩减文件的大小,压缩后的文件更易保管、移动,使用经过压缩的文件之前,需要先对文件解压缩。
  3. 有损压缩允许压缩文件时损失一定信息,以此换取高压缩率,压缩多媒体文件时,大部分都是用这种有损压缩方式,从压缩特性来看,有损压缩的数据压缩后不能完全恢复原始数据,人类的肉眼与听觉几乎无法觉察到这些多媒体文件在压缩时中损失的数据。

运行时压缩器

  1. 运行时压缩器是针对可执行文件而言的,可执行文件内部还有解压缩代码,文件在运行瞬间于内存中解压缩后执行。
  2. 运行时压缩文件也是PE文件,内部含有原PE文件于解码程序,在程序的EP代码中执行解码程序,同时在内存中解压缩后执行。
  3. 把普通PE文件创建成运行时压缩文件的使用程序称为压缩器,经反逆向技术特别处理的压缩器称为保护器。
压缩器
  1. 使用目的
  • 缩减PE文件的大小
  • 隐藏PE文件内部代码于资源
  1. 压缩器的种类
  • PE压缩器大致可分为两类:一类是单纯用于压缩普通文件的压缩器;另一类是对源文件进行较大变性、严重破坏PE头、意图稍显不纯的压缩器。
保护器
  1. PE保护器是一类保护PE文件免受代码逆向分析的使用程序,它们不想普通的压缩器一样仅对PE文件进行运行时压缩,而应用了多种防止代码逆向分析技术(反调试、反模拟、代码混乱、多态代码、垃圾代码、调试器监控等。),这类保护器使压缩后的PE文件尺寸反而比源文件要大一些,调试起来非常难。
  2. 使用目的
  • 防止破解
  • 保护代码与资源
  1. 使用现状
  • 这类保护器大量应用于对破解很敏感的安全程序,比如安装在线游戏时会自动安装安全保护程序,游戏安全保护程序就是为了防止游戏破解工具运行的。
  • 常见的恶意代码中也大量使用保护器来防止杀毒软件的检测。

运行时压缩测试

  1. 以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代码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值