概要
バイナリファイルは、コンピュータが直接実行する0と1のコードで構成されており、一般的なテキストエディタで開くと文字化けして見えます。`strings`コマンドは、これらのバイナリファイル内で4つ以上の連続した印刷可能な文字(printable character)を見つけ出し、テキスト形式で抽出します。これにより、バイナリファイルに含まれるエラーメッセージ、ファイルパス、URL、設定値など、有用な情報を把握することができます。
主な特徴
stringsコマンドの主な特徴は以下の通りです。
- バイナリファイルから人間が読める文字列を抽出します。
- デフォルトで4つ以上の連続した印刷可能文字を検索します。
- 様々な文字エンコーディング(ASCII、UTF-16など)をサポートします。
- プログラムが使用するライブラリ名や設定情報を把握する際に役立ちます。
stringsの活用分野
stringsは単にファイルを確認するだけでなく、様々な分野で活用できます。
- マルウェア分析: マルウェアバイナリからC&Cサーバーアドレス、ファイル名、API呼び出しなどの情報を抽出します。
- デバッグ: 実行ファイル内に含まれるエラーメッセージやデバッグ文字列を見つけ出し、問題を解決します。
- 未知のファイル分析: ファイルの拡張子が不明な場合、stringsで内部テキストを確認し、ファイルの性質を推定します。
主要オプション
stringsコマンドの主要オプションを目的別にグループ化しました。
1) 抽出オプション
2) ヘルプ
生成されたコマンド:
コマンドを組み合わせてみてください。
説明:
`strings` コマンドを実行します。
これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。
使用例
stringsコマンドの様々な使用例を通して機能を習得してください。
バイナリファイルから基本文字列を抽出
strings /usr/bin/top
`/usr/bin/top`バイナリファイルから、デフォルト設定(4文字以上)の文字列を抽出します。
より長い文字列のみを抽出
strings -n 8 /usr/bin/top
`-n`オプションを使用して、8文字以上の文字列のみを抽出します。
文字列と16進数オフセットを一緒に出力
strings -t x /usr/bin/top
`-t x`オプションで、各文字列がファイル内で開始する16進数オフセットを一緒に出力します。バイナリ分析時に役立ちます。
パイプ(|)と組み合わせて使用
strings /usr/bin/top | grep error
`/usr/bin/top`ファイルから`error`を含む文字列のみを抽出して確認します。
UTF-16エンコーディング文字列の抽出
strings -e l /path/to/binary
`-e`オプションを使用してUTF-16エンコーディング文字列を抽出します。`l`はlittle-endian、`b`はbig-endianを意味します。
インストール
stringsは`binutils`パッケージの一部であり、ほとんどのLinuxディストリビューションにデフォルトで含まれています。別途インストールする必要はありません。
Debian/Ubuntu
sudo apt update
sudo apt install -y binutils
RHEL/CentOS/Fedora
sudo dnf install -y binutils
ヒント&注意事項
stringsコマンド使用時の注意点をまとめました。
ヒント
- `strings`はバイナリファイルで`cat`を実行するよりもはるかにクリーンで有用な情報を提供します。`cat`はバイナリファイルの内容をそのまま出力するため、ターミナルが破損する可能性があります。
- 抽出された文字列には改行や空白が含まれる場合があるため、`grep`、`awk`などとパイプで接続してさらに加工すると、より有用に活用できます。