UPX

维基百科,自由的百科全书
跳转至: 导航搜索
UPX
the Ultimate Packer for eXecutables
初始版本 1998年5月26日
穩定版本 3.08 / 2011年12月12日
编程语言 C++, Assembly
操作系统 Windows, Linux, DOS, Atari
类型 Executable compression
许可协议 GPL
網站 upx.sf.net

UPXthe Ultimate Packer for eXecutables)是一个免费且开源的软件,支持很多种不同操作系统上的文件格式

压缩[编辑]

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

UCL被设计的足够简单使得解压缩只需要数百字节的额外代码。UCL在解压缩过程中不需要额外的内存,这最大的好处就意味着经过UPX压缩的可执行文件执行时通常也不需要额外的内存。

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

解压缩[编辑]

UPX支援兩種解壓方式——就地解壓和解壓至臨時文件夾。

就地解壓方法會直接把可執行文件提取到內存。但這種方式不可能支援所有作業系統平臺,如果這樣就會用另一種解壓方式,將壓縮文件提取到臨時文件夾。這樣涉及到額外占用和其他缺點,但他支援封裝任何可執行文件。可執行文件往往先會被提取到一個位置,之后用open()打開。

一旦获得了一个文件描述符,就可以unlink()临时文件,UPX对文件句柄使用execve()(通过 /proc)把临时文件的执行代码替换到UPX代码段中。

提取到临时文件的方法有以下几个缺点:

  • 特殊权限會被忽略,如设置用户标识符。
  • argv[0]将会变得无效。
  • 应用程序将无法共享共同的部分。

未修改的UPX包通常能够被殺毒軟件檢測和解壓。同时UPX也内置能够解压未修改UPX包的功能。默认的UPX许可证明确禁止修改,来防止使用新版本UPX手工解压/重新压缩。

支援格式[编辑]

外部鏈接[编辑]