ELFバイナリファイルシグネチャ — マジックバイト

ELF(Executable and Linkable Format)マジックバイト 7F 45 4C 46 を理解します。hexでLinux実行可能ファイル、共有ライブラリ、オブジェクトファイルを識別する方法を学びます。

File Signatures

Hex

7F 45 4C 46

ASCII

.ELF

詳細な説明

ELF(Executable and Linkable Format)ファイルシグネチャは、4バイトシーケンス7F 45 4C 46です。これはDEL文字(0x7F)に続いてASCII文字"ELF"が来ます。Linux、BSD、Solaris、その他多くのUnix系オペレーティングシステムにおける実行可能ファイル、共有ライブラリ、オブジェクトファイル、コアダンプの標準バイナリ形式です。

バイトごとの内訳:

オフセット Hex 意味
0 7F DEL文字(非印字)— ファイルがテキストスクリプトとして誤って実行されるのを防ぐ
1 45 ASCII 'E'
2 4C ASCII 'L'
3 46 ASCII 'F'

マジックバイト後のELFヘッダーフィールド:

シグネチャに続くバイトには、バイナリに関する重要な情報が含まれます:

オフセット サイズ フィールド 一般的な値
4 1バイト クラス 01 = 32ビット、02 = 64ビット
5 1バイト エンディアン 01 = リトルエンディアン、02 = ビッグエンディアン
6 1バイト ELFバージョン 01 = 現行
7 1バイト OS/ABI 00 = System V、03 = Linux、09 = FreeBSD
8-15 8バイト パディング 通常すべてゼロ
16-17 2バイト オブジェクトタイプ 02 00 = 実行可能、03 00 = 共有オブジェクト
18-19 2バイト マシン 3E 00 = x86-64、B7 00 = AArch64

典型的なLinux実行可能ファイルヘッダーの読み取り:

標準的な64ビットx86_64 Linux実行可能ファイルは以下で始まります:

7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00
02 00 3E 00 01 00 00 00

これは次を示します: ELFマジック、64ビット、リトルエンディアン、バージョン1、System V ABI、実行可能タイプ、x86-64アーキテクチャ。

ELFファイルの種類:

オフセット16のタイプフィールドは、調べているELFファイルの種類を明らかにします:

  • 01 00 — リロケータブルオブジェクトファイル(.o)— リンク前のコンパイラ出力
  • 02 00 — 実行可能ファイル — 直接実行可能なプログラム
  • 03 00 — 共有オブジェクト(.so)— 動的ライブラリ
  • 04 00 — コアダンプ — プロセスがクラッシュした際に生成

セキュリティにおける重要性:

ペネトレーションテストやマルウェア分析において、ELFバイナリの識別は重要な最初のステップです。攻撃者が非標準の拡張子(例: .txt、.jpg)で偽装したELFバイナリをアップロードする可能性があります。マジックバイトをチェックすると真のファイルタイプが即座に判明します。

ELF対他の実行可能形式:

  • WindowsはPE形式を使用(マジック: 4D 5A — "MZ")
  • macOSはMach-O形式を使用(マジック: FE ED FA CE または CF FA ED FE
  • JavaはクラスファイルA使用(マジック: CA FE BA BE

これらのシグネチャを知ることで、未知のバイナリのターゲットプラットフォームを素早く識別できます。

ユースケース

ELFシグネチャ分析は、マルウェア検出、バイナリリバースエンジニアリング、CI/CDパイプラインでのファイルタイプ検証、Linuxシステム侵害のフォレンジック分析に使用されます。

試してみる — Hex Editor

フルツールを開く