この質問は私の以前の質問に関連しています。
2007 より前のバージョンで Excel VBA コードのパスワード保護が実際にどのように機能するかを説明するか、説明へのリンクを提供できますか? パスワード保護に関して、Excel 2007 と以前のバージョンの違いは何ですか?
また、Excel のパスワード保護は実際にコードを暗号化しますか? コードが暗号化されている場合、Excel はどのようにコードを実行しますか?
最後に、Excel のパスワード削除ソフトウェアはどのように機能しますか?
この質問は私の以前の質問に関連しています。
2007 より前のバージョンで Excel VBA コードのパスワード保護が実際にどのように機能するかを説明するか、説明へのリンクを提供できますか? パスワード保護に関して、Excel 2007 と以前のバージョンの違いは何ですか?
また、Excel のパスワード保護は実際にコードを暗号化しますか? コードが暗号化されている場合、Excel はどのようにコードを実行しますか?
最後に、Excel のパスワード削除ソフトウェアはどのように機能しますか?
VBA のセキュリティは、かなり貧弱であると広く考えられています。VBA コードはコンパイルされておらず、ソースは Excel ファイルで入手できます。パスワード保護は非常に簡単に回避できます。
私が理解しているように、Office 2003 以前では、vba コードをワークシート (またはドキュメント/プレゼンテーション) のバイナリ形式の一部として保存します。VBA IDE を起動すると、VBA コードが「保護」されているかどうかを確認するだけです。これは暗号化されているという意味ではなく、表示できないだけです。理論的には、これによりユーザーがコードに干渉するのを防ぐことができますが、ハードコアなコーダーはパスワードを回避できます.
したがって、Excel はコードの暗号化を解除する必要はありません。必要なのは、ユーザーがコードを表示できないようにすることだけです。
Office 2007はマクロを暗号化します (どのように、どのようなアルゴリズムかは聞かないでください)。XLSM ファイル (または任意の Office 2007 ファイル) は拡張子が異なる単なる zip ファイルであるため、これが必要になると考えられます。誰でもこれらのファイルにアクセスして、いじることができます。
最後の質問に答えるために - 古い Office 形式でパスワードの削除がどのように機能するのか、私にはよくわかりません。さまざまなベンダーがさまざまな方法で問題にアプローチする可能性がありますが、最も一般的なアプローチは、一致が見つかるまでパスワードに対する総当り攻撃になると思います。
Excel VBProject オブジェクトには、マクロの保護ステータス (マクロが保護されている場合など) に応じて異なる列挙を返す Protection プロパティがありますvbext_pp_locked。vbext_pp_lockedが false と評価されるまで、プログラムでパスワードを試行し続けた場合、パスワードが見つかったことになります。
Phil は正しいです。パスワードによってモジュールを見ることができなくなります。モジュール自体は暗号化されていません。Excel 2007 では、ファイルが本質的に XML およびその他のファイルの圧縮されたコレクションであることは知っていますが、暗号化の処理方法の詳細はわかりません。以前のバージョン (Excel 2、3、4、5、95、97、2000、XP、および 2003) については、包括的な OpenOffice.org の Microsoft Excel ファイル形式のドキュメント があります。
Excel ファイル形式は BIFF (Binary Interchange File Format) と呼ばれます。ワークシート ドキュメント、ワークブック ドキュメント、ワークスペース ドキュメントなど、あらゆる種類のドキュメントを格納するために使用されます。このファイル形式には、ファイルを書き込んだ Excel のバージョンやドキュメントの種類によって、さまざまなバージョンがあります。
複数のシート (BIFF5 ~ BIFF8) を含むワークブック ドキュメントは、通常、複合ドキュメント ファイル形式 (「OLE2 ストレージ ファイル形式」または「Microsoft Office 互換ストレージ ファイル形式」とも呼ばれます) を使用して保存されます。さまざまなタイプのデータ用のいくつかのストリームが含まれています。複合ドキュメント ファイルの形式に関する完全なドキュメントは、ここにあります。
ワークブック保護ブロックは、ほとんどの BIFF ストリームで DEFINEDNAME ブロック (名前付き範囲) の直後に発生しますが、BIFF8 はそのパターンから大きく逸脱しています。レコード保護ブロック Biff5 - Biff8 では、ワークブック保護ブロックの構造:
パスワード ブロックには、ワークシートまたはブックの保護パスワードから計算された 16 ビットのハッシュ値が格納されます。
誰かが、.xlsm (2007 以降のバージョン) を含むすべての Excel ファイルに対して、vba 保護パスワードを「マクロ」に変更する作業 vba コードを作成しました。彼のコードを閲覧することで、それがどのように機能するかを確認できます。
ここに男のブログがあります: http://lbeliall.blogspot.com/2014/03/excel-removing-password-from-vba.html ここに仕事をするファイルがあります: https://docs.google.com/file/ d/0B6sFi5sSqEKbLUIwUTVhY3lWZE0/編集
彼のブログの以前の投稿から貼り付けました。
Excel 2007/2010 (.xlsm) ファイルの場合、次の手順を実行します。
パラメーター DPB (引用符内の値) から値を見つけてコピーします。例: DPB="282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A"。(この値は「マクロ」パスワード用に生成されます。この DPB 値を使用して、手順 1 ~ 8 をスキップできます)
パスワードが不明なファイル (ロックを解除したいファイル) に対して、手順 4 ~ 7 を実行します。
このファイルの DBP 値を、ステップ 8 でコピーした値に変更します。
コピーされた値が暗号化されたファイルよりも短い場合は、欠落している文字に 0 (ゼロ) を入力する必要があります。値が長い場合 - それは問題ではありません (そのまま貼り付けます)。
「vbaProject.bin」ファイルを保存し、16 進エディタを終了します。