本文介紹在 Excel 的多個(gè)文件版本中破解各類密碼,包含文件的查看、只讀密碼,工作表、工作簿的保護(hù)密碼,以及 VBA 工程密碼。內(nèi)容非常全面,建議你收藏。文件作者加密碼是防止數(shù)據(jù)被查看,修改,所以,文件密碼破解僅供于學(xué)習(xí)參考,請(qǐng)尊重作者版權(quán),不要斷人財(cái)路。
下面的有些操作不易撤銷,為了防止文件被破壞,破解密碼前建議備份原文件。
1. 文件查看、只讀密碼破解
Excel 文件的查看、只讀密碼目前只能采用暴力破解,就是用成千上萬(wàn)個(gè)密碼一個(gè)一個(gè)去試。非常消耗資源,取決于你密碼的長(zhǎng)度和復(fù)雜程度,有時(shí)也未必能破解成功。目前我還沒(méi)有找到比較好的免費(fèi)工具去破解此類密碼,有一定及時(shí)推薦。在這里我介紹兩個(gè)網(wǎng)站可以破解此類密碼,付費(fèi)的。
http://www.password-online.com/index.php
http://www.decryptum.com/
上傳文件前請(qǐng)檢查文件是否含比較私密的內(nèi)容。
2. 工作表、工作簿保護(hù)密碼破解
此密碼主要用于防止數(shù)據(jù)表的表格、格式、內(nèi)容、公式等被修改刪除。當(dāng)工作表的單元格被保護(hù)時(shí),試圖編輯或刪除那些單元格時(shí)你會(huì)收到提示 “試圖更改的單元格或圖表在受保護(hù)的工作表中” 告訴你編輯失敗。工作簿被保護(hù)時(shí),則不能新增、刪除工作表。此類密碼的破解方法因文件的后綴而異:
1) 后綴為 .xls 的文件
用 Excel 打開(kāi)工作簿,然后按 Alt + F11 進(jìn)入 “開(kāi)發(fā)工具” 界面,如下圖:
在左邊的工程欄(Project)中選定節(jié)點(diǎn) “ThisWorkbook”,雙擊左鍵,然后把下面的代碼復(fù)制到右邊的代碼編輯框中:
Public Sub 工作表保護(hù)密碼破解()
Const DBLSPACE As String = vbNewLine & vbNewLine
Const AUTHORS As String = DBLSPACE & vbNewLine & _
"作者:McCormick JE McGimpsey "
Const HEADER As String = "工作表保護(hù)密碼破解"
Const VERSION As String = DBLSPACE & "版本 Version 1.1.1"
Const REPBACK As String = DBLSPACE & ""
Const ZHENGLI As String = DBLSPACE & ""
Const ALLCLEAR As String = DBLSPACE & "該工作簿中的工作表密碼保護(hù)已全部解除!!" & DBLSPACE & "請(qǐng)記得另保存" _
& DBLSPACE & "注意:不要用在不當(dāng)?shù)胤?,要尊重他人的勞?dòng)成果!"
Const MSGNOPWORDS1 As String = "該文件工作表中沒(méi)有加密"
Const MSGNOPWORDS2 As String = "該文件工作表中沒(méi)有加密2"
Const MSGTAKETIME As String = "解密需花費(fèi)一定時(shí)間,請(qǐng)耐心等候!" & DBLSPACE & "按確定開(kāi)始破解!"
Const MSGPWORDFOUND1 As String = "密碼重新組合為:" & DBLSPACE & "$$" & DBLSPACE & _
"如果該文件工作表有不同密碼,將搜索下一組密碼并修改清除"
Const MSGPWORDFOUND2 As String = "密碼重新組合為:" & DBLSPACE & "$$" & DBLSPACE & _
"如果該文件工作表有不同密碼,將搜索下一組密碼并解除"
Const MSGONLYONE As String = "確保為唯一的?"
Dim w1 As Worksheet, w2 As Worksheet
Dim i As Integer, j As Integer, k As Integer, l As Integer
Dim m As Integer, n As Integer, i1 As Integer, i2 As Integer
Dim i3 As Integer, i4 As Integer, i5 As Integer, i6 As Integer
Dim PWord1 As String
Dim ShTag As Boolean, WinTag As Boolean
Application.ScreenUpdating = False
With ActiveWorkbook
WinTag = .ProtectStructure Or .ProtectWindows
End With
ShTag = False
For Each w1 In Worksheets
ShTag = ShTag Or w1.ProtectContents
Next w1
If Not ShTag And Not WinTag Then
MsgBox MSGNOPWORDS1, vbInformation, HEADER
Exit Sub
End If
MsgBox MSGTAKETIME, vbInformation, HEADER
If Not WinTag Then
Else
On Error Resume Next
Do ''dummy do loop
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
With ActiveWorkbook
.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & _
Chr(i3) & Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If .ProtectStructure = False And _
.ProtectWindows = False Then
PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _
Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
MsgBox Application.Substitute(MSGPWORDFOUND1, _
"$$", PWord1), vbInformation, HEADER
Exit Do ''Bypass all for...nexts
End If
End With
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
Loop Until True
On Error GoTo 0
End If
If WinTag And Not ShTag Then
MsgBox MSGONLYONE, vbInformation, HEADER
Exit Sub
End If
On Error Resume Next
For Each w1 In Worksheets
''Attempt clearance with PWord1
w1.Unprotect PWord1
Next w1
On Error GoTo 0
ShTag = False
For Each w1 In Worksheets
''Checks for all clear ShTag triggered to 1 if not.
ShTag = ShTag Or w1.ProtectContents
Next w1
If ShTag Then
For Each w1 In Worksheets
With w1
If .ProtectContents Then
On Error Resume Next
Do ''Dummy do loop
For i = 65 To 66: For j = 65 To 66: For k = 65 To 66
For l = 65 To 66: For m = 65 To 66: For i1 = 65 To 66
For i2 = 65 To 66: For i3 = 65 To 66: For i4 = 65 To 66
For i5 = 65 To 66: For i6 = 65 To 66: For n = 32 To 126
.Unprotect Chr(i) & Chr(j) & Chr(k) & _
Chr(l) & Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
If Not .ProtectContents Then
PWord1 = Chr(i) & Chr(j) & Chr(k) & Chr(l) & _
Chr(m) & Chr(i1) & Chr(i2) & Chr(i3) & _
Chr(i4) & Chr(i5) & Chr(i6) & Chr(n)
MsgBox Application.Substitute(MSGPWORDFOUND2, _
"$$", PWord1), vbInformation, HEADER
''leverage finding Pword by trying on other sheets
For Each w2 In Worksheets
w2.Unprotect PWord1
Next w2
Exit Do ''Bypass all for...nexts
End If
Next: Next: Next: Next: Next: Next
Next: Next: Next: Next: Next: Next
Loop Until True
On Error GoTo 0
End If
End With
Next w1
End If
MsgBox ALLCLEAR & AUTHORS & VERSION & REPBACK & ZHENGLI, vbInformation, HEADER
End Sub
完成后如下圖:
然后點(diǎn)擊上圖的小三角按鈕(如藍(lán)色圓圈標(biāo)注)執(zhí)行代碼破解密碼。如果 Excel 提示宏被禁用而導(dǎo)致代碼無(wú)法運(yùn)行時(shí),先在文件菜單中保存文件,然后關(guān)閉 Excel。重新打開(kāi) Excel 并啟用宏,按 Alt + F11 回到此界面再點(diǎn)擊小三角按鈕重新進(jìn)行密碼破解。
破解期間會(huì)出現(xiàn)兩次提示的對(duì)話框,都選擇 “確認(rèn)”。密碼破解完畢之后會(huì)出現(xiàn)如下窗口:
這說(shuō)明工作表或工作簿的保護(hù)密碼已被成功清除。最后按 Alt + F11 回到 “開(kāi)發(fā)工具” 界面,刪除 “ThisWorkbook” 節(jié)點(diǎn)中的代碼,保存工作表。
后綴為 .xlsx 或 .xlsm 的文件
在這里以 .xlsx 文件為例講解,首先把文件的后綴從 .xlsx 修改成 .rar 或 .zip,然后使用壓縮軟件,例如 WinRar, 7-Zip 打開(kāi)壓縮文件。
工作表被鎖定:進(jìn)入文件夾 xl\worksheets,找到被鎖定的工作表,例如 sheet1,如下圖:
選中此文件 “sheet1.xml” ,右擊,選擇記事本編輯。在記事本中查找字符串 <sheetProtection,找到后刪除從 <sheetProtection 到 /> 的內(nèi)容,如下圖藍(lán)色標(biāo)記:
工作簿被鎖定:進(jìn)入文件夾 xl,找到文件 “workbook.xml”。選定右擊,選擇記事本編輯,在記事本中查找字符串 <workbookProtection,找到后刪除從<workbookProtection到/>的內(nèi)容,如下圖藍(lán)色標(biāo)記:
刪除完成后在記事本中選擇 “文件” – “保存” 選項(xiàng)保存此文件。在記事本保存完成后壓縮軟件會(huì)提示你此文件已更改,是否更新?然后選擇 “是”。
關(guān)閉壓縮軟件,把文件后綴從 .zip 或 .rar 修改回 .xlsx。用 Excel 打開(kāi) .xlsx 文件,此時(shí)你可以發(fā)現(xiàn)工作表或者工作簿的保護(hù)密碼已被清除。
3. VBA 工程密碼破解
VBA 工程密碼也就是宏的保護(hù)密碼,它的破解也因文件的后綴而異:
1) 后綴為 .xls 的文件
打開(kāi) Excel,新建一個(gè)文檔,按 Alt + F11 進(jìn)入 “開(kāi)發(fā)工具” 界面,如下圖:
在左邊的工程欄(Project)中選定節(jié)點(diǎn) “ThisWorkbook”,雙擊左鍵,然后把下面的代碼復(fù)制到右邊的代碼編輯框中:
Private Sub VBAPassword() ''你要解保護(hù)的Excel文件路徑
Filename = Application.GetOpenFilename("Excel文件(*.xls & *.xla & *.xlt),*.xls;*.xla;*.xlt", , "VBA破解")
If Dir(Filename) = "" Then
MsgBox "沒(méi)找到相關(guān)文件,清重新設(shè)置。"
Exit Sub
Else
FileCopy Filename, Filename & ".bak" ''備份文件。
End If
Dim GetData As String * 5
Open Filename For Binary As #1
Dim CMGs As Long
Dim DPBo As Long
For i = 1 To LOF(1)
Get #1, i, GetData
If GetData = "CMG=""" Then CMGs = i
If GetData = "[Host" Then DPBo = i - 2: Exit For
Next
If CMGs = 0 Then
MsgBox "請(qǐng)先對(duì)VBA編碼設(shè)置一個(gè)保護(hù)密碼...", 32, "提示"
Exit Sub
End If
Dim St As String * 2
Dim s20 As String * 1
''取得一個(gè)0D0A十六進(jìn)制字串
Get #1, CMGs - 2, St
''取得一個(gè)20十六制字串
Get #1, DPBo + 16, s20
''替換加密部份機(jī)碼
For i = CMGs To DPBo Step 2
Put #1, i, St
Next
''加入不配對(duì)符號(hào)
If (DPBo - CMGs) Mod 2 <> 0 Then
Put #1, DPBo + 1, s20
End If
MsgBox "文件解密成功......", 32, "提示"
Close #1
End Sub
完成后如下圖:
點(diǎn)擊上圖的小三角按鈕(如藍(lán)色圓圈標(biāo)注)執(zhí)行代碼。在系統(tǒng)彈出的 “文件選擇對(duì)話框” 中選擇你要破解密碼的 Excel 文件,選中后點(diǎn)擊 “打開(kāi)”。一會(huì) Excel 提示 “文件解密成功”,這代表選定文件的 VBA 工程密碼已被清除。
2) 后綴為 .xlsm 的文件
把文件的后綴從 .xlsm 修改成 .rar 或者 .zip,然后用壓縮軟件解壓這個(gè)壓縮文件。打開(kāi)解壓后的文件,在文件夾 xl 中找到文件 vbaProject.bin,如下圖:
用二進(jìn)制文件編輯軟件,例如 XVI32 (可直接下載使用,免安裝) 打開(kāi) vbaProject.bin 文件,然后在其中查找 DPB,如下圖:
把 DPB 替換成 DPx, 如下:
保存文件,重新壓縮,把文件的后綴重新修改回 .xlsm。用 Excel 打開(kāi)文檔,期間出現(xiàn)的任何提示都點(diǎn)擊 “是” 或 “確認(rèn)” 忽略它。
按 Alt + F11 進(jìn)入 “開(kāi)發(fā)工具” 界面,在 Tools -> VBAProject Properties 的 Protection 欄重新設(shè)置一個(gè)新的 VBA 工程密碼,然后保存文件,關(guān)閉 Excel。
重新打開(kāi)之后先前的提示不會(huì)再出現(xiàn),用新密碼也可以成功打開(kāi) VBA 工程,VBA 工程密碼重設(shè)成功!
該文章在 2020/5/28 12:18:57 編輯過(guò)