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 と評価されるまで、プログラムでパスワードを試行し続けた場合、パスワードが見つかったことになります。