istrings 0.2 を近いうちに出します

近いうちにバージョンアップします。変更点は

  • Linux / gcc でのコンパイル対応(wakatonoさん、umqさん、ありがとうございます)
  • UTF-16における、より正確な文字列の検出(バグfixを含む)
  • ソースの整理

の予定です。ISO-2022対応については、もう少しお待ちください。
2点目のUTF-16における云々は、昨日話題にしていた内容ですが、再度整理して解説。例えば、次のようなファイルがあったとします。

52 00 52 00 52 00 52 00 52 00

このファイルをUTF-16LE(Windows上でのUnicode)に対応したバイナリエディタで見てみると、

R R R R R

という感じに見えると思います。これは、52 00 というバイト列が、U+0052 の R と解釈されているからです。

52 00 52 00 52 00 52 00 52 00

ここで、先頭の 52 がたまたま紛れ込んだゴミであった場合、それぞれの文字は 52 00 ではなく、00 52 というバイト列すなわち U+5200 (刀) と解釈されなければいけません。

52 00 52 00 52 00 52 00 52 00  → "刀刀刀刀" という文字列

先頭1バイトを無視したことにより、これまで見えてこなかった文字列が見えてきました!フォレンジック的には、これは非常に重要なことです(きっと)。
そんなわけで次バージョンの istrings では、上のファイルを走査してみると次のような結果を得ることができます。

C:\> istrings -p -iUTF-16LE test.txt | wiconv -fUTF-16
[00000001]:刀刀刀刀
[00000000]:RRRRR

結果が検出位置順にソートされていないあたりはご愛嬌。気になるようなら、あとで sort にでも喰わせてあげてください。
このように、istrings を使うとバイナリエディタでも見えない文字を検出することができる(かも)知れません。