文字列検出ツール "istrings" の使い方 2005年7月9日 はせがわようすけ hasegawa openmya.hacker.jp @
Forensicでの文字列検出 dd で取得したディスクのイメージ ページファイル(メモリの残片) 電子メールの残骸 : : 文字列の検出には strings コマンドを使う。 ファイル内で連続するASCII文字を表示する。
stringsコマンド 4文字以上のASCII 文字の連続を検出 ファイルに含まれる文字列を検出するツール。 00 01 02 03 04 05 06 07 08-09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF 1E 00 00 00 0B 00 00 00 4E 6F 72 6D 61 6C 2E 64 ........Normal.d 6F 74 00 FA 1E 00 00 00 13 00 00 00 20 20 20 20 ot.......... 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 00 C:\>strings 文書1.doc bjbj : 0 2 3 o0[0L0 Normal.dot Microsoft Word 9.0 4文字以上のASCII 文字の連続を検出
stringsコマンドの限界 jstrings 開発 ASCIIにしか対応していない 日本語の検出ができない 一部のstringsではUnicode可だが、これもASCII文字の範囲のみ。 日本語対応のstringsが 欲しいよぅ。 jstrings 開発
日本語対応の strings istrings 開発 jstrings Shift_JIS、EUC-JP、ISO-2022-JP に対応 文字コードに関連した部分を全てハードコーディングしているため拡張性がない Unicodeに ちゃんと対応して 欲しいよぅ。 istrings 開発
文字コードの基本 文字集合 文字をたくさん集めたもの 符号化文字集合 集めた文字に番号を順に振ったもの エンコーディング メモリやディスク上での文字の表現方法
日本語対応の strings istrings 日本語以外にも多くの文字コードに対応した strings コマンド エンコーディングの基本部分のみハードコーディング 文字集合は外部ファイルで定義 拡張性が高い あとから文字コードの追加が可能
基本的な使い方 5文字以上の文字列を検出 UTF-16の文字列を検出 -nオプション: 文字列とみなす文字数を指定 C:\>istrings -n 5 -iUTF-16 Book1.xls 5文字以上の文字列を検出 UTF-16の文字列を検出 -nオプション: 文字列とみなす文字数を指定 -iオプション: 文字コードを指定
2 4 3 4 設定ファイル 指定されたエンコーディングに関する情報を取得するため、起動時に設定ファイルを読み込む。 設定ファイル C:\>istrings 2 3 4 設定ファイル マッピングファイル
設定ファイルの場所 以下の順に設定ファイルを探し、最初に見つかったものを読み込む。 -e オプションにより指定されたファイル 環境変数 ISTRINGS_INI により指定されたファイル コンパイル時に決定され、EXEファイルに埋め込まれたファイル
設定ファイルの内容 設定ファイルは、エンコーディングごとに以下のようなセクションを構成している。 エンコーディング名 [Shift_JIS] alias=CP932 alias=Windows-31J system=DBCS mapfile0=C:\map\CP932-1.map mapfile1=C:\map\CP932-2.map : [エンコーディング名] 別名 エンコーディング種別 マッピングファイル
設定ファイルの内容 エンコーディング名、別名は - i オプションで指定される名称 C:\>istrings -iUS-ASCII file.xls C:\>istrings -iASCII file.xls [US-ASCII] alias=ASCII system=DBCS mapfile0=ascii.map :
設定ファイルの内容 エンコーディングの種別は、以下のいずれか DBCS 一般的な1バイトまたは2バイトの文字コード Shift_JIS、ASCII、ISO-8859-* など UTF-8 UTF-16LE UTF-16BE [UTF-16LE] alias=UTF-16 system=UTF-16LE mapfile0=unicode.map :
マッピングファイル 指定されたエンコーディングにおいて有効な文字の範囲を定義したファイル 1文字のバイト数 bytecount=1 09 文字として有効な値
その他のオプション -f : ファイル名を表示する -p : 文字列の見つかった場所を表示する -c : 文字コードを表示する -t : テキストモードで出力する C:\>istrings -f -p -c -t file.dat file.dat[0000004d](ASCII): This is a pen. file.dat[000000bf](ASCII): Delicias Wine. file.dat[000001d0](ASCII): Flesh tomato file.dat[000001f7](ASCII): PPT :
出力 結果は、コマンドラインで指定された文字コードで出力される。 iconv や wiconv のような文字コードコンバータを用いると便利 C:\>istrings -t -iUTF-16 file.dat | wiconv -fUTF-16 -t932 | more
応用 - base64の検出 bytecount=1 2B マッピングファイルを用意することにより、base64の残骸を検出できる。 2F 30-39 3D 41-5a 61-7a マッピングファイルを用意することにより、base64の残骸を検出できる。 ・・・ + ・・・ / ・・・ 0-9 ・・・ = ・・・ A-Z ・・・ a-z C:\>istrings -t -ibase64 file.eml : filename= attached grGC6oLNIGJhc2U2NCCCxYNHg5ODUoFbg2iCs4LqgumDdI gsggb3Blbm15YSBNTCCC5oLrgrWCrYLLgUINCg0KaHR0cD eXdvcmQvb3Blbm15YU1MDQoNCg==
課題 ISO-2022系のエンコーディングに対応できていない ISO-2022-JP、EUC-JP には jstrings が必要 UnicodeはBMP内の文字にしか対応していない コードが汚い、未整理
Q&A ご質問をどうぞ!! @ http://openmya.hacker.jp/hasegawa/ hasegawa openmya.hacker.jp @