1、加密方式 (轉)
方法一:加保護密碼,可對不一樣的過程加不一樣的密碼
優:方便易行
缺:VBA key幾秒鐘,就將你的密碼替換掉 安全
方法二:
一、用UltraEdit32軟件打開你想保護VBA的excel文件
二、點查找>查找,查找「ID="{」 (不帶兩端引號),注意點選找ASCII字符,會找到形如ID="{143DB7BA-14E4-40FF-BBBF-5C6612F797BE}"
三、將大括號中的數字或字母隨便改一改,而後保存,不影響你軟件的使用,但查看工程時會提示你「工程不能查看」
優:破解的方法中需使用十六進制編輯工具,能防住不會使用該工具的人
缺:加密不方便 工具
2、破解方式
excel2000之前的密碼和VBA密碼很是容易破解,網上有不少直接能夠找出密碼明文的軟件
excel xp之後,微軟改進了VBA保護密碼的加密方式,原來的看VBA密碼的軟件找不到VBA的密碼了,找出VBA保護密碼成爲了一個難題。好像安全了一些,但不久,就出現了破解VBA保護密碼的軟件,它的思路並非找出VBA保護密碼,而是直接用隨機四個字母替換了VBA保護密碼,用這種程序(網上並不難找),一個VBA採用密碼保護的excel文件不到2秒的時間,就可讓你看到VBA源碼。
後來有人對access文件的格式進行了研究,找到了新的加密方法(一樣可用於excel文件)。利用UltraEdit32或其它十六進制編輯工具編輯帶VBA的excel文件中的ID或DPB中的內容。通過這樣處理的VBA會出現,「工程不可查看」的狀態。一樣,也發現把加密VBA後的excel文件中的ID、CMG、DPB以及GC串替換爲空,就會清除VBA保護密碼。(已有同志將該過程作成了excel的加載宏,不用十六進制工具就可)
能夠說excel中的vba源碼毫無安全性,網上也見了一些利用VBA開發的程序,註冊方式也比較先進,但源碼容易看到,寫個註冊程序或乾脆改掉註冊較驗也就毫無做用。excel文件中VBA保護密碼實際毫無做用,徹底無必要設定VBA保護密碼。
因此我認爲,利用VBA開發excel程序只可用於不需盈利的通常用途,不宜用於商用,想開發商用的VBA程序可考慮使用access,access中除了給VBA加密碼外,還能夠將mdb轉換爲mde文件達到保護VBA代碼的做用,而mde文件是將VBA代碼所有編譯後將VBA源碼刪除,因此這仍是比較安全的。
(讓別人看到你商業程序的源碼比破解更讓人不可接受)
寫這段文字時,沒有去研究excel 2007中是否有所改進。 編碼
破解方式網上最多答案的是這樣一段代碼 加密
'移除VBA編碼保護 spa
Sub MoveProtect() excel
Dim FileName As String 開發
FileName = Application.GetOpenFilename("Excel文件(*.xls & *.xla),*.xls;*.xla", , "VBA破解") rem
If FileName = CStr(False) Then 源碼
Exit Sub string
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
可是,親測以後,發現顯示密碼破解成功,vba模塊不見了……
1. Backup the xls file
2. Using a HEX editor, locate the DPB=... part
3. Change the DPB=... string to DPx=...
4. Open the xls file in Excel
5. Open the VBA editor (ALT+F11)
6. the magic: Excel discovers an invalid key (DPx) and asks whether you want to continue loading the project (basically ignoring the protection)
7. You will be able to overwrite the password, so change it to something you can remember
8. Save the xls file*
9. Close and reopen the document and work your VBA magic!
一樣,該方法只適合於2003版,07或10版本要另存爲03版本!