07
--
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--
>>
<<
--
LATEST ENTRY
CATEGORY
ARCHIVE
PROFILE
SEARCH
RECENT COMMENT
MOBILE
qrcode
OTHERS
<< エクセルファイルのパスワードを忘れたら・・・ | top | 会社を潰す手続き ( 合資会社の任意清算手順・・覚え書き ) >>
Excel の パスワード解除 (VBS版)

前回 エクセルのパスワード解除マクロを出しましたが、解除中はエクセルが使えなくて不便!

とのことで、別の方法でパスワード解除を実行することにしました
 

エクセルのマクロで作った内容をほぼそのまま、VBスクリプトに変えてみました

ファイルは同じく http://drop.io/o8pckmr に、 ExcelUnlock.zip という名前でおいてあります


zip ファイルを展開したら、中に入っている Excelunlock.bat をカチカチっとダブルクリックで実行してみてください

最初は、適当なエクセルファイルに 3文字程度の短いパスワードをかけて、ちゃんと解除できるか実験することをオススメします

パソコンの環境によってはそもそもパスワード解除ができないマシンもあるかもしれません
パスワード解除にはかなりの時間がかかると思うので、時間を無駄にしないためにも、まずは短いパスワードでちゃんと解除できることを確認しとくのがよいかと思います


パスワード解除の仕組みとしては、パスワードに使えそうな文字をすべて試す「総あたり」方式です

長いパスワードの場合はとんでもなく時間がかかると思います

記号とかアルファベットを一切使っていない、数字だけの場合、アルファベットだけの場合など
使っている文字が限られている場合は、スクリプトをちょいと変更するだけで対応できます

パスワードに使えそうな文字は ASCII コードで 0x20 〜 0x7F の範囲にしてあります

確認法法:
スタート −> プログラム −> アクセサリ −> システムツール −> 文字コード表 
を開いて、フォントを system に設定
画面の左下にでているのが、文字コードになります




とりあえず、3文字〜10文字までのパスワード解除をするように作ってあります

パスワードに使っている文字数を 最低4文字、最高20文字などに変更したい場合は
zip から取り出した Exelunlock.vbs ファイルをメモ帳などで開いて、下のソースの黄色い文字部分を修正してから、保存
保存したら Excelunlock.bat をカチカチっとダブルクリックで実行してみてください



今回も一応ソースを公開しときます

内容をちょいと変えれば、Word やらパワポ のパスワード解除にも使えるはず


Excelunlock.vbs パスワード解除用VBスクリプト

Option Explicit
Dim max
Dim min
'===============================================================================
':: 最大(max)・最小(min)のパスワード長を設定してください
max = 10
min = 3

'===============================================================================
':: ここから下はいぢらないでください
Dim i
Dim filename
Dim objFile
Dim objExcel

'エクセルオブジェクト生成
Set objExcel = CreateObject("Excel.Application")

'解除ファイル選択処理 = 選択するまでループ
objExcel.FileDialog(1).Title = "パスワードを解除するファイルを選択してください。"
objExcel.FileDialog(1).Filters.Add "Excel (*.xls)", "*.xls", 1
objExcel.FileDialog(1).AllowMultiSelect = False
objExcel.DisplayAlerts = False
Do While True
  objExcel.Visible = False
  If objExcel.FileDialog(1).Show = -1 Then
    'objExcel.WindowState = 2
    For Each objFile In objExcel.FileDialog(1).SelectedItems
      filename = objFile
    Next
  End If
 
  objExcel.Visible = False
  If filename = False Then
    filename = MsgBox("ファイルを選択してください。", vbCritical + vbOKCancel)
    If filename = 2 Then
      WScript.Quit
    End If
  ElseIf LCase(Right(filename, 4)) = ".xls" Then
    Exit Do
  Else
    filename = MsgBox("エクセルファイルを選択してください。", vbCritical + vbOKCancel)
    If filename = 2 Then
      WScript.Quit
    End If
  End If
Loop

'後始末
Set objFile = Nothing
Wscript.Echo "解除ファイル : " & Filename

'解除処理開始
For i = min To max
  Call passUnlock("", i)
Next

'後始末
Wscript.Echo "パスワードが見つかりませんでした..."
objExcel.Quit
Set objExcel = Nothing
Wscript.Quit

Sub passUnlock(pass, paslen)
  Dim i
  Dim p
  On Error Resume Next
  If Len(pass) >= paslen Then Exit Sub
  For i = &H20 To &H7F
    If Len(pass & Chr(i)) <> paslen Then
      Call passUnlock(pass & Chr(i), paslen)
    Else
      p = Chr(i)
      Wscript.Echo pass & p
      Err.Clear
      objExcel.Workbooks.Open filename, 0, false, 5, pass & p
      If Err.Number = 0 Then
        Wscript.Echo "パスワードを解除しました。[ " & pass & p & " ]" & vbCrLf & "必ず何かに書き写してください"
        filename = MsgBox("パスワードを解除しました。[ " & pass & p & " ]", vbInformation)
        objExcel.Visible = true
        Wscript.Quit
      ElseIf Err.Number <> 1004 Then
        Wscript.Echo "予期しないエラーが発生しました。[ " & Err.Description & " ]"
        filename = MsgBox("予期しないエラーが発生しました。[ " & Err.Number & " ] " & Err.Description , vbCritical)
        objExcel.Quit
        Set objExcel = Nothing
        Wscript.Quit
      End If
    End If
  Next
End Sub


Excelunlock.bat 実行用バッチファイル
@Echo OFF
Cscript ExcelUnlock.vbs
Pause
まこ | 開発 | 11:30 | comments(3) | trackbacks(0) |
スポンサーサイト
スポンサードリンク | - | 11:30 | - | - |
Comment
すみません、

追加したファイル形式は、「xlsx」とxlsm です。

コメ汚し、失礼しました;;

posted by おさる ,2016/01/05 7:17 PM

ベクターなどでフリーソフトを探したのですが見つからず、自分でマクロを作ろうと始めてみましたが、めちゃムズカシく、再びネットサーフィンして、こちらにたどり着きました。

選択するファイル形式に xisx、xlsmを追加し、利用させていただいております。
今、裏で動いてますが、どのくらいかかるやら;;

でも、とっても助かりました。
また勉強になりました。
ありがとうございました。

posted by おさる ,2016/01/05 7:13 PM

貴殿のスクリプトを使って、パスワード解除を試みました。記憶を頼りに条件を絞ったとはいえ長期戦を覚悟しました。
…が、運良く総当たりの最初に近かったためあっさりと解けてしまいました。

この場をお借りしてお礼申し上げます。

posted by IT志望者 ,2010/10/03 12:58 PM










Trackback
URL: