本页使用了标题或全文手工转换

UPX

维基百科,自由的百科全书
跳转至: 导航搜索
UPX
the Ultimate Packer for eXecutables
初始版本 1998年5月26日
穩定版本
穩定版本
3.93 / 2017年1月29日
编程语言 C++汇编
操作系统 WindowsLinuxDOSAtari
类型 可执行文件压缩英语Executable_compression
许可协议 GPL
網站 upx.sf.net
源代码库 github.com/upx/upx

UPXthe Ultimate Packer for eXecutables)是一个免费且开源的可执行程序文件加壳器,支持许多不同操作系统下的可执行文件格式,具体的支持列表可见下文“支持格式”一节。

压缩[编辑]

UPX使用一种叫做UCL的压缩算法,这是一个对专有算法NRVNot Really Vanished)算法的一个开源部分实现。

得益于UCL的简单设计,其解压缩代码只需要额外的数百字节。UCL最大的好处是在解压缩过程中不需要额外的内存,意味着经过UPX压缩的可执行文件执行时通常也不需要为了解压缩付出额外内存。

UPX(从2.90 beta版本开始)可以在大多数平台上使用LZMA算法,但因为速度慢,在16位平台上LZMA算法默认被禁止使用。(可以使用参数--lzma强制使用)

解压缩[编辑]

UPX支持两种解压方式:就地解压或解压至临时文件夹。

就地解压方法会直接把可执行文件提取到內存。但这种方式不可能支持所有系统平台,因此在必要之时UPX会使用另一种解压方式:將压缩文件提取到临时文件夾。这种方式支持封装任何平台和格式的可执行文件,可执行文件往往先会被提取到一个位置,之后用open()打开。

然而提取到临时文件夹这种方式除了造成了额外占用之外,还有以下几个缺点:

  • 特殊权限会被忽略,如设置用户标识符。
  • argv[0](即程序中获取到的可执行文件名)将会无效。
  • 多实例应用程序将无法共享共同的程序部分(如内存内的相同代码)。

未特意以防止解包为目的修改过的UPX包通常能够被杀毒软件识别并进行解压操作。UPX也内置能够解压未修改UPX包的功能。在默认的UPX许可证中也明确禁止以防止前文所提及的解包为目的的修改。

支持的格式[编辑]

UPX目前支持为了在.NET Framework.运行而包含了 CIL代码的Windows/PE EXE 文件。

注释[编辑]

  1. ^ UPX对DOS .COM风格的文件的压缩支持可以扩展到一些其它类似的二进制文件中去。一些FreeDOSEDR-DOS内核文件已经被证实可以进行UPX压缩。
  2. ^ UPX也可以压缩不可执行的二进制文件,只要使用它们的程序或驱动能够识别它们是由UPX压缩并且能够执行在文件中包含的解压缩代码即可。已知的例子是FreeDOS使用的.CPX文件以及被UPX压缩过的.CPI字体文件。
  3. ^ 3.0 3.1 3.2 对于DOS平台,UPX支持特殊选项-8086,以强制嵌入式解压缩器与Intel 8088/8086处理器兼容,这样做之后即使在运行DOS的最早的PC上也可以执行和解压缩压缩文件。

外部链接[编辑]

  1. ^ http://www.vogons.org/viewtopic.php?t=25997
  2. ^ https://linux.die.net/man/1/upx