はてなブックマークに追加
Facebookでシェア
Google+でシェア
Twitterでシェア
Excel VBAプロジェクトのパスワード復元・復旧方法
例えば、社内のシステムなどではマクロをパスワードでロックしてエンドユーザが勝手にマクロを変更しないようにしたい場合や、開発中のソースの流出防止を考慮しパスワードでロックしたい場合、その他にも何らかの理由でソースを表に出したくないケースはたくさんあると思います。

でも、パスワードを忘れてしまったり、設定時の誤入力に気づかずわからなくなったり、最初に作った人が会社を辞めちゃったりなど、パスワードが分からなくなったという事故が起きると、他人どころか自分も見られなくなってしまいます。バグが出ても直せませんし、下手をすると一から作り直し…なんてことは、やりたくないですよね(汗)

そんな場合でも、運が良ければムリヤリ解除することで復旧できます。でも、決して悪用はダメです。おいらも、方法は知ってても絶対にやりませんし。
準備するもの
作業に入る前に、バイナリエディタを準備してください。バイナリエディタなら何でも良いです。ちなみに、おいらはStirlingっていうフリーソフトを使ってます。

それと、必ずワークブックのバックアップを取っておいて下さい。誤って破損すると、それこそ取り返しの付かないことになります。
パスワードはどこにある?どんな形?
バイナリエディタを準備したら、次はマクロにパスワードが設定されているワークブックをバイナリエディタで開いてみましょう。開くと、こんな意味不明の文字列が表れると思いますが、これがワークブックの本当の姿です(笑)

その次は、パスワードが書いてある場所です。とりあえずDPB=という文字列を検索してみてください…見つかりましたか?このDPB=という文字列の後に"で挟まれた意味不明の文字列がありますが、何を隠そうこれがこのネタの主役パスワードです。ただし、スクランブルがかかっているのでこの状態では何が何だかわかりませんし、この文字列からシコシコ解析するってわけでもないです。

ではどうするかというと、スクランブルされたパスワードの文字列を新たに作り、この部分を作った文字列で置き換えるのです。それだけで、開くのを諦めていたマクロを開くことができるようになります。

ちなみに、意味不明に見えても法則が1つだけあります。それは、文字列の長さです。この部分は、たいての場合72文字74文字76文字78文字になっています。ごく希に例外もありますが、その場合の復旧方法は最後で!

なお、このワークブックをダウンロードして、復旧の練習台としてご利用ください。パスワードは内緒で、DPBの所は74文字になってます。
スクランブルパスワードを作る
ここからは、スクランブルされたパスワードのことをスクランブルパスワードと書きます(笑)

この作業、特に難しいものではありませんし特殊なツールを使うわけでもありません。エクセルでワークブックを新規作成し、マクロのパスワードを設定して保存。その後、バイナリエディタでそのワークブックを開き、入っているDPB=以降の部分を使います。

なお、スクランブルパスワードの長さは、保存するたびに72文字74文字76文字78文字のいずれかが設定されます。もしも、希望の長さになっていなかったら、ワークブックを再度保存した後バイナリエディタで確認の手順を、希望の長さが出るまで繰り返しましょう。

詳しい手順は、こちらを参照してください。なお、この手順はサンプルのワークブックを復旧することを前提(文字列長が74文字)とした内容になっています。
トドメの一撃!
スクランブルパスワードが出来たら、最後にそれを目的のワークブックの同じ部分にコピペします。もちろん、コピペはバイナリエディタ上で行います。

文字列を貼り付けしたら忘れずに保存し、バイナリエディタを閉じちゃいましょう。その後、エクセルで目的のワークブックを開き、マクロのパスワードを聞かれたらスクランブルパスワードを作ったときに入れたパスワードを入れてみましょう…なんと、今まで諦めていたマクロが開きます!

詳しい手順は、こちらを参照してください。なお、この手順はサンプルのワークブックを復旧することを前提(スクランブルパスワード作成時のパスワードはa)とした内容になっています。
イレギュラーケース其の1/長い?!
スクランブルパスワードの文字列長は、通常72文字74文字76文字78文字ですが、中には82文字とか84文字なんていうへんてこりんな文字列のときもあります。

そんなときは、とりあえず78文字のスクランブルパスワードを作成して貼り付け、余った部分には次の16進数コードを必要な長さだけ設定しましょう。

81 00 00 00 82 00 00 00 83 00 00 00
 ※この値は16進数です。バイナリエディタでは、16進数モードで入力してください。

復旧事例は、こちらを参照してください。
イレギュラーケース其の2/割れてる?
たまに、DPB=以降がこんなふうになっているときもあります。でも、よーく見て下さい。スクランブルパスワードが分割され設定されているだけです。

このような場合は、コピペするときも分けて行いましょう。
イレギュラーケース其の3/短い?!
ここで紹介しているのは、Excel 2000〜2003での例です。しかし、中にはスクランブル部分が極端に短かいケースもあります。一般的にはExcel 97などで作成したワークブックの場合です。

こういったワークブックは、さらに荒っぽい方法で復旧することができる場合があります。なお、この「さらに荒っぽい方法」はこれまで紹介したケースでに有効ですが、ごく希にワークブックそのものやVBAプロジェクトが壊れる場合があります。通常の長さの場合は、DPB=のスクランブル部分を書き換える方法で行いましょう。

なお、この「さらに荒っぽい方法」でも復旧しないときは、きっぱり諦めてくださいorz


Copyright(C) 1999-2015 結城圭介(Ver.3.51) All rights reserved