我自己找到一個office的VBA加密方法,然后再去找一個方法來破解密碼,好像有點自相矛盾啊。
如果excel文件是xls或xlm格式(如果不是請轉化成此種方法),則可使用以下代碼:
-
'移除VBA編碼保護
-
Sub MoveProtect()
-
Dim FileName As String
-
FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla & *.xlsx & *.xlsm),*.xls;*.xla ;*.xlsx ; *.xlsm", , "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 & *.xlsx & *.xlsm),*.xls;*.xla ;*.xlsx ; *.xlsm", , "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