Linux環境でバイナリファイルの解析を行う際、file
やreadelf
、ldd
などのコマンドを個別に実行するのは手間がかかります。そこで、これらの解析作業を自動化するBashスクリプト「analyze_binary.sh」を紹介します。このスクリプトは、指定したバイナリファイルに対して複数の解析コマンドを実行し、その結果をログファイルにまとめて出力します。
スクリプトの概要
スクリプトの内容は以下の通りです。https://gist.github.com/zinnunkebi/2d57188659e2c0abd9aff1df19094add
#!/bin/bash
# --- 引数チェック ---
if [ $# -ne 1 ]; then
echo "Usage: $0 <binary_file>" >&2
exit 1
fi
BINARY="$1"
LOGFILE="analyze_${BINARY##*/}.log"
# --- 出力開始 ---
{
echo "===== Binary Analysis Report for: $BINARY ====="
echo ""
echo ">> [file] 実行形式の基本情報"
file "$BINARY"
echo ""
echo ">> [readelf -d] 動的リンクされている共有ライブラリ"
readelf -d "$BINARY" | grep NEEDED
echo ""
echo ">> [ldd] 実行時に必要なライブラリのフルパス"
ldd "$BINARY"
echo ""
echo ">> [objdump -s -j .comment] GCCバージョン情報"
objdump -s -j .comment "$BINARY" | strings
echo ""
echo ">> [strings | grep GCC] コンパイラ埋め込み文字列(補完用)"
strings "$BINARY" | grep GCC
echo ""
echo ">> [strings | grep GLIBC_] リンク済みGLIBCバージョン"
strings "$BINARY" | grep GLIBC_ | sort | uniq
echo ""
echo ">> [nm -D] エクスポートされたシンボル(関数など)"
nm -D "$BINARY" | grep ' T '
echo ""
echo ">> [readelf -h] ELFヘッダー情報(アーキ、エントリーポイントなど)"
readelf -h "$BINARY"
echo ""
echo ">> [readelf -S] セクション情報(.text, .dataなど)"
readelf -S "$BINARY"
echo ""
} > "$LOGFILE"
echo "■ ログファイルを出力しました: $LOGFILE"
各コマンドの解説
file
バイナリファイルの基本情報を表示します。例えば、実行形式やアーキテクチャ、エンディアンなどが確認できます。
readelf -d
動的セクションの情報を表示し、NEEDED
エントリから動的リンクされている共有ライブラリを確認します。
ldd
実行時に必要な共有ライブラリとそのフルパスを表示します。依存関係の確認に便利です。
objdump -s -j .comment
.comment
セクションの内容を表示し、GCC のバージョン情報などを確認します。
strings | grep GCC
バイナリ内の文字列から “GCC” を含むものを抽出し、コンパイラの情報を補完的に確認します。
strings | grep GLIBC_
リンクされている GLIBC のバージョン情報を抽出し、互換性の確認に役立ちます。
nm -D
動的シンボルテーブルを表示し、エクスポートされている関数などのシンボルを確認します。
readelf -h
ELF ヘッダーの情報を表示し、アーキテクチャやエントリーポイントなどを確認します。
9. readelf -S
セクションヘッダーの情報を表示し、.text
や .data
などのセクション構成を確認します。
使用方法
ターミナルで以下のように実行します。
$ chmod +x analyze_binary.sh
$ ./analyze_binary.sh /path/to/binary
実行後、analyze_<バイナリファイル名>.log
というログファイルが生成され、解析結果が保存されます。
$ cat analyze_binary.log
===== Binary Analysis Report for: /path/to/binary =====
>> [file] 実行形式の基本情報
/path/to/binary: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked (uses shared libs), for GNU/Linux 2.6.18, not stripped
>> [readelf -d] 動的リンクされている共有ライブラリ
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
>> [ldd] 実行時に必要なライブラリのフルパス
linux-vdso.so.1 => (0x00007fff29dff000)
libc.so.6 => /lib64/libc.so.6 (0x00000031a8200000)
/lib64/ld-linux-x86-64.so.2 (0x00000031a7e00000)
…以下省略…
まとめ
「analyze_binary.sh」は、Linux 環境でのバイナリ解析を効率化する便利なスクリプトです。セキュリティ調査やデバッグ、互換性チェックなど、さまざまな場面で活用できます。バイナリ解析の作業を自動化したい方は、ぜひこのスクリプトを試してみてください。
コメント