W.I.S. Laboratory
menu-bar

VBA パスワード


エクセルのVBAプロジェクトのパスワードが分からない

昔自分が作ったVBAプロジェクトのパスワードを忘れてしまったとか、VBAを作成した人や業者と連絡がとれなくなってしまったとか、そういう理由でVBAのデバッグやメンテナンスができなくなってしまったというケースは少なからずあるのではないだろうか。
かといってイチから作り直している時間も体力もない・・このパスワードさえなんとかなれば・・という経験は誰しもあるだろうと思う。(私はあった)
いろいろがんばったが、結局パスワードそのものの解析は不可能ということが分かった。
しかし「パスワードが分からなくても、プロジェクトが開ければそれで良い」わけだ。
拡張子が「.xlsm」(バイナリ保存していないファイル)限定になるが、以下の手順でなんとかこじ開けることができたので備忘録。
(VBAプロジェクトのパスワードです。エクセルブックそのものを開くときのパスワードではありません)

  1. 当たり前だが事前にブックをバックアップしておく
  2. 拡張子.xlsmを.zipに変更する(エクセルブックはzip圧縮されている)
  3. zipを解凍し、「xl」フォルダ内の「vbaProject.bin」をバイナリエディタで開く
  4. 文字列モードで「DPB」を検索する
  5. 「DPB」付近の""で囲まれたハッシュ値の文字数を数えて覚えておく
  6. 新規ブックを作成して適当なVBAコードを書き、VBAプロジェクトにパスワード保護をかけて保存する(このときのパスワードを覚えておく)
  7. 保存したブックの「DPB」の文字数を上の手順で同様に調べる
  8. ハックしたいブックと文字数が違ったら、同じになるまで新規作成して保存しては調べるを繰り返す(文字数はランダムで決まるようです)
  9. 同じになったら、新規作成した側の""で囲まれたハッシュ値を控えておく
  10. ハックしたい側の「vbaProject.bin」をバイナリエディタで開き、そのハッシュ値を控えておいたハッシュ値で書き換える
  11. 「vbaProject.bin」を上書き保存する(.bakファイルが残れば削除しておくこと。これが残っていると正常なxlsmファイルにならない)
  12. ハックしたい側の「_rels」「docProps」「xl」「[Content_Types].xml」をまとめてzipに圧縮する
  13. 拡張子.zipを.xlsmに変更する
  14. ブックを開く
  15. 修復云々という警告が出たら「はい」をクリック
  16. 新規作成したブックのパスワードでVBAプロジェクトが開けるようになる

[ 戻る ]
saluteweb