UPX

UPX
初回リリース1998年5月26日 (1998年5月26日
安定版リリース
5.0.2 / 2025年7月20日 (2025年7月20日
リポジトリ
書かれたC++アセンブリ
オペレーティング·システムMicrosoft WindowsLinuxmacOSDOSAtari TOS
プラットフォームi386MIPSAMD64ARMPowerPCm68k
入手可能な英語
タイプ実行可能ファイルの圧縮
ライセンス圧縮された実行ファイルを除くGPL [ 1 ] 、バイナリ配布における圧縮アルゴリズムについては独自のもの[ 2 ]
Webサイトupx .github .io

UPXUltimate Packer for eXecutables)は、さまざまなオペレーティングシステムのさまざまなファイル形式をサポートする無料のオープンソース実行可能パッカーです。 [ 3 ] [ 4 ]

圧縮

UPXはUCLと呼ばれるデータ圧縮アルゴリズムを使用します。 [ 5 ]これは、独自のNRV(Not Really Vanished[ 6 ]アルゴリズムの一部をオープンソースで実装したものです。[ 2 ]

UCLは、わずか数百バイトのコードで解凍プログラムを実装できるほどシンプルに設計されています。UCLでは解凍用に追加のメモリを割り当てる必要がないため、UPXで圧縮された実行ファイルは通常、追加メモリを必要としません。

UPX (2.90 ベータ版以降) はほとんどのプラットフォームでLZMAを使用できます。ただし、古いコンピュータでは解凍速度が遅いため、16 ビットではデフォルトで無効になっています (--lzma強制的に有効にするには を使用します)。

バージョン3.91以降、UPXはWindowsプラットフォーム上の64ビット(x64) PEファイルもサポートしています。[ 7 ]この機能は現在実験的なものとされています。

減圧

UPX は、インプレース手法と一時ファイルへの抽出という 2 つの解凍メカニズムをサポートしています。

実行ファイルをメモリ上に解凍するインプレース方式は、サポートされているすべてのプラットフォームで実行できるわけではありません。この方式の利点は、メモリ効率が高く、OSによって設定された環境が適切に維持されることです。

残りの方法は、一時ファイルへの展開を使用します。この手順には追加のオーバーヘッドやその他の欠点がありますが、あらゆる実行ファイル形式を圧縮できます。一時ファイルへの展開方法には、いくつかの欠点があります。

  • suidなどの特殊な権限は無視されます。
  • argv[0]意味がなくなります。
  • 実行可能ファイルの複数の実行インスタンスは、共通のセグメントを共有できません。

改変されていないUPXファイルは、ウイルス対策ソフトウェアのスキャナによって検出・解凍されることがよくあります。UPXには、自身でパックされた改変されていない実行ファイルを解凍する機能も組み込まれています。

サポートされている形式

UPXは以下のフォーマットをサポートしています: [ 8 ]

UPX は現在、.NET Framework上で実行するためのCILコードを含むPEファイルをサポートしていません

注記

  1. ^ a b c DOS ターゲットの場合、UPX は、組み込みの解凍プログラムを 8088/8086 プロセッサと互換性を持たせるための特別なオプションをサポートしておりこれ-8086により、DOSを実行する初期の PC でも圧縮ファイルを実行して解凍できるようになります。
  2. ^ DOS .COM形式のファイルを圧縮する機能は、他のバイナリ実行ファイルの圧縮にも利用できます。FreeDOSおよびEDR-DOSカーネルファイルの中には、この方法でUPX圧縮可能なものがあることが知られています。
  3. ^ DOS .COM 形式のファイルを圧縮する機能は、非実行バイナリデータファイルの圧縮にも利用できます。ただし、これらのファイルを使用するドライバ/アプリケーションが UPX 圧縮ファイルを検出し、ファイルに埋め込まれた解凍プログラムにジャンプするように拡張されている場合に限ります。FreeDOS、この機能を .CPX ファイル、つまり UPX 圧縮された .CPI フォントファイルに適用することが知られています。

参考文献

  1. ^ 「UPXライセンス契約」。2016年3月12日時点のオリジナルよりアーカイブ2016年9月14日閲覧。
  2. ^ a b “The UPX Hacker's Guide” . GitHub . 2022年2月19日. 2022年5月14日時点のオリジナルよりアーカイブ。 2016年9月14日閲覧
  3. ^ Marak, Victor (2015). Windows マルウェア分析の基礎. Packt Publishing. p. 188. ISBN 978-1-78528-151-8. 2022年5月14日にオリジナルからアーカイブ。 2015年11月22日閲覧。Ultimate Packer for Executables(UPX)などのパッカーは、サイズの縮小が主な目的であり、難読化が副産物となる可能性もあるため、実行ファイル圧縮ツールに近いと言えます。
  4. ^ Blunden, Bill (2013). The Rootkit Arsenal (Second ed.). Jones & Bartlett Learning. pp.  353– 355. ISBN 978-1-4496-2636-5. 2022年5月14日時点のオリジナルからアーカイブ。 2015年11月22日閲覧最も広く使用されている実行ファイルパッカーの一つがUPX(実行ファイル用Ultimate Packer)です。UPXは数十種類の異なる実行ファイル形式に対応しているだけでなく、ソースコードもオンラインで公開されています。
  5. ^ Markus Oberhumer. 「UCLデータ圧縮ライブラリ」 . oberhumer.com . 2024年6月28日時点のオリジナルよりアーカイブ2022年1月11日閲覧。
  6. ^ Markus Oberhumer. 「NRV圧縮ライブラリ」 . 2012年9月9日時点のオリジナルよりアーカイブ
  7. ^ 「UPX News」2018年1月4日時点のオリジナルよりアーカイブ2016年9月14日閲覧。
  8. ^upx(1)  – ManKier.com のLinux一般コマンドマニュアル
  9. ^ 「dos extender rtm32 - スタブのファイル形式? \ VOGONS」2022年1月11日時点のオリジナルよりアーカイブ。 2022年1月11日閲覧