EXE ファイル形式とは?
拡張子 .exe を持つファイルには、Microsoft Windows、DOS、または(歴史的には)OS/2 用のコンパイル済みプログラムとそのリソースが含まれています。.exe ファイルには、アプリケーション、ゲーム、インストーラー、またはマルウェアを格納できます。これらはコマンドラインから、またはGUIでダブルクリックすることで起動できます。.exe ファイルはシステム依存です。データはバイナリ形式で保存され、内部のシグネチャによって実行サブタイプが決定されます。
すべての .exe は、共同設計者のMark Zbikowskiにちなんで名付けられた、オフセット0にある2バイトのマジックシグネチャ MZ (16進数 4D 5A) で始まります。現代のWindows実行ファイルは、さらに位置 0x3C に格納されたオフセットに PE\0\0 シグネチャを持ち、ファイルが Portable Executable であることを証明します。歴史的な .exe サブフォーマットには主に5つあります:
MZ- DOSネイティブの16ビット形式。NE- 16ビットWindows (1.x-3.x) および OS/2 1.x で使用された16ビットの «New Executable» 形式。純粋なDOSでは実行できませんが、32ビットWindowsの互換レイヤーやOS/2でサポートされています。LX- OS/2 2.0以降用の32ビット形式。LE- 主に2000年以前にリリースされた古いWindowsシステムのVxDドライバーに使用された16/32ビット形式。PE- «Portable Executable»。32ビット (PE32) と64ビット (PE32+) の両方のバージョンを含みます。Windows NTで導入され、今日の主要な形式です。ARMおよびARM64バリアントは、Windows on ARMデバイス用にPEを拡張したものです。
.exe ファイルには、アイコン、ダイアログ、バージョン情報、オーディオ、アプリケーションマニフェストなどのリソースを保存できます。プラットフォームに依存するため、すべての種類の .exe ファイルが特定のシステムで実行できるわけではないことに注意が必要です。別のOSで .exe を実行するには、WineやCrossOverなどの適切なエミュレーションツールが必要です。自己解凍アーカイブも .exe 拡張子を使用しており、MZ/PEスタブで始まり、内部に ZIPアーカイブ、7z、または CAB ペイロードを保持しています。
現代のWindows .exe ファイルは、通常、発行元の身元を確認するための Authenticode コード署名を保持しており、OSは ASLR、DEP/NX、Control Flow Guard などのセキュリティ機能を強制します。.dll ファイルからのインポートは、ロード時にWindows PEローダーによって解決されます。不明なソースや信頼できないソースからの .exe ファイルは、実行するとマルウェア感染のリスクがあるため、慎重に取り扱う必要があります。
セキュリティと安全性
リスク: HIGHEXEはWindowsにおけるマルウェアの最大の媒介です。ユーザーの権限であらゆるコードを実行できるため、ウイルス、トロイの木馬、ランサムウェア、«クラック/キージェン» は通常 EXE ファイルです。安全チェックリスト:公式ベンダーまたは信頼できるストアからの EXE のみを実行してください。実行前にデジタル署名を確認してください(右クリック → プロパティ → デジタル署名)。正当なソフトウェアはコード署名されており、発行元名が一致します。メール、チャット、または «無料» ダウンロードに同梱されて届く EXE には非常に注意してください。認識されない EXE に対する Windows SmartScreen やアンチウイルスの警告は真剣に受け止めるべきです。実行せずにダウンロードを検査するには、7-Zip でアーカイブとして開くか、VirusTotal でスキャンしてください。 «invoice.pdf.exe» のような二重拡張子や、ドキュメントアイコンで偽装された EXE に注意してください。
形式の詳細
概要EXE ファイルを開くプログラム
技術的詳細
詳細仕様| マジックバイト | オフセット0に MZ (4D 5A)。PEシグネチャ PE\0\0 (50 45 00 00) は、0x3CにあるMZスタブに格納されたオフセットに現れます |
| MIMEタイプ | application/vnd.microsoft.portable-executable |
| アーキテクチャサポート | x86 (32ビット), x86-64/AMD64 (64ビット), ARM, ARM64。ターゲットマシンは COFF File Header Machine フィールドでエンコードされます |
| サブフォーマットのバリアント | MZ (MS-DOS 16ビット), NE (16ビット Windows/OS/2 1.x), LX (OS/2 2.x 32ビット), LE (VxD ドライバー), PE32 (32ビット Windows), PE32+ (64ビット Windows) |
| PEセクションレイアウト | セクションには .text (実行コード), .data (初期化済みデータ), .rdata (読み取り専用データ), .rsrc (リソース), .reloc (ベース再配置) が含まれます |
| エントリポイント | PE Optional Header の AddressOfEntryPoint に格納された、最初の命令の相対仮想アドレス (RVA) |
| インポートテーブル | バイナリが必要とする DLL と、名前付きまたは序数関数エクスポートをリストします。起動時に Windows ローダーによって解決されます |
| エクスポートテーブル | 他の実行ファイルや DLL が使用するための関数やデータシンボルをオプションで公開します。主に DLL に存在しますが、稀に EXE にも存在します |
| リソースセクション (.rsrc) | アイコン、ビットマップ、ダイアログ、文字列テーブル、バージョン情報、アプリケーションマニフェストを、型/名前/言語タグ付きのツリー構造で埋め込みます |
| コード署名 | Security Directory に格納された Authenticode (PKCS#7/CMS) デジタル署名。Windows SmartScreen、UAC、およびドライバーロード時のカーネルによって検証されます |
| セキュリティ緩和策 | Optional Header の DllCharacteristics フラグにより、ASLR、DEP/NX、Control Flow Guard (CFG)、SafeSEH、および64ビットバイナリ用の High-Entropy VA が有効になります |
| PEチェックサム | Optional Header 内の4バイトの CheckSum フィールド。カーネルモードドライバーおよびシステムファイルに対して Windows ローダーによって強制されます |
| サブシステムタイプ | Windows GUI, Windows コンソール (CUI), ネイティブ (カーネルモード), EFI アプリケーション, EFI ブートサービスドライバー, EFI ランタイムドライバー |
| 自己解凍アーカイブでの使用 | SFXパッケージは PE スタブの後に ZIP, 7z, または CAB ペイロードを埋め込みます。ファイルは通常の実行ファイルとして動作し、自動的に解凍されます |
| リリース日 | 1985 (MS-DOS MZ); PE format since Windows NT 3.1, 1993 |
| 仕様書 | learn.microsoft.com |