テーマ:エクセル 関数 マクロ(13)
カテゴリ:エクセルマクロ
ということで、会社であった相談に、
「エクセルに付けたパスワード忘れたんだけど何とかならない?」 というものがありました。 結論から言っちゃえば、「そういうことできるソフト」ってのは、 Vectorさんとか行けばゴマンとあります。 しかしながら、そこは「企業」という縛りがあるため、 「こういうのがあるから使ってください!」…とはなりません~。 で、目を付けたのが、「ブルートフォース(総当たり)」方式で何とかならんかと…。 平たくいえば、マクロで総当たりでファイルが開けるか試せばいいじゃんってことでしたが、 「そういうことができるソフト」は基本的にはこの方式をとっているみたいです。 うん、にわか仕込みの知識ではちょっと時間が足りませんでしたw 総当たりのいいところは、「いつかは解除できる」という点ですが、 最大のデメリットは、「総数が増えると時間がめちゃくちゃかかる」ということですね。 コレ、今回の件で試してみてわかったのですが、Microsoft Office系ソフトって、 パスワードの使用可能文字に制約ないんですね。 その上、大文字・小文字は分けるので、対象となるのは下記のような感じ。 英字:abcdefghijklmnopqrstuvwxygABCDEFGHIJKLMNOPQRSTUVWXYG 数字:0123456789 記号: !"#$%&'()-^\@[;:],./\=~|`{+*}<>?_ その数、実に96種類!(実は、「半角スペース」も使えてしまいます) この数字がどういうことかというと、1桁のパスワードであれば、「96通り」。 2桁のパスワードであれば、「9,216通り(96の二乗)」。 3桁のパスワードであれば、「884,736通り(96の三乗)」。 4桁のパスワードであれば、「84,934,656通り(96の四乗)」。 5桁のパスワードであれば…。 …とまぁ、とんでもない跳ね上がり方します。 総当たりをかける速度が1回あたり0.1秒程度と仮定しても、 4桁のパスワードを解読するのに約98日ほどかかるみたいです。 まぁ、CPUパワーに任せれば、もっと速いと思いますが、 「かなりかかる」という印象を持っていただければと思います。 さらに、「桁数」がわかっていれば問題ありませんが、 「忘れた人」は何桁で作ったかなんて考えません(自分もそうですし)。 結果、それぞれの桁数の結果を順繰りに試さないといけないわけです。 「1」「01」「001」「0001」…パスワードとしては、別物ってことですね。 んで、最初に作ったのは、配列に入れてから順繰りにぶつける方法でしたが、 どれだけの数を入れることになるかが不明瞭(桁数のせいで…)のため、 頭から順繰りに引っ掛ける方式にしたんですね。 ひとまず、数字のみでって感じでしたが、これがめちゃくちゃ時間がかかる。 単純な方式だったので、パスワードをぶつける方法を考えないと…でしたね。 データが開けた際の処理も後回しだったので、まぁ、ひどいものでしたがw サンプルコードを…と思いましたが、手元にエクセルがないためちょっと断念。 動作検証もできないものはちょっと掲載できないです。 ざっくり書くと下記の感じですね。 Sub パスワード解除 Dim i As Long On Error Resume Next Do Until i = 2017 'パスワードは2017に指定してあった Workbooks.Open ファイルパス,Password:=i 'Passwordのところ違うかも? i = i + 1 Loop On Error Goto 0 End Sub 色々と抜け、間違えはあると思うので、コピペではなく、 コードを直接たたいてみてください。 どっか間違えているはずです…多分。 さておき、これに時間をかけすぎて業務がどうにかなるのも避けたかったので、 「ありませんでした」という返信で終わらせることとしましたよ~…って話ですね。 もうちょっと、時間と技量に余裕が出てきたら、再度挑戦したものです…。 お気に入りの記事を「いいね!」で応援しよう
最終更新日
2018.05.27 11:58:08
コメント(0) | コメントを書く
[エクセルマクロ] カテゴリの最新記事
|