Process Explorer有时会将EXE显示为“打包图像”,但这意味着什么。
我发现:使用/ZI
选项编译exe(使用Visual C ++ 2010)会产生打包图像,但/Zi
不会。为何如此差异?
/ZI
编译的DLL也被视为“打包图像”并标记为紫色。
答案 0 :(得分:10)
A"打包图像"是一个压缩可执行代码的目的是为了使文件更小。典型的文件大小减少徘徊在50%左右。它使用" loader"在运行时将数据解压缩回可执行代码,然后再开始执行。在过去,磁盘存储容量有限,网络带宽有限,这很有用。
今天,对于TB级磁盘和兆位网络来说,这是一种气味,也可以利用打包来隐藏恶意代码。当然,Process Explorer会以不同的方式对其进行着色。
没有记录PE用于检测包装的确切启发式。当然不是,这会让它太容易规避。这不是微不足道的,没有标准的实施包装方式。粗略地说,它会查看可执行文件中的部分,并在太多看起来像非可执行代码时引发蓝旗。
是的,当你使用/ ZI时会有很多。更重要的是链接器/ INCREMENTAL选项,在您使用/ ZI时自动打开。这允许您在调试时编写代码,编辑+继续选项。并快速重新链接可执行文件,而链接器不必完全重新生成文件。这只能在可执行文件中有大量空白空间时才能工作,可用于添加新的机器代码字节。这是一面蓝旗。
当然不是真正的问题,您的用户只会看到您的程序的发布版本。这是在没有/ ZI且没有/ INCREMENTAL的情况下构建的。
答案 1 :(得分:2)
在以下情况下打包图像:
- 它引用的模块少于3个,
- 导入的功能少于5个,
- 它不使用Native子系统。
醇>或者:
- 功能与模块的比率低于3(平均每个模块导入的功能少于3个),
- 它引用了2个以上的模块但少于6个模块。
醇>或者:
- 功能与模块的比率低于2(平均每个模块导入的功能少于2个),
- 它引用了超过5个模块但少于31个模块。
醇>或者:
- 它没有名为“。text”的部分。
醇>如果图像只有一个导入,则不认为图像被打包 一个名为“mscoree.dll”的模块。
您还可以查看soruce代码,了解如何确定图像是否已打包或是否已打包。
答案 2 :(得分:0)
打包图像(紫色)–这些进程可能包含隐藏在其中的压缩代码,或者至少Process Explorer认为它们是通过使用启发式方法来完成的。如果看到紫色进程,请确保扫描恶意软件!