実行可能ファイルの圧縮とは、実行可能ファイルを圧縮し、圧縮データと解凍コードを 1 つの実行可能ファイルに結合する手段です。この圧縮された実行可能ファイルを実行すると、解凍コードは実行前に圧縮コードから元のコードを再作成します。ほとんどの場合、これは透過的に行われるため、圧縮された実行可能ファイルは元のファイルとまったく同じように使用できます。実行可能ファイル圧縮プログラムは、実行可能パッカー、ランタイム パッカー、ソフトウェア パッカー、ソフトウェア プロテクター、または「ポリモーフィック パッカー」や「難読化ツール」と呼ばれることもあります。
圧縮された実行ファイルは、自己解凍アーカイブと見なすことができます。圧縮された実行ファイルは、関連する解凍コードとともに実行ファイル内にパッケージ化されています。一部の圧縮された実行ファイルは、直接実行せずに解凍して元のプログラム ファイルを再構築できます。これを行うために使用できる 2 つのプログラムは、CUP386 と UNP です。[引用が必要]
圧縮された実行可能ファイルのほとんどは、元のコードをメモリ内で解凍し、実行するために若干多くのメモリを必要とします (解凍コード、圧縮データ、および解凍されたコードを格納する必要があるため)。さらに、一部の圧縮された実行可能ファイルには、解凍された実行可能ファイルを実行する前にファイル システムに書き込むなどの追加要件があります。
実行ファイルの圧縮はバイナリ実行ファイルに限定されず、JavaScriptなどのスクリプトにも適用できます。ほとんどのスクリプト言語は、冗長性が高い人間が読めるコードで動作するように設計されているため、圧縮は非常に効果的で、変数や関数を識別するために使用される長い名前を短いバージョンに置き換えたり、空白を削除したりするのと同じくらい簡単です。
利点と欠点
ソフトウェア配布者は、さまざまな理由で実行可能ファイルの圧縮を使用しますが、主な理由は、ソフトウェアの二次ストレージ要件を削減することです。実行可能ファイルの圧縮プログラムは、実行可能コードを圧縮するように特別に設計されているため、 gzip、zip、bzip2 [要出典]などの標準的なデータ圧縮機能よりも優れた圧縮率を実現することがよくあります。これにより、ソフトウェア配布者は、選択した配布メディア ( CD-ROM、DVD-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 )用の既知の実行可能圧縮プログラム:
- Realia Spacemaker(1982年以降、 Robert BK Dewar作、SM.COM、署名「MEMORY$」)[2] [3] [4] [5] [6] [7] [8] [9]
- Microsoft EXEPACK (1985年以降、Reuben Borman によって作成、EXEPACK.EXE、LINK.EXE /E[XEPACK]、署名 "RB") [9] [5] [4] [10]
- LZEXE(1989年以降、 Fabrice Bellard著、LZEXE.EXE)[11] [12]
- PKWare PKLite(1990年以降、Phil Katzによって作成、PKLITE.EXE)[12] [13]
- DIET(1991年以降、テディ・マツモト著、DIET.EXE)[12]
- TINYPROG (TINYPROG.EXE)
- RJS ソフトウェア RJCRUSH (1994 年以降、Roland Skinner によって作成、RJCRUSH.EXE)
- XPA (1995 年以降、JauMing Tseng によって作成、XPA.EXE)
- Ibsen ソフトウェア aPACK (1997 年以降、Jørgen Ibsen によって作成、APACK.EXE)
- UPX (1998 年以降、Markus FXJ Oberhumer と László Molnár によって作成)
- 32LiTE (1998 年以降、Oleg Prokhorov によって作成、32LITE.EXE)
- ナレッジダイナミクスLZWコンプレッサー[14]
- WWpack (1994 年以降、Piotr Warezak と Rafal Wierzbicki によって作成、WWPACK.EXE)
- 624 (25 KB 未満の .COM ファイルのみ、LZW を使用)
- アイネックス
- Avパック
- コムパック
- HASP 封筒
- LGZ
- PMWLITE
- プロパック
- ユーシーエックス
- WDOSX
- XE
- XPack
OS/2 実行ファイル
OS/2で既知の実行可能圧縮プログラム:
- ネライト
- LxLite
新しい実行ファイル
新しい実行可能ファイル用の既知の実行可能ファイル圧縮プログラム:
- パックウィン
- PKWare PKLite (バージョン 2.01 以降)
- ウィンライト
ポータブル実行ファイル
Portable Executables用の既知の実行可能圧縮プログラム:
注: 紫色のクライアントは現在開発されていません。
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上の実行可能ファイル用の既知の実行可能圧縮プログラム:
- プクランチ[23]
- エクソマイザー[24]
- バイトブーザー[25]
アミーガ
Amigaシリーズの実行可能ファイル用の既知の実行可能圧縮プログラム:
- パワーパッカー[26]
- タイタニックのクランチャー[26]
- インプローダー[26]
- TNMクランチャー
- シュリンクラー[27]
- パックファイア[28]
ジャワ
Java用の既知の実行可能圧縮プログラム:
JARファイル:
- HASP 封筒
- パック200
- プロガード
WARファイル:
- HASP 封筒
JavaScript
JavaScriptスクリプトに適用できる圧縮には 2 種類あります。
- スクリプト内の冗長性を減らします (コメント、空白を削除し、変数名と関数名を短くします)。これによってスクリプトの動作が変わることはありません。
- 元のスクリプトを圧縮し、解凍コードと圧縮データを含む新しいスクリプトを作成します。これは、バイナリ実行可能ファイルの圧縮に似ています。
自己減圧コンプレッサー
これらは元のスクリプトを圧縮し、解凍機能と圧縮データを含む新しいスクリプトを出力します。
- 翻訳
- パッキング
冗長性を削減するコンプレッサー
これらは空白を削除し、コメントを削除し、変数名と関数名を短縮しますが、スクリプトの動作は変更しません。
- パッカー
- YUIコンプレッサー
- シュリンクセーフ
- JSMin
参照
参考文献
- ^ Gielen, Pierre; Taylor, Johnathan (1997) [1993]. Logan, Wolverine (ed.). 「PMarc ヘルプ マニュアル」。 2019-04-22 にオリジナルからアーカイブ。 2019-02-22に取得。
[…] PMEXE.CPM […] はモジュールです […] PMARC と組み合わせて […] 実行可能な圧縮 COM ファイルを作成するために使用されます (LZEXE や PKLITE と同様) […] タイプ: PMARC <アーカイブ>.COM=PMEXE2.CPM <ファイル名> [オプション] アーカイブ名は .COM […] でなければなりません (.PMA ではありません)。出力ファイルの拡張子は .CPM になります。これはMSX-DOS COM ファイルです […] ファイル名を変更して […] 実行します […]
- ^ 「ケネス・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, Inc. が販売。RBK
Dewar
(1982–1983)、8088 アセンブリ言語、8,000 行 […]
- ^ Realia, Inc. (1983年1月). 「DOSを使用する場合、このプログラムが必要です」. PC Magazine (広告). 2 (9). Ziff-Davis Publishing : 417. 2019年4月22日時点のオリジナルよりアーカイブ。 2019年4月22日閲覧。
- ^ ab 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 プログラムを作成しました (ただし、言うまでもなく、この特定の […]
- ^ ab Paul, Matthias R. (2002-10-07) [2000]. 「Re: masm .com (PSP) 関連のトラブル」.ニュースグループ: alt.lang.asm. 2017-09-03 時点のオリジナルよりアーカイブ。2017-09-03取得。}
- ^ Necasek, Michal (2018-04-30). 「Realia SpaceMaker」. OS/2 Museum . 2019-01-27時点のオリジナルよりアーカイブ。2019-02-22に閲覧。
- ^ Parsons, Jeff (2019-01-10). 「初期の Norton Utilities の最新情報」PCjs . 2019-01-29 時点のオリジナルよりアーカイブ。2019-02-22に取得。
- ^ Necasek, Michal (2019-01-12). 「Yep, Norton Did It」. OS/2 Museum . 2019-04-22時点のオリジナルよりアーカイブ。 2019-04-22に閲覧。
- ^ ab Necasek, Michal (2018-03-23). 「EXEPACK と A20-Gate」。OS/2 ミュージアム。2018-11-13 時点のオリジナルよりアーカイブ。2019-04-20に取得。
- ^ Miles, Ya'akov; Nather, Ed (1986-05-17) [1986-02-05, 1986-02-09]. 「文書化されていない Microsoft LINK オプション: /E」。INFO-IBMPC メーリング リスト。 2018-05-01 にオリジナルからアーカイブ。2019-04-26に取得。 [Miles:]
Microsoft
LINK.EXEへの文書化されていない […] スイッチが存在します [
…]。これにより、バインド中に自動圧縮が行われます。このプロセスにより、リンカーによって生成された .EXE ファイルから初期化されていない配列のストレージが削除されます […] この機能を使用するには、コマンド ラインに /E オプションを指定します […] [Nather:] このオプションは、MS Link バージョン 3.00 および 3.01 には存在しません [Miles:] LINK バージョン 3.02 と /E オプションから生成された (パックされた) ファイルのサイズと、手動でパックされた .EXE ファイルのサイズを […] EXEPACK で比較した結果、LINK バージョン 3.02 の /E オプションでは、LINK によって出力された通常の .EXE ファイルに対して手動で EXEPACK を実行した場合とまったく同じサイズのファイルが生成されるという結論に達しました […]
- ^ Bellard, Fabrice (2003-02-09). 「LZEXEホームページ」. bellard.org . 2019年3月24日時点のオリジナルよりアーカイブ。2019年3月18日閲覧。
- ^ abc Salomon, David (2000) [1998]. 「第 3.22 章: EXE コンプレッサー」.データ圧縮: 完全リファレンス(第 2 版)。Springer -Verlag . p. 212. doi :10.1007/978-3-642-86092-8. ISBN 978-3-540-78086-1. S2CID 35889155. 2022年4月7日にオリジナルからアーカイブ。2019年4月26日閲覧。
- ^ Paul, Matthias R. (2002-04-11). "Re: [fd-dev] ANNOUNCE: CuteMouse 2.0 alpha 1". freedos-dev . 2020-02-21 にオリジナルからアーカイブ。 2020-02-21に取得。 […] > .SYS+.COM や .SYS+.EXE のような組み合わせをパックできるパッカーはありません。 […] .COM や .EXE 用のパッカーと .SYS 用のパッカーがありますが、私も
1 つで両方を
サポートするパッカーを見たことはありません
。 […]
プログラム/TSR とデバイス ドライバーを
.EXE ファイルに結合する可能性 […] プログラム/TSR.COM とデバイス ドライバーを .COM プログラムに結合する可能性 […] 圧縮済みのファイルに、別の自作スタブを追加することも可能です […] すべての圧縮された
DR-DOS
デバイス ドライバーは、同様の手法を使用して、通常の PKLITE .COM 解凍プログラムが .SYS ファイルで動作できるようにします (一方、PKLITE は .SYS ファイル自体に対しても同様の機能をサポートしています)。 […]
(注: PKLITE 1.50 (1995) 以降では、デバイス ドライバーを圧縮する機能が追加されましたが、COM+SYS ドライバーを結合する機能は追加されていません。)
- ^ 「Google Code アーカイブ - Google Code プロジェクト ホスティング用の長期ストレージ」。2021 年 12 月 3 日時点のオリジナルよりアーカイブ。2022 年 4 月 7 日閲覧。
- ^ 「DotBundle - 評価版をダウンロード」。2013年8月21日時点のオリジナルよりアーカイブ。2013年5月6日閲覧。
- ^ ab 「ソフトウェア保護、ソフトウェアライセンス、ソフトウェア仮想化」。2018年3月13日時点のオリジナルよりアーカイブ。2018年3月12日閲覧。
- ^ ab “WebtoolMaster Software News”. 2020年7月20日時点のオリジナルよりアーカイブ。2012年1月15日閲覧。
- ^ 「アーカイブコピー」www.xtreeme.prv.pl。2004年5月25日時点のオリジナルよりアーカイブ。2022年1月15日閲覧。
{{cite web}}: CS1 maint: archived copy as title (link) - ^ 「ダウンロード | Obsidium Software Protection System」。2019年2月7日時点のオリジナルよりアーカイブ。2017年4月18日閲覧。
- ^ “624”.
- ^ DotProtect http://site.yvansoftware.be/dotpacker1_0 2011年1月22日アーカイブ、Wayback Machine
- ^ Kiene, Steve; Mark, Dave (1999). 「A Chat With Steve Kiene」. MacTech . 第15巻、第4号。2017年12月10日時点のオリジナルよりアーカイブ。 2017年12月10日閲覧。
- ^ 「ロスレスデータ圧縮プログラム: ハイブリッド LZ77 RLE」www.cs.tut.fi。2014 年 7 月 30 日時点のオリジナルよりアーカイブ。2022 年 1 月 15 日閲覧。
- ^ web.comhem.se/~u13114991/exo/
- ^ “ByteBoozer (PC)”. 2022年8月15日時点のオリジナルよりアーカイブ。2022年4月7日閲覧。
- ^ abc 「ダウンロードするCrunchers」。
- ^ “Askeksa/Shrinkler”. GitHub . 2021-09-25. 2022-04-07時点のオリジナルよりアーカイブ。 2022-04-07に取得。
- ^ “PackFire v1.2k by Neural”. 2024年6月30日時点のオリジナルよりアーカイブ。2022年4月7日閲覧。
