zoukankan      html  css  js  c++  java
  • 破解Excel密码保护文件

    首先打开vba编辑器,输入代码:

    Public Sub AllInternalPasswords()
        ' Breaks worksheet and workbook structure passwords. Bob McCormick
        ' probably originator of base code algorithm modified for coverage
        ' of workbook structure / windows passwords and for multiple passwords
        '
        ' Norman Harker and JE McGimpsey 27-Dec-2002 (Version 1.1)
        ' Modified 2003-Apr-04 by JEM: All msgs to constants, and
        ' eliminate one Exit Sub (Version 1.1.1)
        ' Reveals hashed passwords NOT original passwords
        Const DBLSPACE As String = vbNewLine & vbNewLine
        Const AUTHORS As String = DBLSPACE & vbNewLine & _
        "Adapted from Bob McCormick base code by" & _
        "Norman Harker and JE McGimpsey"
        
        Const HEADER As String = "AllInternalPasswords User Message"
        
        Const VERSION As String = DBLSPACE & "Version 1.1.1 2003-Apr-04"
        
        Const REPBACK As String = DBLSPACE & "Please report failure " & _
        "to the microsoft.public.excel.programming newsgroup."
        
        Const ALLCLEAR As String = DBLSPACE & "The workbook should " & _
        "now be free of all password protection, so make sure you:" & _
        DBLSPACE & "SAVE IT NOW!" & DBLSPACE & "and also" & _
        DBLSPACE & "BACKUP!, BACKUP!!, BACKUP!!!" & _
        DBLSPACE & "Also, remember that the password was " & _
        "put there for a reason. Don't stuff up crucial formulas " & _
        "or data." & DBLSPACE & "Access and use of some data " & _
        "may be an offense. If in doubt, don't."
        Const MSGNOPWORDS1 As String = "There were no passwords on " & _
        "sheets, or workbook structure or windows." & AUTHORS & VERSION
        Const MSGNOPWORDS2 As String = "There was no protection to " & _
        "workbook structure or windows." & DBLSPACE & _
        "Proceeding to unprotect sheets." & AUTHORS & VERSION
        Const MSGTAKETIME As String = "After pressing OK button this " & _
        "will take some time." & DBLSPACE & "Amount of time " & _
        "depends on how many different passwords, the " & _
        "passwords, and your computer's specification." & DBLSPACE & _
        "Just be patient! Make me a coffee!" & AUTHORS & VERSION
        Const MSGPWORDFOUND1 As String = "You had a Worksheet " & _
        "Structure or Windows Password set." & DBLSPACE & _
        "The password found was: " & DBLSPACE & "$$" & DBLSPACE & _
        "Note it down for potential future use in other workbooks by " & _
        "the same person who set this password." & DBLSPACE & _
        "Now to check and clear other passwords." & AUTHORS & VERSION
        Const MSGPWORDFOUND2 As String = "You had a Worksheet " & _
        "password set." & DBLSPACE & "The password found was: " & _
        DBLSPACE & "$$" & DBLSPACE & "Note it down for potential " & _
        "future use in other workbooks by same person who " & _
        "set this password." & DBLSPACE & "Now to check and clear " & _
        "other passwords." & AUTHORS & VERSION
        Const MSGONLYONE As String = "Only structure / windows " & _
        "protected with the password that was just found." & _
        ALLCLEAR & AUTHORS & VERSION & REPBACK
        
        
        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
            MsgBox MSGNOPWORDS2, vbInformation, HEADER
        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, vbInformation, HEADER
    End Sub

    然后执行宏,就可以了。

    此方法仅供爱好和技术,研究采用VBA代码破解Excel有密码保护的文件,Office2003,Office2007,通用此代码。

    [参考来源:http://blog.sina.com.cn/s/blog_446b3d680100i28v.html]

    [另外一种办法:http://www.cr173.com/html/11795_1.html]

  • 相关阅读:
    vs2005发布生成自定义dll
    模拟msn消息提示(右下角)
    通过GridView导出Excel
    在ASP.NET 2.0中直接得到本页面生成的HTML代码
    asp.net实现SQL Server备份还原
    通用分页存储过程算法(.net类实现)
    超链接打开自定义的协议
    GridView技巧2
    sql语句获取本周、本月数据
    asp.net开发自定义控件
  • 原文地址:https://www.cnblogs.com/lovelp/p/5846964.html
Copyright © 2011-2022 走看看