Windows

解除パスワードのわからないExcelマクロ(Excel VBA)のパスワードを強制的に解除する方法

投稿日:

gui-2311261_640-fs8

悪用厳禁ですよ。

企業の社内システムでExcelマクロが未だに幅を利かせている事は事実であり、そのExcelマクロをメンテナンスしている「Excelおじさん」がいるのも紛れも無い事実です。

ところが、年月の経過と共にExcelマクロの中身は次第にブラックボックス化していきます。また、Excelおじさんの定年退職や部署異動に伴い、属人化していたExcelマクロをメンテナンスできる人材が減少、もしくは不在になる事も、長年企業に勤めているとありがちな事です。

ある日、上司に「君、業務で使っているこのExcelマクロ、ちょっと改修して欲しいんだが」と頼まれました。

Excelマクロは、なぜか新入社員時代にOJT(On the Job Training)の一環という名目のもと散々勉強した経験のある「君」ですから、多少スパゲティ化していたとしても、「たかだかExcelマクロ」と思い込んでいます。

上司からの依頼に二つ返事で引き受けます。「時間はかかるかもしれませんが、解読しながら隙間時間を見つけてやってみます」

しかし、そこで待ち受けていたのは思わぬ事態でした。Excelマクロ自体がスパゲティ化している、という事実の前に、Excelマクロ(Excelプロジェクト)にExcelおじさんが仕掛けたと思われる解除用パスワードが設定されていたのです。

スクリーンショット 2018-11-13 22.58.59-fs8

Excelマクロの解除用パスワードを強制的に解除する方法

前置きが長くなりましたが、ここからが本題です。冒頭のような、考えられないような事態ですが、往々にして起こってしまう事が否めません。緊急手段として、今回の方法をご紹介しますが、お願いがあります。

  • 緊急手段以外で本手順を使用してパスワードの解除を行わないようにしてください。悪用厳禁です。
  • バイナリエディタを用いて、Excelマクロのバイナリを強制的に書き換える、非公式な方法です。Microsoftが推奨しているわけではありません
  • バイナリを強制的に書き換えるため、Excelブックが破損する可能性があります。あらかじめバックアップを取得してください。

バイナリエディタをダウンロードしよう

今回の検証用の環境は以下の通りです。

  • Windows 7 Professional(64bit)
  • Excel 2010(32bit) or Office 365(1810)(32bit)
  • stirling

Excel 2013、2016での実績はありませんが、2010、およびOffice 365(リビジョン1810)で同様の方法が利用できたため、恐らく問題はないと思います。ただし、64bit版では検証できていないため、手順が異なる可能性があります。

バイナリエディタには、「stirling」を使用しましたが、Excelブックをバイナリエディタで編集できるものであれば何でも構いません。

stirling

Excelマクロのパスワードを解除する(xlsm編)

では、具体的にExcelマクロのパスワードを解除する方法を以下に示します。実は、Excel 2007以前と、Excel 2010以降、具体的にはExcelマクロの拡張子が「xls」か「xlsm」かで解除の方法が異なります。「xls」の方が単純ですので、「xlsm」で今回はお見せします。

  1. 「xlsm」ファイルの拡張子を「zip」に変更し任意のフォルダに解凍する
  2. 解凍したフォルダ内の「xl」フォルダにある「vbaProject.bin」ファイルをバイナリエディタで開く
  3. バイナリエディタ上で「DBP=」という文字列を検索する
  4. バイナリエディタ上で検索した文字列の先頭を任意の1バイト文字(英字)に置換し保存する
  5. 解凍したフォルダ内のファイルとフォルダを全て選択した状態で、再度zip形式で圧縮する
  6. 圧縮されたファイルの拡張子を「zip」から「xlsm」に変更する
  7. ExcelブックをExcelで開きマクロの編集画面を開く
  8. VBAProjectのプロパティを表示して、ロックを解除して、Excelファイルを保存する

流れとしては上記の手順になります。煩雑そうに見えますが、内容は至って単純です。一部、図を交えながら解説します。

まず、拡張子「xlsx」や「xlsm」ファイルに関してですが、Excel 2010以降で形式が従来の「xls」から変更されました。これは、拡張子のみならず、Excelファイル自体の保存形式が変更されており、標準でZIP形式で圧縮された状態で保存されるようになりました。そのため、拡張子を「zip」に変更することでExcelファイルを解凍することができます。解凍した中身には、Excelのコンテンツの情報や、Excel上に貼り付けた画像ファイル等のアセットファイルがフォルダに保存されていることがわかります。

スクリーンショット 2018-11-13 23.09.01-fs8

次に、バイナリエディタによる編集についてです。stirlingで該当ファイルを開き、文字列を検索してください。パスワードで保護されたExcelプロジェクトの場合、「DBP=」という文字列が見つかります。

スクリーンショット 2018-11-13 23.10.16-fs8

この「DBP=」の先頭の文字を任意の1バイト文字に置き換えます(図中では「a」)。これでバイナリエディタを使用した手順は終了です。

スクリーンショット 2018-11-13 23.16.57-fs8

次に、解凍したExcelファイルを元の状態に戻します。その際に、解凍したフォルダの親フォルダから圧縮するのではなく、フォルダの中身を全て選択した状態で、zip形式に圧縮してください。例えば、「Book1」というフォルダに展開された場合、「Book1」フォルダ自体を圧縮するのではなく、その中のファイルやフォルダ全体を選択して圧縮します。なお、stirlingのデフォルトの設定では、ファイル保存時に、同一フォルダ上にバックアップファイルが保存されますが、圧縮の際には別フォルダに移動しておいてください。

続いて、Excelから編集したExcelブックを開くと下図のようなエラーダイアログが表示されますが、そのまま「OK」をクリックします。

スクリーンショット 2018-11-13 23.11.21-fs8

スクリーンショット 2018-11-13 23.11.38-fs8

そして、Excelマクロの編集画面を開くと、パスワードが解除されて内容が分かるようになっています。そのままの状態では、次回以降同様のエラーダイアログが表示されてしまいますので、「VBAProject」のプロパティを表示して、保護を解除しておきます(具体的にはチェックボックスを外します)。

スクリーンショット 2018-11-13 23.11.49

スクリーンショット 2018-11-13 23.18.31-fs8

以上で、次回以降ファイルを開いた際にはパスワードが解除された状態で表示されるようになります。

Excelマクロのパスワードを解除する(xls編)

拡張子が「xls」形式、すなわちExcel 2007以前の形式の場合、手順はより単純になります。

  1. バイナリエディタでExcelブックを開く
  2. バイナリエディタ上で「DBP=」という文字列を検索する
  3. バイナリエディタ上で検索した文字列の先頭を任意の1バイト文字(英字)に置換し保存する
  4. バイナリエディタで編集したExcelブックをExcelで開きマクロの編集画面を開く
  5. VBAProjectのプロパティを表示して、ロックを解除して、Excelファイルを保存する

Excel 2007以前の形式のExcelファイルは単独のバイナリファイルです。そのため、zipファイルの解凍等の作業が必要なくなり、直接バイナリエディタで編集するだけです。

まとめ

Excelファイルのパスワードは、暗号化された状態でファイルに埋め込まれた状態で保存されているため、それを応用して解除することができます。ただし、冒頭述べたように、直接バイナリエディタで内容を編集するため、Excelブックが破損する可能性があることと、自作のマクロや自社内のマクロでどうしてもパスワードを解除する必要がある場合のみ使用してください。

Excelマクロの現場からは以上です。

-Windows
-,

執筆者:


  1. 匿名 より:

    全然関係ないですけどxyzを使っているこのサイトのドメインについて記事読みたいですぅ!xyzは上位表示しない説に物申していただきたい!

    • ottan より:

      コメントありがとうございます。xyzドメインについては、当時何も考えず取得した経緯があります。上位表示されるように頑張りたいと思います。

comment

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください