“压缩图像”是指将可执行代码进行压缩,以达到减小文件大小的目的。典型的文件大小减小幅度约为50%。它使用“加载器”在运行时将数据解压回可执行代码,然后开始执行。在存储容量有限和网络带宽有限的旧时代非常有用。
如今,随着拥有千兆字节磁盘和兆比特网络,这种方法已经过时了,压缩还可能被利用来隐藏恶意代码。这也是Process Explorer将其标记为不同颜色的原因。
PE用于检测打包的确切启发式算法未经记录。当然没有,否则绕过它就太容易了。这并不简单,没有标准的打包实现方法。大致上看一下可执行文件中的部分内容,当太多部分看起来像非可执行代码时,则会引发蓝色警报。
当你使用/ZI时,确实会有很多问题。更重要的是链接器的/INCREMENTAL选项,在使用/ZI时自动打开。这允许您在调试时编写代码,使用编辑+继续选项快速重新链接可执行文件,而无需完全重新生成文件。这只有在可执行文件中有大量空白空间可用于添加新的机器代码字节时才能起作用。这是一个蓝色警报。
当然,并不是真正关心的问题,您的用户只会看到程序的发布版本。这是没有使用/ZI和/INCREMENTAL编译的版本。
图像被打包如果:
- 它引用少于3个模块,并且
- 它导入少于5个函数,并且
- 它不使用本地子系统。
或者:
- 功能到模块比率低于3(平均每个模块导入的函数少于3个),并且
- 它引用超过2个但少于6个模块。
或者:
- 功能到模块比率低于2(平均每个模块导入的函数少于2个),并且
- 它引用超过5个但少于31个模块。
或者:
- 它没有名为“.text”的部分。
如果只有一个来自名为“mscoree.dll”的模块的导入,则不认为该图像被打包。
您还可以查看源代码,以确定图像是否可能已打包或未打包。
/Z
选项生成的字节可能会干扰Process Explorer的分析器。 - Remy Lebeau