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

Posted 大灬白

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《逆向工程核心原理》读书笔记——第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代码。
  下一章将使用调试器调试实际的解压缩过程。

以上是关于《逆向工程核心原理》读书笔记——第14章 运行时压缩的主要内容,如果未能解决你的问题,请参考以下文章

《逆向工程核心原理》读书笔记——第8章 Visual Basic编写的exe程序特征

《逆向工程核心原理》读书笔记——第4章 IA-32寄存器基本讲解

《逆向工程核心原理》读书笔记——第7章 栈帧

《逆向工程核心原理》读书笔记——第13章 PE文件格式

《逆向工程核心原理》读书笔记——第10章 函数调用约定

《逆向工程核心原理》读书笔记——第5章 栈