Linuxバイナリ解析を自動化するBashスクリプト「analyze_binary.sh」の解説

Linux gcc/g++

Linux環境でバイナリファイルの解析を行う際、filereadelflddなどのコマンドを個別に実行するのは手間がかかります。そこで、これらの解析作業を自動化する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 環境でのバイナリ解析を効率化する便利なスクリプトです。セキュリティ調査やデバッグ、互換性チェックなど、さまざまな場面で活用できます。バイナリ解析の作業を自動化したい方は、ぜひこのスクリプトを試してみてください。

コメント

タイトルとURLをコピーしました