パスワードで保護された Ms Office ファイルを検出するにはどうすればよいですか? Linux で C/C++ を使用しています。
2 に答える
ファイルが Office 2007 形式 (.docx など) の場合、内部ストレージは次のいずれかです。
1) xml ドキュメントの zip ファイル (パスワードで保護されていない場合)
2) 古いスタイルの複合ファイル形式 (パスワードで保護されている場合)。
したがって、おそらく次のようなことができます。
1) ファイルの最初の数バイトを確認する
2) zip ファイル (パスワードで保護されていない) の場合、0x50 0x4b 0x03 0x04 で始まります。
3) zip ファイルでない場合は、おそらくパスワードで保護されています。異なるバイナリ署名で始まります (たとえば、この場合、Word 2007 ドキュメントは 0xd0 0xcf 0x11 0xe0 で始まります)
基本的に、それが新しい .docx または .xlsx で、0x50 0x4b 0x03 0x04 の zip 署名で始まらない場合、おそらくパスワードで保護されています。
MS Office の他のバージョンの場合は、少しトリッキーです...
暗号化されたファイルのファイル署名は異なる必要があります。暗号化されていない場合は 50 4B 03 04 です。暗号化されたものの最初の 4 バイトは D0 CF 11 E0 です (少なくとも docx の場合、Excel、ppt などでは異なる場合があります)。