vba宏密码的破解

【vba宏密码的破解】

 

昨天一朋友呼我后发了一excel文件给我说有宏密码,他想看一下代码,请我将密码解出

来,呵呵,研究了一下,很快搞定!

 

方法一:用软件Passware Kit,具体用法见 <http://www.net235.com/post/42.html>

word密码暴力破解,2秒钟不到即得到了密码.

 

方法二:在网上找到一段vba加密解密代码,内容如下,直接移除了密码,也很方便:

 

a:使用UltreEdit之类的十六进制编辑程序打开.XLS文件,在文本模式下查找“[Host

Extender Info]”(也可只查Host),切换到十六进制模式,将前面的“DBP=

"XXXXXXX...”的DBP关键字改成CBP,将“GC="XXXXXXX...”的GC关键字改成CC,使

Excel不能识别此二项!存盘即可!!!

  用Excel打开此文件,忽略错误提示,进入VBA编辑器,嘿嘿,密码没有了!做一次

存盘操作即可修复错误提示。

    Access的VBA工程密码采用无法破解!

 

-------------

 

b:'1>一段极好的VBA保护密码破解程序测试WIN98+OFFICE97破解率100%

'2>用以下代码对VBA加密保护后用offkey 6.5-7.0及Advanced VBA pASSWORD Recovery

专业版均无法破解出保护程式码的密码

 

'移除VBA编码保护

Sub MoveProtect()

Dim FileName As String

FileName = Application.GetOpenFilename("Excel文件(*.xls &

*.xla),*.xls;*.xla", , "VBA破解")

If FileName = CStr(False) Then

     Exit Sub

Else

     VBAPassword FileName, False

End If

End Sub

 

'设置VBA编码保护

Sub SetProtect()

Dim FileName As String

FileName = Application.GetOpenFilename("Excel文件(*.xls &

*.xla),*.xls;*.xla", , "VBA破解")

If FileName = CStr(False) Then

     Exit Sub

Else

     VBAPassword FileName, True

End If

End Sub

 

Private Function VBAPassword(FileName As String, Optional Protect As Boolean

= False)

    If Dir(FileName) = "" Then

       Exit Function

    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 Function

    End If

 

    If Protect = False Then

       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, "提示"

    Else

       Dim MMs As String * 5

       MMs = "DPB="""

       Put #1, CMGs, MMs

       MsgBox "对文件特殊加密成功......", 32, "提示"

    End If

    Close #1

End Function

 

****************************************************************************

********************************************************

【如何撤销有密码的工作表保护 】

 

EXCEL工作表编辑资料,设置了工作表保护后,不能对表格进行插入删除操作。如果没

有密码,很简单:工具-选项—工作表保护——撤消工作表保护 就可以了。如果忘记密

码,如下操作: 1/打开文件 

2/工具---宏----录制新宏---输入名字如:a

3/停止录制(这样得到一个空宏) 

4/工具---宏----宏,选a,点编辑按钮 

5/删除窗口中的所有字符(只有几个),替换为下面的内容:(复制下来)

 

Option Explicit

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

6/关闭编辑窗口 

7/工具---宏-----宏,选AllInternalPasswords,运行,确定两次,等2分钟(确实有这么长

时间),再确定.

OK,没有密码了!!  <http://qzone.qq.com/ac/b.gif> 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值