実行可能ファイルの圧縮

実行ファイル圧縮とは、実行ファイルを圧縮し、圧縮データと解凍コードを1つの実行ファイルにまとめる手法です。この圧縮された実行ファイルを実行すると、解凍コードが圧縮コードから元のコードを再生成してから実行します。ほとんどの場合、この処理は透過的に行われるため、圧縮された実行ファイルは元のファイルと全く同じように使用できます。実行ファイル圧縮ツールは、実行可能パッカーランタイムパッカーソフトウェアパッカーソフトウェアプロテクター、あるいは「ポリモーフィックパッカー」や「難読化ツール」と呼ばれることもあります。

圧縮された実行ファイルは自己解凍型アーカイブとみなすことができます。自己解凍型アーカイブでは、圧縮された実行ファイルが、関連する解凍コードとともに実行ファイルにパッケージ化されています。一部の圧縮された実行ファイルは、直接実行することなく解凍することで元のプログラムファイルを再構築できます。これを行うには、CUP386とUNPという2つのプログラムを使用します。

圧縮された実行ファイルのほとんどは、元のコードをメモリ上で解凍するため、実行には多少多くのメモリを必要とします(解凍コード、圧縮データ、そして解凍されたコードを格納する必要があるためです)。さらに、一部の圧縮された実行ファイルには、解凍された実行ファイルを実行前にファイルシステムに書き込むなど、追加の要件があります。

実行ファイルの圧縮はバイナリ実行ファイルに限らず、JavaScriptなどのスクリプトにも適用できます。ほとんどのスクリプト言語は、冗長性が高い人間が読めるコードで動作するように設計されているため、圧縮は非常に効果的で、変数関数を識別するために使用される長い名前を短い名前に置き換えたり、空白を削除したりするのと同じくらい簡単です。

メリットとデメリット

ソフトウェア配布者は、様々な理由で実行ファイルの圧縮を使用しますが、主な理由は、ソフトウェアに必要な二次記憶装置の容量を削減することです。実行ファイル圧縮ツールは実行ファイルの圧縮に特化して設計されているため、 gzipzipbzip2といった標準的なデータ圧縮機能よりも高い圧縮率を実現できる場合が多くあります。これにより、ソフトウェア配布者は、選択した配布メディア( CD-ROMDVD-ROM 、フロッピーディスクなど)の制約内で配布を行うことができ、また、インターネット経由で配布されるソフトウェアへのアクセスに必要な時間と帯域幅を削減できます。

実行ファイルの圧縮は、独自の圧縮手法や追加の暗号化によって、リバースエンジニアリングを阻止したり、実行ファイルの内容を難読化(例えば、ウイルス対策スキャナからマルウェアの存在を隠す)したりするためにも頻繁に使用されます。実行ファイルの圧縮は、直接的な逆アセンブリを防止したり、文字列リテラルをマスクしたり、署名を変更したりするために使用できます。これによりリバースエンジニアリングの可能性が排除されるわけではありませんが、プロセスのコストが高くなる可能性があります。

圧縮された実行ファイルはファイルシステム内で必要なストレージ容量が少なくなるため、ファイルシステムからメモリへのデータ転送時間も短縮されます。一方で、実行開始前にデータの解凍に多少の時間がかかります。しかし、様々なストレージメディアの速度は平均的なプロセッサ速度に追いついておらず、ストレージがボトルネックとなることがよくあります。そのため、圧縮された実行ファイルは、ほとんどの一般的なシステムで読み込みが速くなります。最近のデスクトップコンピューターでは、実行ファイルが異常に大きい場合を除き、読み込み速度はほとんど目立たないため、読み込み速度は実行ファイルを圧縮するかどうかの主な判断基準にはなりません。

実行可能イメージをディスクからオンデマンドでページングするオペレーティングシステムでは、圧縮された実行ファイルはこの処理の効率を低下させます。解凍スタブは解凍されたデータを保持するためのメモリブロックを割り当てます。このメモリブロックは、実行ファイルがロードされている限り、使用されるかどうかに関係なく割り当てられ続けるため、他のアプリケーションとメモリリソースを常に競合します。オペレーティングシステムがスワップファイルを使用する場合、未使用のデータブロックを単に破棄し、必要に応じて実行ファイルから再ロードするのではなく、解凍されたデータをスワップファイルに書き込むことでメモリを解放する必要があります。これは通常は目立ちませんが、実行ファイルが同時に複数回ロードされる場合には問題となります。オペレーティングシステムは既にロードしたデータブロックを再利用できず、データは新しいメモリブロックに解凍する必要があり、使用されない場合は個別にスワップアウトされます。追加のストレージと時間が必要になるため、通常同時に複数回実行される実行ファイルを圧縮するかどうかは慎重に検討する必要があります。

もう 1 つの欠点は、静的にリンクされた抽出スタブのみが見える ため、一部のユーティリティがランタイム ライブラリの依存関係を識別できなくなることです。

また、一部の古いウイルススキャナーは、解凍スタブが圧縮された実行ファイルといくつかの特性を共有しているため、圧縮された実行ファイルすべてを単純にウイルスとして報告します。最新のウイルススキャナーのほとんどは、複数の異なる実行ファイル圧縮レイヤーを解凍して、内部の実行ファイル自体をチェックできますが、一部の一般的なアンチウイルスおよびアンチマルウェアスキャナーは、圧縮された実行ファイルに対して誤検知の警告を出すという問題を抱えています。ランタイムパッカーによって難読化されたマルウェアの問題を解決するため、IEEE Industry Connections Security Groupソフトウェアタグガントシステムを導入しました。

実行ファイルの圧縮は、コンピューターの記憶容量が低速で容量の少ないフロッピーディスクと小さなハードドライブに限られていた時代には、より一般的でした。これにより、コンピューターは同じ容量でより多くのソフトウェアを保存でき、ユーザーがソフトウェアを使用するたびにアーカイブファイルを手動で解凍する手間が省けました。しかし、コンピューターの記憶容量の増加により、実行ファイルの圧縮はあまり一般的ではなくなりました。これは、デモが64k introなどのサイズ制限内に収める必要があるデモシーンで使用されています。読み込み時間は長くなりますが、非常に高度な圧縮形式によってのみ、実行ファイルをこれらのコンテストに参加できるほど小さく抑えることができます。

実行可能パッカーのリスト

CP/MおよびMSX-DOS実行ファイル

CP/M-80 / MSX-DOS .COM ファイル用の既知の実行可能圧縮プログラム:

  • PMexe(1990年以降、三野義彦著、PMARC.COM+PMEXE.CPM、署名 "-pms-")[ 1 ]
  • PopCom!(1992年~、著者:美濃喜彦、POPCOM.COM、署名「-pc1-」)

MS-DOS実行ファイル

MS-DOS互換実行可能ファイル ( .COMまたは.EXE )用の既知の実行可能圧縮プログラム:

OS/2 実行ファイル

OS/2で既知の実行可能圧縮プログラム:

  • ネライト
  • LxLite

新しい実行ファイル

新しい実行可能ファイル用の既知の実行可能ファイル圧縮プログラム:

  • パックウィン
  • PKWare PKLite (バージョン 2.01 以降)
  • ウィンライト

ポータブル実行ファイル

ポータブル実行可能ファイル用の既知の実行可能圧縮プログラム:

注: 紫色のクライアントは現在開発されていません。

名前 最新の安定版 ソフトウェアライセンスx86-64サポート
32ライト
エイリアンゼ 1.4(2020年8月17日)  ( 2020-08-17 )独自のいいえ
ANDpakk2
アルマジロ 9.62 (2013年6月7日)  (2013年6月7日独自のはい
ASPack 2.40(2018年12月7日)  ( 2018-12-07 )独自のはい
ASPR(ASプロテクト) 2.78(2018年12月7日)  ( 2018-12-07 )独自のはい
BeRoEXEパッカー
BIN暗号化ツール
BoxedApp パッカー 3.3(2015年7月26日)  (2015年7月26日独自のはい
CExe 1.0b (2001年7月20日)  (2001年7月20日GPLいいえ
クリンクラー 2.3(2020年7月22日)  ( 2020-07-22 )ズリブはい
ドットバンドル 1.3(2013年4月4日)[ 15 ] (2013-04-04)独自のはい
エニグマプロテクター 6.60(2019年8月21日)[ 16 ] (2019-08-21)独自のはい
エニグマバーチャルボックス 9.40(2019年10月10日)[ 16 ] (2019-10-10)独自のはい
exe32パック
EXEバンドル 3.11(2011年1月7日)[ 17 ] (2011-01-07)独自の?
EXECryptor
EXEステルス 4.14(2011年6月29日)[ 17 ] (2011-06-29)独自の?
エクスプレス 1.8.0.1(2010年1月14日)  (2010-01-14)独自の?
FSG 2.0(2004年5月24日)[ 18 ] (2004-05-24)フリーウェアいいえ
kkrunchy src 0.23a4 (不明) パブリックドメインいいえ
ミュー 1.1 (不明) フリーウェアいいえ
プレス 2.19(2012年1月2日)  (2012-01-02)フリーウェアはい
ムクランチャー
ネオライト
Nsパック
オブシディウム 1.6(2017年4月11日)[ 19 ] (2017-04-11)独自のはい
PEコンパクト
PEPack
PESpin 1.33(2011年5月3日)  (2011-05-03)フリーウェアはい
小柄な 2.4(2016年9月22日)  (2016-09-22)フリーウェアいいえ
PKLite32
RLPack ベーシック 1.21(2008年10月31日)  (2008-10-31)GPLいいえ
シュリンカー32
スマートパッカープロX 2.0.0.1 (2019年6月3日)  (2019-06-03)独自のはい
Themida/Winライセンス 3.2.5.0(2025年11月17日)  (2025-11-17)独自のはい
ユーパック
UPX5.0.1(2025年5月6日)  (2025-05-06)GPLはい
VM保護 3.4(2019年8月3日)  (2019-08-03)独自のはい
WWPack32 1.20(2000年6月19日)  (2000-06-19)いいえ
XComp/XPack 0.98 (2007年2月18日)  (2007-02-18)フリーウェアいいえ
ヨーダの墓所
YZパック

ELFファイル

ELFファイル 用の既知の実行可能圧縮プログラム:

CLIアセンブリファイル

CLI アセンブリファイル 用の既知の実行可能圧縮プログラム:

  • .NETZ
  • Nsパック
  • Mプレス
  • HASP封筒
  • ドットバンドル
  • エクセパック.NET
  • DotProtect: [ 21 ] .netおよびmono用の商用プロテクター/パッカー。オンライン検証と「業界標準の暗号化」機能を備えています。

Mac OS クラシックアプリケーション

Mac OS Classicアプリケーション用の実行可能圧縮ファイル:

  • アプリケーションVISE [ 22 ]
  • StuffItインストーラメーカー

Mach-O (Apple Mac OS X) ファイル

Mach-O (Apple Mac OS X) ファイル 用の既知の実行可能圧縮プログラム:

  • HASP封筒
  • UPX
  • VM保護

コモドール64とVIC-20

Commodore 64およびVIC-20上の実行可能ファイル用の既知の実行可能圧縮プログラム:

アミーガ

Amigaシリーズの実行可能ファイル用の既知の実行可能圧縮プログラム:

  • パワーパッカー[ 26 ]
  • タイタニック号のクランチャー[ 26 ]
  • インプローダー[ 26 ]
  • TNMクランチャー
  • シュリンクラー[ 27 ]
  • パックファイア[ 28 ]

ジャワ

Java用の既知の実行可能圧縮プログラム:

JARファイル:

WARファイル:

  • HASP封筒

JavaScript

JavaScriptスクリプト に適用できる圧縮には 2 種類あります。

  • スクリプト内の冗長性を減らします(コメントや空白を削除し、変数名や関数名を短くします)。これによりスクリプトの動作は変更されません。
  • 元のスクリプトを圧縮し、解凍コードと圧縮データを含む新しいスクリプトを作成します。これはバイナリ実行ファイルの圧縮に似ています。

自己減圧コンプレッサー

これらは元のスクリプトを圧縮し、解凍機能と圧縮されたデータを含む新しいスクリプトを出力します。

  • JsSfx
  • パッキング

冗長性を削減するコンプレッサー

これらは空白を削除し、コメントを削除し、変数名と関数名を短縮しますが、スクリプトの動作は変更しません。

参照

参考文献

  1. ^ Gielen, Pierre; Taylor, Johnathan (1997) [1993]. Logan, Wolverine (ed.). "PMarc ヘルプマニュアル" .オリジナルから2019年4月22日にアーカイブ。 2019年2月22日閲覧[…] PMEXE.CPM […] はモジュールです […] PMARC と組み合わせて使用​​し […] 実行可能な圧縮 COM ファイルを作成するために使用されます (LZEXE や PKLITE と同様) […] type: PMARC <アーカイブ>.COM=PMEXE2.CPM <ファイル名> [オプション] アーカイブ名は .COM である必要があります […] .PMA ではありません。出力ファイルの拡張子は .CPM になります。これはMSX-DOS COM ファイルです […] ファイル名を変更して […] 実行してください […]
  2. ^「ケネス・D・クルーズの報告書に対するロバート・B・K・デュワーの専門家報告書」。ケンブリッジ大学出版局他対パットン他、提出書類124、ケンブリッジ大学出版局、オックスフォード大学出版局、セージ・パブリケーションズ社による補足的初期開示 - ケンブリッジ大学出版局、オックスフォード大学出版局、セージ・パブリケーションズ社対ジョージア州立大学学長マーク・P・ベッカー他、民事訴訟番号1:08-CV-1425-ODE(裁判所文書)。ジョージア州北部地区連邦地方裁判所アトランタ支部。18ページ。別紙A。2018年5月1日時点のオリジナルからアーカイブ。 2019年4月23日閲覧[…] SPACEMAKERとTERMULATORは、IBM PC用の市販ソフトウェア(PC DOSファイル圧縮ユーティリティとVT-100エミュレータ)で、Realia社が販売していました。RBK Dewar(1982~1983年)、8088アセンブリ言語、8,000行 […]
  3. ^ Realia, Inc. (1983年1月). 「DOSをお使いの場合は、このプログラムが必要です」 . PC Magazine (広告). 2 (9). Ziff-Davis Publishing : 417. 2019年4月22日時点のオリジナルよりアーカイブ。 2019年4月22日閲覧
  4. ^ a b Dewar, Robert Berriedale Keith (1984-03-13). "DOS 3.1 ASMB (Another Silly Microsoft Bug)" . info-ibmpc@USC-ISIB.ARPA .オリジナルから2018-05-01にアーカイブ。2019-04-23に取得。 [ …] リンカーの /E オプションは、非圧縮 EXE ファイルと論理的に同等の EXE ファイルを生成するはずです。現在のバージョンでは[…]、AX が上書きされてしまいます。EXE ファイルへのエントリ時の AX には明確な意味(パラメータのドライブの有効性を示す)があるため、非圧縮イメージにそのまま渡されるはずです。このインターフェース規則の非常に明白な違反が1つあるため、他にも違反がある可能性がありますが、これ以上の調査はしていません[…] 私は、EXEPACK オプションと同様の機能を持つ Realia SpaceMaker プログラムを作成しました(ただし、言うまでもなく、この特定の[…] は存在しません)。
  5. ^ a b Paul, Matthias R. (2002-10-07) [2000]. 「Re: masm .com (PSP) 関連のトラブル」 .ニュースグループalt.lang.asm . 2017年9月3日時点のオリジナルよりアーカイブ。 2017年9月3日閲覧
  6. ^ Necasek, Michal (2018年4月30日). 「Realia SpaceMaker」 . OS/2 Museum . 2019年1月27日時点のオリジナルよりアーカイブ。 2019年2月22日閲覧
  7. ^ Parsons, Jeff (2019年1月10日). 「初期のNorton Utilitiesの最新情報」 . PCjs . 2019年1月29日時点のオリジナルよりアーカイブ。 2019年2月22日閲覧
  8. ^ Necasek, Michal (2019年1月12日). 「Yep, Norton Did It」 . OS/2 Museum . 2019年4月22日時点のオリジナルよりアーカイブ2019年4月22日閲覧。
  9. ^ a b Necasek, Michal (2018-03-23). 「EXEPACKとA20-Gate」 . OS/2 Museum . 2018年11月13日時点のオリジナルよりアーカイブ2019年4月20日閲覧。
  10. ^ Miles, Ya'akov; Nather, Ed (1986-05-17) [1986-02-05, 1986-02-09]. 「未文書化のMicrosoft LINKオプション: /E」 . INFO-IBM​​PCメーリングリスト. 2018-05-01にオリジナルからアーカイブ. 2019-04-26に取得. [Miles:] Microsoft LINK.EXEには未文書化の[…]スイッチ[…]があり、これによりバインディング時に自動圧縮が実行されます。このプロセスにより、リンカーによって生成された .EXE ファイルから初期化されていない配列のストレージが削除されます […] この機能を使用するには、コマンド ラインに /E オプションを指定します […] [Nather:] このオプションは、MS Link バージョン 3.00 および 3.01 には存在しません [Miles:] LINK バージョン 3.02 と /E オプションから生成された (パックされた) ファイルのサイズと、手動で EXEPACK を使用してパックした .EXE ファイルのサイズを比較した結果、LINK バージョン 3.02 の /E オプションで生成されるファイルは、LINK によって出力される通常の .EXE ファイルに対して手動で EXEPACK を実行する場合とまったく同じサイズであるという結論に達しました […]
  11. ^ Bellard, Fabrice (2003-02-09). 「LZEXEホームページ」 . bellard.org . 2019年3月24日時点のオリジナルよりアーカイブ。 2019年3月18日閲覧
  12. ^ a b cサロモン、デイビッド (2000) [1998]. 「第3.22章 EXEコンプレッサー」 .データ圧縮:完全リファレンス(第2版).シュプリンガー・フェアラーク. p. 212. doi : 10.1007/978-3-642-86092-8 . ISBN 978-3-540-78086-1. S2CID  35889155 . 2022年4月7日時点のオリジナルよりアーカイブ2019年4月26日閲覧。
  13. ^ Paul, Matthias R. (2002-04-11). "Re: [fd-dev] ANNOUNCE: CuteMouse 2.0 alpha 1" . freedos-dev . 2020年2月21日時点のオリジナルからのアーカイブ。 2020年2月21日閲覧。 […] > .SYS+.COM や .SYS+.EXE のような組み合わせをパックできるパッカーは1つもありません。[…] .COM や .EXE 用のパッカーと .SYS 用のパッカーはありますが、両方を1つでサポートするパッカーは見たことがありません。 […]プログラム/TSR とデバイス ドライバーを.EXE ファイルに結合する可能性 […] プログラム/TSR.COM とデバイス ドライバーを .COM プログラムに結合する可能性 […] また、圧縮後に、別の自作スタブをファイルに追加することも可能です […] すべての圧縮DR-DOSデバイス ドライバーは、同様の手法を使用して、通常の PKLITE .COM 解凍プログラムを .SYS ファイルで動作させます (一方、PKLITE 自体も .SYS ファイルに対して同様の機能をサポートしています)。 […](注: PKLITE 1.50 (1995) 以降では、デバイス ドライバーを圧縮する機能が追加されましたが、COM+SYS ドライバーを結合する機能は追加されていません。)
  14. ^ 「Google Code アーカイブ - Google Code プロジェクトホスティング用の長期ストレージ」2021年12月3日時点のオリジナルよりアーカイブ2022年4月7日閲覧。
  15. ^ 「DotBundle - 評価版をダウンロード」 。 2013年8月21日時点のオリジナルよりアーカイブ2013年5月6日閲覧。
  16. ^ a b「ソフトウェア保護、ソフトウェアライセンス、ソフトウェア仮想化」2018年3月13日時点のオリジナルよりアーカイブ。 2018年3月12日閲覧
  17. ^ a b「WebtoolMaster Software News」2020年7月20日時点のオリジナルよりアーカイブ2012年1月15日閲覧。
  18. ^ 「アーカイブコピー」 www.xtreeme.prv.pl . 2004年5月25日時点のオリジナルよりアーカイブ2022年1月15日閲覧。{{cite web}}: CS1 maint: archived copy as title (link)
  19. ^ 「ダウンロード | Obsidium Software Protection System」2019年2月7日時点のオリジナルよりアーカイブ2017年4月18日閲覧。
  20. ^ "624" .
  21. ^ DotProtect http://site.yvansoftware.be/dotpacker1_0 2011年1月22日アーカイブ、Wayback Machine
  22. ^ Kiene, Steve; Mark, Dave (1999). "A Chat With Steve Kiene" . MacTech . 第15巻第4号. 2017年12月10日時点のオリジナルよりアーカイブ。 2017年12月10日閲覧
  23. ^ 「ロスレスデータ圧縮プログラム:ハイブリッドLZ77 RLE」www.cs.tut.fi . 2014年7月30日時点のオリジナルよりアーカイブ2022年1月15日閲覧。
  24. ^ web.comhem.se/~u13114991/exo/
  25. ^ “ByteBoozer (PC)” . 2022年8月15日時点のオリジナルよりアーカイブ2022年4月7日閲覧。
  26. ^ a b c「ダウンロードするCrunchers」
  27. ^ “Askeksa/Shrinkler” . GitHub . 2021年9月25日. 2022年4月7日時点のオリジナルよりアーカイブ2022年4月7日閲覧。
  28. ^ “PackFire v1.2k by Neural” . 2024年6月30日時点のオリジナルよりアーカイブ2022年4月7日閲覧。
  29. ^ Nizamettin GokとNitin Khanna著。 「JavaとJavaScriptを使ったハイブリッドAndroidアプリの構築」。出版社:O'Reilly Media。2013年。32ページ。引用:「YUI Compressorは…最も人気のあるJavaScript圧縮ツールの一つです。」
  30. ^ a b c Nicholas C. Zakas 「Web開発者のためのプロフェッショナルJavaScript」 2011年、p. 768-769。引用:「Crunchers:JavaScriptビルドプロセスの重要な部分... JSMin ... Dojo ShrinkSafe ...そして... YUIコンプレッサー...」