《逆向工程核心原理》读书笔记——第14章 运行时压缩

14.3 运行时压缩测试

  本节将以notepad.exe为例进行运行时压缩测试。
提示
  本节示例使用的是Windows XP SP3中的notepad.exe程序。
我使用的压缩器为UPX,它操作简单、功能强大,且完全免费,受到很多人的青睐。
  进入https://upx.sourceforge.net网站,下载“Win32 Console Version”版upx-3.96-win32.zip后在命令行窗口运行,出现图14-1所示的界面,显示出UPX的使用说明。
在这里插入图片描述

图14-1UPX压缩器

  把notepad.exe文件复制到工作文件夹后,使用如图14-2所示的命令参数,对notepad.exe文件进行运行时压缩。
upx -o notepad_upx.exe notepad.exe
在这里插入图片描述

图14-2 notepad.exe运行时压缩

  从列出的压缩摘要中可以看到,压缩后的文件尺寸明显减小了(67584→48640)。若使用ZIP压缩,则文件大小缩减为35231。也就是说,运行时的压缩率要比普通的ZIP压缩低一些,这是由于其压缩后得到的是PE文件,需要添加PE头,并且还要放入解压缩代码。

比较notepad.exe 与notepad_upx.exe文件

  图14-3是从PE文件视角比较2个文件的示意图,很好地反映出了UPX压缩器的特点(选用不同类型的压缩器与选项,运行时压缩文件的形态也不相同)。
在这里插入图片描述

图14-3比较notepad.exe与notepad_upx.exe

notepad.exe与notepad_upx.exe的比较项目
1、PE头的大小一样(0~400h)。
2、节区名称改变(".text"→"UPX0", “.data"→"UPX1”)。
3、第一个节区的RawDatasize=0(文件中的大小为0)。
4、EP位于第二个节区(原notepad.exe的EP在第一个节区)。
5、资源节区(.rsrc)大小几乎无变化。
  需要引起注意的是,第一个节区(UPX0)的RawDataSize为0,即第一个节区在磁盘文件中是不存在的。UPX为何要创建这个空的节区呢?下面使用PEView查看第一个节区头,如图14-4所示。

在这里插入图片描述

图14-4 PEView

  从VirtualSize值可以发现蛛丝马迹。第一个节区的VirtualSize值竟被设置为10000(而SizeOfRawData值为0)。这就是说,经过UPX压缩后的PE文件在运行瞬间将(文件中的)压缩的代码解压到(内存中的)第一个节区。说得更详细一点,解压缩代码与压缩的源代码都在第二个节区。文件运行时首先执行解压缩代码,把处于压缩状态的源代码解压到第一个节区。解压过程结束后即运行源文件的EP代码。
  下一章将使用调试器调试实际的解压缩过程。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值