@port139 Blog

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

WinRARのファイル名文字コード

例外的に WinRAR アプリケーションで作成できる、RAR 形式の圧縮ファイルではファイル名を Shift_JISUNICODE(変則的なUTF-16)で保存するため、言語環境が異なっても UNICODE 側のファイル名により文字化けは発生しません。例えば日本語環境で圧縮した RAR ファイルは、英語環境では UNICODE 側のファイル名が利用されるようで(non-Unicode programの設定に依存せず)文字化けしません。
変則的な UTF-16 と書いているのは、CP 932 のファイル名は 16進数的にはそのままのバイト列で保存されているのに対して、UNICODE のファイル名はバイト列がそのままではない状態で保存されていることから、UNICODE(UTF-16LE)でキーワード検索してもヒットしません。

例えば「これは日本語ですQA.ppt」というファイル名は、WinRAR 3.90 で作成した RAR ファイル内では、Unicode 側ファイル名として以下のバイト列として保存されるようです。(00 30 56 の全体が関連しているか不明)

00 30 56 53 8C 6F E5 65 A5 2C 67 9E 8A 67 59 00 51 41 2E 70 00 70 74 

CPCONV を使い同じ文字列を UTF-16LE に変換すると以下のバイト列になります。

53 30 8C 30 6F 30 E5 65 2C 67 9E 8A 67 30 59 30 51 00 41 00 2E 00 70 00 70 00 74 00

なんとなく見比べるとわかりますが、例えば UTF-16LE で 53 30 8C 30 6F 30 の部分は、30 が共通していることから、RAR では 30 56 の後に 53 8C 6F だけが記録されています。エンコーディングの規則を理解していませんが、バイト列としては UTF-16LE にあるバイトが RAR のバイト列でも確認することが可能です。ただし、同じ日本語ファイル名でも英語版 Windows 環境で RAR ファイルを作成するとバイト列が若干異なる状況もある?様子で、英語版 Windows と WinRAR で同じファイル名「これは日本語ですQA.ppt」が以下のバイト列になります。(終端位置が不明なので余分なのも含まれていると思います)

00 30 56 53 8C 6F E5 65 A5 2C 67 9E 8A 67 59 C0 04 10 21 0D 11 4C D9 D1 

ちなみに日本語版環境下では、CP932 でファイル名が入る箇所は、????????QA.ppt という文字列で保存されています。(non-Unicode programの設定は英語のまま)
RARファイル自体のフォーマットが不明なのですが、ファイル名のエンコード規則がどこかで解説されていたりするものでしょうかね?

EnCase 6.14.3 以降では RAR ファイルのマウントに対応していますが、UNICODE?なファイル名を利用しているので、マウントなどではこの辺りで文字化けとかは発生しませんが、キーワード検索を考えると悩めますね。