UPX的最佳压缩方法是什么?

6
我最近尝试了不同的EXE打包工具,例如ASPack、UPX和mPress等。在试用了半打以上的打包工具后,我发现大部分打包后的EXE文件会触发错误的病毒签名警报,甚至UPX也不例外。尽管如此,我的选择仍然是UPX。请问有人可以建议我UPX中最佳的压缩/打包方法吗?
我对 UPX --lzma myEXE.eXE 感到非常满意,但还是很想听听其他人的看法。因为 UPX --ultra --brute myEXE.EXE 需要花费数小时才能完成,我并不喜欢这种方式。

1
--ultra--brute 是最好的,你已经知道了这一点,也许你应该把问题改成“--all-filters 的替代方案”或类似的东西... - Anders
1
那么为什么要提到恶意软件扫描器的误报呢?这与你的问题有关吗? - Joey
不是的。我只是提到像ASpack这样的打包工具会让一些杀毒软件产生这种想法。不确定为什么会这样。 - jimsweb
1个回答

17

我经常使用UPX,但不同版本之间的差别不大。

最新的--lzma设置可以产生非常好的结果,而--ultra --brute确实不值得花费时间。最多只能获得1%的较好压缩率……你最好对内部位图进行子采样或重构代码。

但是,尤其是在Delphi应用程序方面,我不再使用UPX。您提到了杀毒软件误报问题,这是一个很大的问题。例如,某些“廉价”的杀毒软件引入了一些简单(且错误的)启发式模式,比如“UPX + Delphi = 潜在恶意软件”或“Delphi+大小<300KB=潜在恶意软件”。

如果您试图将此类可执行文件提交给http://virustotal.com,则会发现大约有8%的杀毒引擎做出了这种错误猜测。

因此,我减少可执行文件大小的方法包括:


4
非常好的回答。实际上,我反对压缩可执行文件。说实话,现在即使需要一个20MB的可执行文件也不是问题。 - user497849
2
您还可以通过7Zip文件或LZMA压缩安装程序来交付您的EXE文件,这样可以将其大小减小到可比较的水平,而无需麻烦。 - Eric Grange
1
我认为Dorin的评论比回答更重要。首先,你要问自己:“为什么要压缩1MB的exe文件,它坐落在2TB的硬盘上,并且只会被加载到4GB的内存中?” - Marco van de Voort
2
@MarcovandeVoort 你说得对,值得一提的是,UPX会将整个可执行文件解压缩并存储在RAM中,而没有使用UPX时,它将按4KB块映射,仅在需要时加载 - 这就是你在使用“部分加载”时所指的。某些地方的UPX将使用更多的RAM,特别是在库上(普通的.dll是共享的,而经过UPX处理的.dll不会在调用它们的可执行文件之间共享)。因此,UPX绝对不是21世纪的工具。 - Arnaud Bouchez
感谢大家宝贵的评论。 - jimsweb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接