
ELFバイナリパッカーは、64ビットLinux実行可能ファイル向けにコードセクションを暗号化し、実行時復号スタブを注入することで、コードインジェクションとバイナリ操作技術を実証するものです。
42の学校プロジェクトで、64ビットELF実行ファイル用のバイナリパッカーを実装します。パッカーは実行ファイルのコードセクションを暗号化し、実行時に復号ルーチンを注入します。
Woody-Woodpackerは、64ビットELFバイナリを入力として受け取り、woodyという新しい暗号化バージョンを作成するプログラムです。実行されると、woodyバイナリは以下の動作を行います。
このプロジェクトでは以下を探求します:
元のバイナリ → [Woody-Woodpacker] → 暗号化バイナリ (woody)
woody実行ファイルを作成./woody → コードを復号 → "....WOODY...."を出力 → 元のプログラムを実行
# Clone the repository
git clone https://gitlab.com/Aurh1l/woody-woodpacker.git
cd woody-woodpacker
# Compile the project
make
# The woody_woodpacker executable is now ready
./woody_woodpacker
./woody_woodpacker <binary_file>
これにより、カレントディレクトリにwoodyという新しいファイルが作成されます。
# Pack a binary
./woody_woodpacker /bin/ls
# Execute the packed binary
./woody
# Output: ....WOODY....
# [then normal ls output]
# Compare original and packed binary behavior
/bin/ls -la
./woody -la
# Both should produce the same output (after "....WOODY....")
どちらも("....WOODY...."の後に)同じ出力を生成するはずです。
パッカーは以下のELFコンポーネントを操作します:
.textセクションこのプロジェクトでは通常、以下のような単純な暗号化方式を使用します:
セグメントパディング感染 (Silvio Cesare手法):
┌─────────────────────────┐
│ ELF Header │
├─────────────────────────┤
│ Program Headers │
├─────────────────────────┤
│ Decryption Stub │ ← Injected code
├─────────────────────────┤
│ Encrypted .text │ ← Original code (encrypted)
├─────────────────────────┤
│ Other sections │
├─────────────────────────┤
│ Section Headers │
└─────────────────────────┘
このプロジェクトは42の学校カリキュラムの一部であり、教育目的のみを意図しています。
このツールは42の学校カリキュラムの一環として教育目的で作成されています。責任を持って、所有しているか変更の許可があるバイナリに対してのみ使用してください。作者は本ソフトウェアの誤用について一切の責任を負いません。