8

この質問は私の以前の質問に関連しています。

2007 より前のバージョンで Excel VBA コードのパスワード保護が実際にどのように機能するかを説明するか、説明へのリンクを提供できますか? パスワード保護に関して、Excel 2007 と以前のバージョンの違いは何ですか?

また、Excel のパスワード保護は実際にコードを暗号化しますか? コードが暗号化されている場合、Excel はどのようにコードを実行しますか?

最後に、Excel のパスワード削除ソフトウェアはどのように機能しますか?

4

3 に答える 3

14

VBA のセキュリティは、かなり貧弱であると広く考えられています。VBA コードはコンパイルされておらず、ソースは Excel ファイルで入手できます。パスワード保護は非常に簡単に回避できます。

私が理解しているように、Office 2003 以前では、vba コードをワークシート (またはドキュメント/プレゼンテーション) のバイナリ形式の一部として保存します。VBA IDE を起動すると、VBA コードが「保護」されているかどうかを確認するだけです。これは暗号化されているという意味ではなく、表示できないだけです。理論的には、これによりユーザーがコードに干渉するのを防ぐことができますが、ハードコアなコーダーはパスワードを回避できます.

したがって、Excel はコードの暗号化を解除する必要はありません。必要なのは、ユーザーがコードを表示できないようにすることだけです。

Office 2007マクロを暗号化します (どのように、どのようなアルゴリズムかは聞かないでください)。XLSM ファイル (または任意の Office 2007 ファイル) は拡張子が異なる単なる zip ファイルであるため、これが必要になると考えられます。誰でもこれらのファイルにアクセスして、いじることができます。

最後の質問に答えるために - 古い Office 形式でパスワードの削除がどのように機能するのか、私にはよくわかりません。さまざまなベンダーがさまざまな方法で問題にアプローチする可能性がありますが、最も一般的なアプローチは、一致が見つかるまでパスワードに対する総当り攻撃になると思います。

Excel VBProject オブジェクトには、マクロの保護ステータス (マクロが保護されている場合など) に応じて異なる列挙を返す Protection プロパティがありますvbext_pp_lockedvbext_pp_lockedが false と評価されるまで、プログラムでパスワードを試行し続けた場合、パスワードが見つかったことになります。

于 2008-11-04T02:26:03.783 に答える
3

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 では、ワークブック保護ブロックの構造:

  • WINDOWPROTECT ウィンドウ設定: 1 = 保護
  • PROTECT ワークブックの内容: 1 = 保護されています
  • PASSWORD パスワードのハッシュ値。0 = パスワードなし
  • PROT4REV 共有ブック: 1 = 保護されています
  • PROT4REVPASS 共有パスワードのハッシュ値。0 = パスワードなし

パスワード ブロックには、ワークシートまたはブックの保護パスワードから計算された 16 ビットのハッシュ値が格納されます。

于 2010-01-20T16:45:32.787 に答える
-1

誰かが、.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) ファイルの場合、次の手順を実行します。

  1. 新しい .xlsm ファイルを作成します。
  2. VBA 部分で、簡単なパスワード (「macro」など) を設定します。
  3. ファイルを保存して終了します。
  4. ファイル拡張子を「.zip」に変更し、任意のアーカイバ プログラムで開きます。
  5. ファイルを見つけます: 'vbaProject.bin' ('xl' フォルダー内)。
  6. アーカイブから抽出します。
  7. 抽出したばかりのファイルを 16 進エディターで開きます。
  8. パラメーター DPB (引用符内の値) から値を見つけてコピーします。例: DPB="282A84CBA1CBA1345FCCB154E20721DE77F7D2378D0EAC90427A22021A46E9CE6F17188A"。(この値は「マクロ」パスワード用に生成されます。この DPB 値を使用して、手順 1 ~ 8 をスキップできます)

  9. パスワードが不明なファイル (ロックを解除したいファイル) に対して、手順 4 ~ 7 を実行します。

  10. このファイルの DBP 値を、ステップ 8 でコピーした値に変更します。

    コピーされた値が暗号化されたファイルよりも短い場合は、欠落している文字に 0 (ゼロ) を入力する必要があります。値が長い場合 - それは問題ではありません (そのまま貼り付けます)。

  11. 「vbaProject.bin」ファイルを保存し、16 進エディタを終了します。

  12. 既存の「vbaProject.bin」ファイルを変更したファイルに置き換えます。
  13. 拡張子を「.zip」から「.xlsm」に戻します
  14. ここで、VBA コードを表示する必要がある Excel ファイルを開きます。VBA コードのパスワードは、単純にマクロになります (ここで示している例のように)。
于 2014-03-28T21:44:11.677 に答える