Windows EXE / DLL:什么是“打包图像”

时间:2016-02-17 03:37:46

标签: c++ windows process

Process Explorer有时会将EXE显示为“打包图像”,但这意味着什么。

我发现:使用/ZI选项编译exe(使用Visual C ++ 2010)会产生打包图像,但/Zi不会。为何如此差异?

BTW:使用/ZI编译的DLL也被视为“打包图像”并标记为紫色。

enter image description here

3 个答案:

答案 0 :(得分:10)

A"打包图像"是一个压缩可执行代码的目的是为了使文件更小。典型的文件大小减少徘徊在50%左右。它使用" loader"在运行时将数据解压缩回可执行代码,然后再开始执行。在过去,磁盘存储容量有限,网络带宽有限,这很有用。

今天,对于TB级磁盘和兆位网络来说,这是一种气味,也可以利用打包来隐藏恶意代码。当然,Process Explorer会以不同的方式对其进行着色。

没有记录PE用于检测包装的确切启发式。当然不是,这会让它太容易规避。这不是微不足道的,没有标准的实施包装方式。粗略地说,它会查看可执行文件中的部分,并在太多看起来像非可执行代码时引发蓝旗。

是的,当你使用/ ZI时会有很多。更重要的是链接器/ INCREMENTAL选项,在您使用/ ZI时自动打开。这允许您在调试时编写代码,编辑+继续选项。并快速重新链接可执行文件,而链接器不必完全重新生成文件。这只能在可执行文件中有大量空白空间时才能工作,可用于添加新的机器代码字节。这是一面蓝旗。

当然不是真正的问题,您的用户只会看到您的程序的发布版本。这是在没有/ ZI且没有/ INCREMENTAL的情况下构建的。

答案 1 :(得分:2)

来自Process Hacker source code

  

在以下情况下打包图像:

     
      
  1. 它引用的模块少于3个,
  2.   
  3. 导入的功能少于5个,
  4.   
  5. 它不使用Native子系统。
  6.         

    或者:

         
        
    1. 功能与模块的比率低于3(平均每个模块导入的功能少于3个),
    2.   
    3. 它引用了2个以上的模块但少于6个模块。
    4.         

      或者:

           
          
      1. 功能与模块的比率低于2(平均每个模块导入的功能少于2个),
      2.   
      3. 它引用了超过5个模块但少于31个模块。
      4.         

        或者:

             
            
        1. 它没有名为“。text”的部分。
        2.         

          如果图像只有一个导入,则不认为图像被打包   一个名为“mscoree.dll”的模块。

您还可以查看soruce代码,了解如何确定图像是否已打包或是否已打包。

答案 2 :(得分:0)

打包图像(紫色)–这些进程可能包含隐藏在其中的压缩代码,或者至少Process Explorer认为它们是通过使用启发式方法来完成的。如果看到紫色进程,请确保扫描恶意软件!