VBA パスワード
エクセルのVBAプロジェクトのパスワードが分からない
昔自分が作ったVBAプロジェクトのパスワードを忘れてしまったとか、VBAを作成した人や業者と連絡がとれなくなってしまったとか、そういう理由でVBAのデバッグやメンテナンスができなくなってしまったというケースは少なからずあるのではないだろうか。
かといってイチから作り直している時間も体力もない・・このパスワードさえなんとかなれば・・という経験は誰しもあるだろうと思う。(私はあった)
いろいろがんばったが、結局パスワードそのものの解析は不可能ということが分かった。
しかし「パスワードが分からなくても、プロジェクトが開ければそれで良い」わけだ。
拡張子が「.xlsm」(バイナリ保存していないファイル)限定になるが、以下の手順でなんとかこじ開けることができたので備忘録。
(VBAプロジェクトのパスワードです。エクセルブックそのものを開くときのパスワードではありません)
- 当たり前だが事前にブックをバックアップしておく
- 拡張子.xlsmを.zipに変更する(エクセルブックはzip圧縮されている)
- zipを解凍し、「xl」フォルダ内の「vbaProject.bin」をバイナリエディタで開く
- 文字列モードで「DPB」を検索する
- 「DPB」付近の""で囲まれたハッシュ値の文字数を数えて覚えておく
- 新規ブックを作成して適当なVBAコードを書き、VBAプロジェクトにパスワード保護をかけて保存する(このときのパスワードを覚えておく)
- 保存したブックの「DPB」の文字数を上の手順で同様に調べる
- ハックしたいブックと文字数が違ったら、同じになるまで新規作成して保存しては調べるを繰り返す(文字数はランダムで決まるようです)
- 同じになったら、新規作成した側の""で囲まれたハッシュ値を控えておく
- ハックしたい側の「vbaProject.bin」をバイナリエディタで開き、そのハッシュ値を控えておいたハッシュ値で書き換える
- 「vbaProject.bin」を上書き保存する(.bakファイルが残っていたら削除しておくこと。これが残っていると正常なxlsmファイルにならない)
- ハックしたい側の「_rels」「docProps」「xl」「[Content_Types].xml」をまとめてzipに圧縮する
- 拡張子.zipを.xlsmに変更する
- ブックを開く
- 修復云々という警告が出たら「はい」をクリック
- 新規作成したブックのパスワードでVBAプロジェクトが開けるようになる
|