ByteScope

RAR5 ファイル形式

RAR 5.0 形式の RAR アーカイブ。

MIME タイプ
application/x-rar-compressed
拡張子
.rar
カテゴリ
アーカイブ・圧縮

マジックナンバー(ファイル署名)

0x00000000526172211A070100Rar!····'Rar!' RAR5 signature

RAR5 形式について

RAR 5.0 は現行の WinRAR 独自形式で、リカバリレコードと強力な暗号化を備えています。8 バイトの署名が 01 00 で終わる点で、古い 4.x のレイアウトと見分けられます。署名から先は型付きブロックの連なりで、ブロック内のほぼすべてのフィールドは可変長整数(1 バイトあたり 7 ビットがデータ、最上位ビットが継続フラグ)です。つまりオフセット 12 より後ろには固定位置のフィールドが一つもありません。小さなアーカイブを小さいまま保つための設計ですが、その代わりバイト単位で読む側は目的の位置へ飛べず、先頭からデコードしながら進むしかありません。

ヘッダーの構造(バイト単位)

オフセット長さフィールド意味
08RAR 5.0 signature52 61 72 21 1A 07 01 00 — 'Rar!' の 4 文字に 1A 07 01 00 が続きます。1A は DOS の EOF 文字なので、端末にアーカイブを cat してもそこで止まり、バイナリが垂れ流しになりません。
84Header CRC-32仕様上は「header size フィールドから始まり、任意の extra area の末尾までを含むヘッダデータの CRC32」と定義されています。つまりブロック全体ではなく、この CRC 自身より後ろだけを対象にしています。
121-10Header size (variable-length integer)最初の可変長フィールドであり、固定オフセットに置かれる最後のフィールドでもあります。エンコードはリトルエンディアンの base 128 で、各バイトの下位 7 ビットがデータ、最上位ビットが「次のバイトが続く」を意味します。これ以降のオフセットはすべて、このフィールドが何バイトになったかに依存します。
variable1+Header type1 = main archive header、2 = file header、3 = service header、4 = archive encryption header、5 = end of archive header。通常のアーカイブならオフセット 8 のブロックは type 1 ですが、ヘッダごと暗号化されている場合は type 4 になり、パスワードなしではそこから先を一切読めません。
variable1+Header flags全ブロック共通のフラグです。0x0001 はフラグの後ろに extra area のサイズフィールドが続くこと、0x0002 は data area のサイズフィールドが続くことを意味します。この 2 ビットが、次に来る 2 つの可変長整数がそもそも存在するかどうかを決めます。
variable1+Archive flags (main header only)0x0001 = マルチボリュームセットの 1 巻である、0x0002 = ボリューム番号フィールドがある、0x0004 = ソリッドアーカイブ、0x0008 = リカバリレコードがある、0x0010 = 変更に対してロックされている。
variablevariableFile headers (type 2)格納ファイル 1 つにつき 1 ブロック。中身の CRC-32、圧縮後・圧縮前のサイズ、属性、更新日時、圧縮情報を各自が持ち、その直後にそのファイルのデータ領域が続きます。
variablevariableEnd of archive header (type 5)ファイル内の最後のブロックです。このブロック自身のフラグ 0x0001 が立っていれば「このボリュームは最終巻ではない」という意味で、展開側はこれを見て「壊れている」ではなく「次のパートをよこせ」と判断します。

似た形式との見分け方

紛らわしい形式見分け方
RAR (4.x)この 2 つのカタログエントリが別々に存在する理由そのもので、違いは 1 バイトと長さだけです。RAR 4.x は 7 バイトの 52 61 72 21 1A 07 00、RAR 5.0 は 8 バイトの 52 61 72 21 1A 07 01 00。どちらも 'Rar!' に 1A 07 が続き、7 バイト目が 00 か 01 かで決まります。署名より下は何一つ共有していません。ブロックのレイアウトもフィールドのエンコードも圧縮方式も別物なので、読む側はパースを始める前にこのバイトで分岐する必要があります。
7-Zip同じく高圧縮率を狙う Windows 系アーカイバで、先頭は 37 7A BC AF 27 1C です。用途が重なるうえ拡張子もよく取り違えられますが、リカバリレコードとネイティブのマルチボリューム分割を持つのは RAR だけ、自由に実装できるのは 7z だけです。
ZIP50 4B 03 04 と 52 61 72 21。WinRAR は両方を読み書きするので、中身は ZIP なのに .rar というファイルもよくあります。判定は先頭 4 バイトで確定します。また ZIP と違って RAR は末尾から一定距離のところにディレクトリを持ちません。
Self-extracting .exe仕様は署名の前に任意のデータが置かれることを許しており、SFX モジュールのサイズと内容は明示的に未定義です。読む側には「先頭から SFX モジュールの最大サイズまで探せ、その上限は 1 MB を超えないことを推奨する」と書かれています。したがって 4D 5A('MZ')で始まるファイルの数十 KB 先に RAR 署名が現れるのは、まったく正当な状態です。
Multi-volume partsセット内のどのボリュームも同じ 8 バイト署名を持つため、.part1.rar も .part2.rar も、古い .r00 も、すべて完全な RAR アーカイブとして判定されます。パートと単体を区別できるのは main header の archive flags(ボリュームを示す 0x0001、ボリューム番号がある 0x0002)と、end-of-archive ブロックのフラグだけです。

よくある壊れ方

  • マルチボリュームセットの 1 巻が欠けている。最後のブロックが end-of-archive ヘッダではない、あるいはそのボリュームフラグが「まだ続きがある」と言っているため、展開側は破損を報告せず次のファイルを要求します。「RAR が壊れた」という報告で一番多いパターンですが、たいてい何も壊れていません。
  • リカバリレコード付きアーカイブのビット腐食。RAR は前方誤り訂正を内蔵する数少ない形式で、作成時にリカバリレコードを付けてあれば、修復コマンドが本当に破損セクタをその場で再構築できます。付いていない場合、各 file header の CRC-32 は破損を検出こそしますが、元に戻す手段はありません。
  • ソリッドアーカイブが局所的な破損を増幅する。main header の 0x0004 フラグが立っていると全ファイルが 1 本の連続ストリームとして圧縮されているため、1 バイトの破損がそのエントリだけでなく、同じソリッドグループ内のそれ以降すべてを道連れにします。
  • ヘッダ暗号化を空アーカイブと勘違いする。オフセット 8 のブロックが type 4 のときはファイル名自体が暗号化されており、パスワードなしでは一覧すら取れないので、ツールには空のツリーが表示されます。アーカイブは無傷で、単に答えるのを拒んでいるだけです。
  • テキストモード転送、または先頭へのバイト付加。付加は自己展開アーカイブでは合法で、署名を走査する読み取り側なら対応できますが、オフセット 0 決め打ちの判定器はファイルを不明と報告します。また圧縮データ内部で改行変換が起きた場合、署名もヘッダも綺麗に読めるのに、展開したファイルが全部 CRC エラーになります。

この形式の現在地

RAR の立ち位置は少し変わっています。技術的には優秀なのに、いつまでもニッチから出られない。理由は独自形式であることが実際に効いているからです。この形式を書けるのは RARLAB だけで、unrar のデコーダはソースこそ公開されていても「これを使って圧縮側を作ってはいけない」という条項が付いています。だから ZIP のような標準にはなりようがなく、OS が書き込み側を同梱することもありません。それでも生き残っているのは、既存のアーカイブが本当に大量にあること、そして他の形式が真似できない機能が 2 つあるからです。1 つはリカバリレコード、つまりアーカイブ自体に前方誤り訂正を持たせる仕組み。もう 1 つはマルチボリューム分割が形式レベルで組み込まれていることで、大きなファイルが 20 年にわたって連番のパートで配布されてきたのはこれが理由です。新規に作るなら選択肢はほぼ他へ移りました(受け渡しなら ZIP、Windows で圧縮率が欲しいなら 7z、Unix なら tar.zst や tar.xz)。今この形式を知っておく実用上の理由は、それでも .rar を渡されて開かなければならない場面があるからです。

RAR5 ファイルをこのサイトで開く

どれもブラウザ内で動きます。ファイルが端末から出ることはありません。

関連する形式

RAR5 と混同しやすい形式です。先頭バイトを見比べてください。

形式先頭バイト拡張子
RAR (4.x)52 61 72 21 1A 07.rar
7-Zip37 7A BC AF 27 1C.7z
ZIP50 4B 03 04.zip

よくある質問

ファイルのマジックナンバーとは何ですか?

ファイル先頭の数バイトで、名前が何であろうとその形式を示すものです。PNG は必ず 89 50 4E 47 で始まり、ZIP は 50 4B 03 04 で始まります。OS もブラウザも file コマンドも、拡張子を信用せずこのバイト列を読みます。だからファイル名を変えても中身の正体は変わりません。

マジックナンバーを自分で確認する方法は?

macOS や Linux なら xxd -l 16 ファイル名 で先頭 16 バイトが表示されます。Windows なら PowerShell で Format-Hex -Path ファイル名 -Count 16 です。あるいはこのサイトのファイル形式判別ツールにドロップすれば、ローカルでバイト列を読んで形式を教えてくれます。アップロードはありません。

2 つの形式が同じマジックナンバーを持つのはなぜ?

一方が他方の上に作られているからです。docx、xlsx、pptx、apk、jar、epub はすべて中身が ZIP アーカイブなので ZIP の署名で始まり、区別するには内部のエントリを見る必要があります。Java の class ファイルと macOS のユニバーサルバイナリはどちらも CA FE BA BE で始まり、直後のフィールドで見分けます。

マジックナンバーがまったくないファイルもある?

あります。XML、HTML、JSON、SVG、CSV といったテキストベースの形式には固定のバイト署名がないため、構造から判別します。先頭の <?xml 宣言、<svg 要素、あるいは { に続く引用符付きのキーなどです。これは確定ではなく推測なので、このリファレンスではそうした形式をプローブ判別として示しています。

マジックナンバーが一致すればそのファイルは安全?

いいえ。わかるのは形式であって、中身が無害かどうかではありません。正規の PDF や docx でも悪意のあるペイロードを含んでいることがあります。特に拡張子とバイト列が食い違うときに真の形式を知るのは有用な第一段階ですが、マルウェアスキャンではありません。

RAR5 かもしれないファイルをお持ちですか?ファイル形式判別ツールで調べる — マジックナンバーをローカルで読み取ります。アップロードは一切ありません。またはすべての形式を見る。