文字列検出ツール `istrings` の使い方

文字列検出ツール "istrings"
の使い方
2005年7月9日
はせがわようすけ
[email protected]
Forensicでの文字列検出
 dd で取得したディスクのイメージ
 ページファイル(メモリの残片)
 電子メールの残骸
:
文字列の検出には strings コマンドを使う。
ファイル内で連続するASCII文字を表示する。
stringsコマンド
ファイルに含まれる文字列を検出するツール。
00
1E
6F
20
01
00
74
20
02
00
00
20
03
00
FA
20
04
0B
1E
20
05
00
00
20
06
00
00
20
07
00
00
20
08-09
4E 6F
13 00
20 20
4文字以上のASCII
文字の連続を検出
0A
72
00
20
0B
6D
00
20
0C
61
20
20
0D
6C
20
20
0E
2E
20
00
0F 0123456789ABCDEF
64 ........Normal.d
20 ot..........
00
C:\>strings 文書1.doc
bjbj
:
0 2 3
o0[0L0
Normal.dot
Microsoft Word 9.0
:
stringsコマンドの限界
 ASCIIにしか対応していない
 日本語の検出ができない
 一部のstringsではUnicode可だが、こ
れもASCII文字の範囲のみ。
日本語対応の
stringsが
欲しいよぅ。
jstrings 開発
日本語対応の strings
 jstrings
Shift_JIS、EUC-JP、ISO-2022-JP に対応
した strings コマンド
文字コードに関連した部分を全てハード
コーディングしているため拡張性がない
Unicodeに
ちゃんと対応し
て
欲しいよぅ。
istrings 開発
文字コードの基本
文字集合
文字をたくさん集めたもの
符号化文字集合
集めた文字に番号を順に振ったもの
エンコーディング
メモリやディスク上での文字の表現方法
日本語対応の strings
 istrings
日本語以外にも多くの文字コードに対応し
た strings コマンド
 エンコーディングの基本部分のみハード
コーディング
 文字集合は外部ファイルで定義
 拡張性が高い
 あとから文字コードの追加が可能
基本的な使い方
C:\>istrings -n 5 -iUTF-16 Book1.xls
5文字以上の文字列を検出
UTF-16の文字列を検出
-nオプション: 文字列とみなす文字数を指定
-iオプション: 文字コードを指定
設定ファイル
指定されたエンコーディングに関する情報を取
得するため、起動時に設定ファイルを読み込む。
C:\>istrings
2
設定ファイル
4
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
:
マッピングファイル
指定されたエンコーディングにおいて有効な
文字の範囲を定義したファイル
bytecount=1
09
20-7e
1文字のバイト数
文字として有効な値
その他のオプション
-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の検出
マッピングファイルを用意
することにより、base64の
残骸を検出できる。
bytecount=1
2B
・・・ +
2F
・・・ /
30-39 ・・・ 0-9
3D
・・・ =
41-5a ・・・ A-Z
61-7a ・・・ 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