跳至內容

UPX

本頁使用了標題或全文手工轉換
維基百科,自由的百科全書
UPX
the Ultimate Packer for eXecutables
首次發布1998年5月26日,​26年前​(1998-05-26
當前版本3.96(2020年1月23日,​4年前​(2020-01-23
源代碼庫 編輯維基數據鏈接
編程語言C++匯編
操作系統WindowsLinuxDOSAtari TOSmacOS
類型可執行文件壓縮
許可協議GPL
網站upx.github.io

UPX(英語:the Ultimate Packer for eXecutables)是一個自由開源的可執行程序文件加殼器,支持許多不同操作系統下的可執行文件格式。

壓縮

UPX使用一種叫做UCL的壓縮演算法,為NRV(Not Really Vanished)演算法的一個開源部分實做。

得益於UCL的簡單設計,其解壓縮程式碼只需要額外的數百位元組。UCL最大的好處是在解壓縮過程中不需要額外的記憶體,意味着經過UPX壓縮的可執行文件執行時通常也不需要為了解壓縮付出額外記憶體。

UPX(從2.90 beta版本開始)可以在大多數平台上使用LZMA演算法,但因為速度慢,在16位元平台上LZMA演算法預設被停止使用。(可以使用參數--lzma強制使用)。

從版本3.91開始,UPX在Windows平台上還支持64位(x64)可執行文件。此功能目前宣布為實驗性。

解壓縮

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. ^ 存档副本. [2018-01-30]. (原始內容存檔於2022-01-11). 
  2. ^ 存档副本. [2018-01-30]. (原始內容存檔於2018-10-05). 

外部連結