私は内部サポートを提供しており、ユーザーの1人が誤ってExcelファイルにパスワードを設定しました。ユーザーがドキュメントにアクセスできることを確認するために適切なチェックを行いました。 Excelドキュメントからパスワードを削除するための推奨事項。
その価値のために、パスワードはExcelが開いた後、データがExcelで表示される前に表示されます。
私は内部サポートを提供しており、ユーザーの1人が誤ってExcelファイルにパスワードを設定しました。ユーザーがドキュメントにアクセスできることを確認するために適切なチェックを行いました。 Excelドキュメントからパスワードを削除するための推奨事項。
その価値のために、パスワードはExcelが開いた後、データがExcelで表示される前に表示されます。
回答:
ElcomsoftはAdvanced Office Password Recoveryと呼ばれる非常に便利なプログラムを作成します。これは、私が使用した他のどのプログラムよりもうまく機能します。
これを試みる前に、回復しようとしているデータに価値を置くことはおそらく価値があります。ユーザーが最初からドキュメントを再作成できるようにすると、コストが安くなる場合があります(そして、貴重なレッスンを教えます;-))。AOPRは無料ではありません。パスワードは、非常に長い時間がかかる総当たり(文字の可能なすべての組み合わせを試行)でしか解決できない場合があります。
このようなものです、Excel Password Remover XLAアドイン、あなたは何をしていますか?
編集:考えてみてください。そうではないかもしれません-これは、保護されたワークシート/ワークブックからパスワードを削除するために使用されます。
パスワードがわかっている場合は、Excelドキュメントを開いてください。次に、[ファイル]> [名前を付けて保存]をクリックします。[保存]ボタンの左側には、[ツール]というラベルの付いた小さなドロップダウンがあります。それをクリックし、[全般オプション]をクリックします。そこでパスワードエントリを削除し、[OK]をクリックします。ドキュメントを保存します。
パスワードがわからない場合は、VBAを使用して検索できます。推測してみると、ユーザーはおそらく強力なパスワードを使用していないので、ブルートフォースタイプの方法を使用してそれを見つけることができます。以下のコードは大まかなものですが、いくつかのユーザーのドキュメントで、失われた弱いパスワードを見つけるのに役立ちました。1からzまでのASCII文字で任意の長さのパスワードをチェックします。イミディエイトウィンドウから呼び出し、次のように数分待ちます。
? GetPassword("D:\mywkbk.xlsx")
-
Public Function GetPassword(ByRef sFileName As String) As String
On Error Resume Next
Dim pw As String
pw = ""
Do
VBA.Err.Clear
pw = GenerateNextPassword(pw)
Application.Workbooks.Open sFileName, False, True, , pw, pw
VBA.DoEvents
Loop While VBA.Err.Number = 5408
GetPassword = pw
End Function
Public Function GenerateNextPassword(ByRef sCurrentPassword As String) As String
Const MAX_CHAR = 122
Const MIN_CHAR = 49
Dim sCurrentPasswordMax As String
Dim sNewPassword As String
Dim i As Long
sCurrentPasswordMax = String(Len(sCurrentPassword), Chr(MAX_CHAR))
If sCurrentPassword = sCurrentPasswordMax Then
'do an increment that changes the length
sNewPassword = String(Len(sCurrentPassword) + 1, Chr(MIN_CHAR))
Debug.Print Now(); ": "; sNewPassword
ElseIf Asc(Right(sCurrentPassword, 1)) = MAX_CHAR Then
'do an increment that changes multiple characters
sNewPassword = Left(sCurrentPassword, Len(sCurrentPassword) - 1) & Chr(MIN_CHAR)
For i = Len(sCurrentPassword) - 1 To 1 Step -1
sNewPassword = Left(sNewPassword, i - 1) & Chr(Asc(Mid(sNewPassword, i, 1)) + 1) & Mid(sNewPassword, i + 1)
If Asc(Mid(sCurrentPassword, i, 1)) <> MAX_CHAR Then
Exit For
End If
Next i
Else
'do an increment on the rightmost character
sNewPassword = Left(sCurrentPassword, Len(sCurrentPassword) - 1) & Chr(Asc(Right(sCurrentPassword, 1)) + 1)
End If
GenerateNextPassword = sNewPassword
End Function
このSOの記事で説明されているフックアプローチは、常に機能します。
/programming//a/27508116/5757159
Hexエディター、ダウンロード、インストーラーはありません。純粋なVBAソリューションです。
decrypt xls
か何か似ています。