1. 程式人生 > >Excel 各種密碼的破解,大全建議收藏!

Excel 各種密碼的破解,大全建議收藏!

本文介紹在 Excel 的多個檔案版本中破解各類密碼,包含檔案的檢視、只讀密碼,工作表、工作簿的保護密碼,以及 VBA 工程密碼。內容非常全面,建議你收藏。檔案作者加密碼是防止資料被檢視,修改,所以,檔案密碼破解僅供於學習參考,請尊重作者版權,不要斷人財路。
  下面的有些操作不易撤銷,為了防止檔案被破壞,破解密碼前建議備份原檔案。

1. 檔案檢視、只讀密碼破解

  Excel 檔案的檢視、只讀密碼目前只能採用暴力破解,就是用成千上萬個密碼一個一個去試。非常消耗資源,取決於你密碼的長度和複雜程度,有時也未必能破解成功。目前我還沒有找到比較好的免費工具去破解此類密碼,有一定及時推薦。在這裡我介紹兩個網站可以破解此類密碼,付費的。
  

http://www.password-online.com/index.php
  http://www.decryptum.com/
上傳檔案前請檢查檔案是否含比較私密的內容。

2. 工作表、工作簿保護密碼破解

  此密碼主要用於防止資料表的表格、格式、內容、公式等被修改刪除。當工作表的單元格被保護時,試圖編輯或刪除那些單元格時你會收到提示 “試圖更改的單元格或圖表在受保護的工作表中” 告訴你編輯失敗。工作簿被保護時,則不能新增、刪除工作表。此類密碼的破解方法因檔案的字尾而異:

1) 字尾為 .xls 的檔案

  用 Excel 開啟工作簿,然後按 Alt + F11 進入 “開發工具” 介面,如下圖:


  在左邊的工程欄(Project)中選定節點 “ThisWorkbook”,雙擊左鍵,然後把下面的程式碼複製到右邊的程式碼編輯框中

Public Sub 工作表保護密碼破解()
    Const DBLSPACE As String = vbNewLine & vbNewLine
    Const AUTHORS As String = DBLSPACE & vbNewLine & _
        "作者:McCormick   JE McGimpsey "
    Const HEADER As String = "工作表保護密碼破解"
    Const VERSION As String = DBLSPACE & "版本 Version 1.1.1"
    Const REPBACK As String = DBLSPACE & ""
    Const ZHENGLI As String = DBLSPACE & ""
    Const ALLCLEAR As String = DBLSPACE & "該工作簿中的工作表密碼保護已全部解除!!" & DBLSPACE & "請記得另儲存" _
        & DBLSPACE & "注意:不要用在不當地方,要尊重他人的勞動成果!"
    Const MSGNOPWORDS1 As String = "該檔案工作表中沒有加密"
    Const MSGNOPWORDS2 As String = "該檔案工作表中沒有加密2"
    Const MSGTAKETIME As String = "解密需花費一定時間,請耐心等候!" & DBLSPACE & "按確定開始破解!"
    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

完成後如下圖:

  然後點選上圖的小三角按鈕(如藍色圓圈標註)執行程式碼破解密碼。如果 Excel 提示巨集被禁用而導致程式碼無法執行時,先在檔案選單中儲存檔案,然後關閉 Excel。重新開啟 Excel 並啟用巨集,按 Alt + F11 回到此介面再點選小三角按鈕重新進行密碼破解。
破解期間會出現兩次提示的對話方塊,都選擇 “確認”。密碼破解完畢之後會出現如下視窗:

  這說明工作表或工作簿的保護密碼已被成功清除。最後按 Alt + F11 回到 “開發工具” 介面,刪除 “ThisWorkbook” 節點中的程式碼,儲存工作表。

字尾為 .xlsx 或 .xlsm 的檔案

  在這裡以 .xlsx 檔案為例講解,首先把檔案的字尾從 .xlsx 修改成 .rar 或 .zip,然後使用壓縮軟體,例如 WinRar, 7-Zip 開啟壓縮檔案。
工作表被鎖定:進入資料夾 xl\worksheets,找到被鎖定的工作表,例如 sheet1,如下圖:

選中此檔案 “sheet1.xml” ,右擊,選擇記事本編輯。在記事本中查詢字串 <sheetProtection,找到後刪除從 <sheetProtection 到 /> 的內容,如下圖藍色標記:

工作簿被鎖定:進入資料夾 xl,找到檔案 “workbook.xml”。選定右擊,選擇記事本編輯,在記事本中查詢字串 <workbookProtection,找到後刪除從<workbookProtection到/>的內容,如下圖藍色標記:

  刪除完成後在記事本中選擇 “檔案” – “儲存” 選項儲存此檔案。在記事本儲存完成後壓縮軟體會提示你此檔案已更改,是否更新?然後選擇 “是”。
  關閉壓縮軟體,把檔案字尾從 .zip 或 .rar 修改回 .xlsx。用 Excel 開啟 .xlsx 檔案,此時你可以發現工作表或者工作簿的保護密碼已被清除。

3. VBA 工程密碼破解

  VBA 工程密碼也就是巨集的保護密碼,它的破解也因檔案的字尾而異:

1) 字尾為 .xls 的檔案

  開啟 Excel,新建一個文件,按 Alt + F11 進入 “開發工具” 介面,如下圖:

在左邊的工程欄(Project)中選定節點 “ThisWorkbook”,雙擊左鍵,然後把下面的程式碼複製到右邊的程式碼編輯框中

Private Sub VBAPassword()  '你要解保護的Excel檔案路徑
    Filename = Application.GetOpenFilename("Excel檔案(*.xls & *.xla & *.xlt),*.xls;*.xla;*.xlt", , "VBA破解")
    If Dir(Filename) = "" Then
    MsgBox "沒找到相關檔案,清重新設定。"
        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 "請先對VBA編碼設定一個保護密碼...", 32, "提示"
    Exit Sub
    End If
    Dim St As String * 2
    Dim s20 As String * 1
    '取得一個0D0A十六進位制字串
    Get #1, CMGs - 2, St
    '取得一個20十六制字串
    Get #1, DPBo + 16, s20
    '替換加密部份機碼
    For i = CMGs To DPBo Step 2
    Put #1, i, St
    Next
    '加入不配對符號
    If (DPBo - CMGs) Mod 2 <> 0 Then
    Put #1, DPBo + 1, s20
    End If
    MsgBox "檔案解密成功......", 32, "提示"
    Close #1
End Sub

完成後如下圖:

  點選上圖的小三角按鈕(如藍色圓圈標註)執行程式碼。在系統彈出的 “檔案選擇對話方塊” 中選擇你要破解密碼的 Excel 檔案,選中後點擊 “開啟”。一會 Excel 提示 “檔案解密成功”,這代表選定檔案的 VBA 工程密碼已被清除。

2) 字尾為 .xlsm 的檔案

  把檔案的字尾從 .xlsm 修改成 .rar 或者 .zip,然後用壓縮軟體解壓這個壓縮檔案。開啟解壓後的檔案,在資料夾 xl 中找到檔案 vbaProject.bin,如下圖:

  用二進位制檔案編輯軟體,例如 XVI32 (可直接下載使用,免安裝) 開啟 vbaProject.bin 檔案,然後在其中查詢 DPB,如下圖:

把 DPB 替換成 DPx, 如下:

  儲存檔案,重新壓縮,把檔案的字尾重新修改回 .xlsm。用 Excel 開啟文件,期間出現的任何提示都點選 “是” 或 “確認” 忽略它。
  按 Alt + F11 進入 “開發工具” 介面,在 Tools -> VBAProject Properties 的 Protection 欄重新設定一個新的 VBA 工程密碼,然後儲存檔案,關閉 Excel。
  重新開啟之後先前的提示不會再出現,用新密碼也可以成功開啟 VBA 工程。VBA 工程密碼重設成功!

如想對 VBA 工程進行加密建議你用程式碼混淆的辦法,見我的另一篇文章:VBA 工程程式碼加密混淆器,保護你的巨集作品

歡迎評論,如果你喜歡這篇文章, 請記得幫我點贊哦,謝謝!

本文為作者原創文章,未經作者允許不得轉載。