web-dev-qa-db-ja.com

* .docxファイル形式の最後のバイトは何ですか

フォーマットされ、OSを再インストールしたハードディスクがあります。

問題は、フォーマット前に起動していなかったことと、フォーマット前に作成したデータバックアップが何らかの理由ですべてのファイルを持っていないことです。
Microsoft Word * .docxファイルがありません。

今私はPuran File Recoveryでファイルを回復しようとしていますが、*。docx拡張スキャンエントリが事前に作成されていません。
Puran File Recoveryにはカスタムエントリを作成するオプションがあり、 filesignatures.net 開始バイトシグネチャで見つかったため、ハードディスクで多くの* .docxヘッダーを見つけることができましたディスク。

私の問題は、*。docxファイルの終了バイトがどこにも見つからないため、一部のファイルを回復できることです。

23
J Rui Pinto

.docx ファイルは単なる .Zip ファイルです。これは、Zipファイルの構造です。

Structure of a Zip file

Zipファイルの終わりは、 中央ディレクトリレコードの終わりで示されます。 [〜#〜] eocd [〜#〜] 。 EOCDには最大65535バイトのコメントを含めることができるため、EOCDの長さは可変です。以下のEOCDレイアウトの太字部分を参照してください。

 + --------- + -------- + ------------------------- ------------------------------------------- + 
 |オフセット|バイト|説明| 
 + --------- + -------- + ----------------------- --------------------------------------------- + 
 | 0 | 4 |中央ディレクトリの署名の終わり= 0x06054b50 | 
 | 4 | 2 |このディスクの番号| 
 | 6 | 2 |中央ディレクトリが開始するディスク| 
 | 8 | 2 |このディスク上の中央ディレクトリレコードの数| 
 | 10 | 2 |中央ディレクトリレコードの総数| 
 | 12 | 4 |中央ディレクトリのサイズ(バイト)| 
 | 16 | 4 |アーカイブの開始を基準とした中央ディレクトリの開始のオフセット| 
| 20 | 2 |コメントの長さ(n)| 
 | 22 | n |コメント|
 + --------- + -------- + -------------- -------------------------------------------------- ---- + 

Wikipediaからのテーブル " Zip(ファイル形式) " 中央ディレクトリレコードの終わり(EOCD)

0x06054b50(EOCDの先頭)を検索し、その後16バイトをカウントすることで、Zipファイルの末尾を取得できます。次の2バイトを0x0000に設定してコメントを無視すると、有効なZipファイルの終わりになります。


注:これはファイルシステムの断片化を考慮していません。 .docx/.Zipファイルがディスク上で断片化されている場合、見つけた署名が壊れているため、リカバリアプローチは機能しません。断片化されたファイルをつなぎ合わせるには、ファイルシステムの情報が必要です。開始と終了の署名にはこの情報はありません。

PhotoRec は、以前に使用したソフトウェアで、断片化されたファイルをつなぎ合わせる方法を理解するためのいくつかのトリックがあります。 あなたにとって非常に重要なのは、PhotoRecにZipファイルのサポートが組み込まれているためです。したがって、 TestDisk/PhotoRec 現在の署名検索戦略がうまくいかない場合。

70
Deltik

Deltikの答え は正しいです。役立つ可能性のある情報:

End-Of-Central-Directoryヘッダーのバイトシーケンスは、実際にはxxbなどの16進エディター、またはバイトアドレス指定されたシーケンスで504b0506(逆順)として表示されます。

.docxファイルなどの有効なOpenOfficeXMLファイルでは、end-of-central-directoryコメントはありません( ECMA-376Part 2 を参照) :「ZIPファイルコメント」は生成されません。ただし、消費者は、このようなコメントを含むファイルの読み取りをサポートすることになっています。)

また、マルチディスクアーカイブはサポートされていないため(75ページを参照)、[このディスクの数]フィールドと[中央ディレクトリが開始するディスク]フィールドは常に0です。また、[このディスク上の中央ディレクトリレコードの数] "と"中央ディレクトリレコードの総数 "フィールドは等しくなければなりません。

言いましたが、.docxファイルの最後の22バイトは常に次の形式である必要があります

 50 4b 05 06 00 00 00 00 ## ## ## ## ## ## ## ## ## ## ## ## 00 00
| signature |disk |CD-  |num. |num. |size of CD | CD offset |comment
|           |num. |disk |recs |recs |           |           |length
11
Nick Matteo