
Elfina は、x86 および x86-64 バイナリをサポートするマルチアーキテクチャ ELF ローダーです。
このプロジェクトは v2.0.0 以降 Rust で実装されています。
最近、私は Windows 上でのリバースエンジニアリングと PE ファイル形式について学習しています。
その後、Linux のリバースエンジニアリングとルートキット開発についてさらに学ぶために、ELF バイナリの調査を始めました。
ELF 実行ファイルがどのようにロードされ実行されるかをより深く理解するために、Linux カーネルと ELF ファイル形式に焦点を当てた学習プロジェクトとして Elfina を開発しました。
このプロジェクトが役立つ、または参考になると感じた場合は、⭐ をいただけると嬉しいです!
このプロジェクトは教育および研究目的のみを意図しています。
以下の理解を助けるために設計されています:
--mmap ロード--memfd 実行--info: ELF のメタデータと構造を表示--hexdump: ELF ファイルの16進数表現を表示します。--hexdump-out: --hexdump の結果を特定のファイルに保存します。--entropy: エントロピーを計算し、パックまたは圧縮されたセクションを特定するのに役立てます。--entropy-out: --entropy の結果を特定のファイルに保存します。--disasm: ELF バイナリを逆アセンブルします。--disasm-out: --disasm の結果を特定のファイルに保存します。sudo apt install gcc-multilib
リリースパッケージをダウンロードして展開:
wget https://github.com/iss4cf0ng/Elfina/releases/latest/download/elfina-linux.tar.gz
tar -xzf elfina-linux.tar.gz
cd elfina
chmod +x ./elfina
chmod +x ./elfina32
レイアウトは次のようになります:
elfina/
├ elfina
└ elfina32
// ---------- elfina (x64) ----------
./elfina --coffee
./elfina --info <x64_elf_path>
./elfina --mmap <x64_elf_path> [arguments]
./elfina --memfd <x64_elf_path> [arguments]
./elfina --hexdump <x64_elf_path>
./elfina --hexdump-out <x64_elf_path>
./elfina --entropy <x64_elf_path>
./elfina --entropy-out <output_file> <x64_elf_path>
./elfina --disasm <x64_elf_path>
./elfina --disasm-out <output_file> <x64_elf_path>
// ---------- elfina32 (x86) ----------
./elfina32 --coffee
./elfina32 --info <x86_elf_path>
./elfina32 --mmap <x86_elf_path> [arguments]
./elfina32 --memfd <x86_elf_path> [arguments]
./elfina32 --hexdump <x86_elf_path>
./elfina32 --hexdump-out <x86_elf_path>
./elfina32 --entropy <x86_elf_path>
./elfina32 --entropy-out <output_file> <x86_elf_path>
./elfina32 --disasm <x86_elf_path>
./elfina32 --disasm-out <output_file> <x86_elf_path>
リポジトリをクローンしてプロジェクトをコンパイル:
git clone https://github.com/iss4cf0ng/Elfina
cd Elfina/C
make
または
chmod +x build.sh
./build.sh
git clone https://github.com/iss4cf0ng/Elfina
cd Elfina/Rust
chmod +x build.sh
./build.sh
Windows Subsystem for Linux (WSL2) では、Elfina は32ビット ELF バイナリファイルを実行できません。プロービング (--info) と64ビット実行は問題なく動作します。完全な32ビットサポートには、ネイティブの Linux 環境や VirtualBox、VMWare などの VM を使用してください。
--hexdump
--entropy
--disasm
| アーキテクチャ | ビット幅 | 一般的なデバイス |
|---|
| x86 (i386) | 32-bit | 古いPC、32ビットLinux |
| x86-64 | 64-bit | 現代のPC、サーバー |
| ARM32 | 32-bit | Raspberry Pi 2、古いAndroid |
| AArch64 (ARM64) | 64-bit | Raspberry Pi 3/4/5、最新のAndroid |
| RISC-V 64 | 64-bit | SiFive ボード、VisionFive、新興のLinuxデバイス |