@port139 Blog

基本的にはデジタル・フォレンジックの技術について取り扱っていますが、記載内容には高確率で誤りが含まれる可能性があります。

バイナリから文字列を抽出する

バイナリから指定した文字列を取り出す方法としては、古典的な手法として strings コマンドがあります。主に ASCII で利用されますが、The Sleuth Kit などでは英数字の UNICODE について取り出すことも出来るはずです。他にも Unicode に対応した Strings コマンドは幾つかあると思いますが、日本語を取り出すというのはなかなか厄介です。The Sleuth Kit は strings で取りだした文字列に grep かける検索方法なので、日本語などは思いっきり落ちてしまうはずですが、実は最近になって良くなったりしているんでしょうかね?
バイナリファイルから日本語文字列を取り出すという用途では、やはり istrings などの日本語に対応しているツールを利用する必要があります。日本語に対応した strings コマンドとしては、私の知る範囲では、はせがわさん作の istrings と、もとのぶ先生作の jstrings の二つがあります。

istrings 0.2
http://openmya.hacker.jp/hasegawa/
http://www.st.ryukoku.ac.jp/~kjm/security/ml-archive/port139/2003.05/msg00175.html
http://d.hatena.ne.jp/hasegawayosuke/20050715/1121408744

jstrings (Japanese 'strings' command)
http://www.monyo.com/technical/products/jstrings/

FNG15 には開催を招集した、はせがわさんも参加されていたので懐かしいという話題になりましたが、kjm先生のところにある port139ml のログによると 7年度ほど前、2003年頃の話題みたいですね。まぁ作者もすっかり動かし方を忘れていたくらいですし(笑)
昔からあるフォレンジック調査における課題といえば課題ですね。そしていまだ完全には解決していない(笑)
7年経過して新たに登場したツールが、KaniGrep ということになるんですが、これは istrings と違い単体で動作するコマンドではなく EnCase のスクリプトとして実装されています。
※近いうちに更新されると思いますが、現時点では v0.9 が公開されています。

http://www.ji2.co.jp/forensics/tools/index.html

KaniGrep は正規表現パターンを使い、平仮名3文字、片仮名3文字などの日本語文字列パターンを探し出すというもので、文字コードも複数を同時に検索してきます。ただし、日本語文字列を包括的に探すというものではありません。機能としては漢字を含むものを探すこともできますので、istrings と同様に広い範囲の日本語文字列を探させることも可能なはずです。しかし、範囲を広げるとノイズとなるヒットが増えるので、個人的には漢字を含む範囲を検索させるのはあまりお奨めできない気がしていますが。なお、istrings でもマップファイルを編集すれば範囲を絞ることが可能です。