您的位置:首页 > 编程语言 > VB

excel中VBAProject密码破解与保护(转+原)

2013-06-23 12:00 477 查看
一、加密方式 (转)
方法一:加保护密码,可对不同的过程加不同的密码
优:方便易行
缺:VBA key几秒钟,就将你的密码替换掉

方法二:
1、用UltraEdit32软件打开你想保护VBA的excel文件
2、点查找>查找,查找“ID="{” (不带两端引号),注意点选找ASCII字符,会找到形如ID="{143DB7BA-14E4-40FF-BBBF-5C6612F797BE}"
3、将大括号中的数字或字母随便改一改,然后保存,不影响你软件的使用,但查看工程时会提示你“工程不能查看”
优:破解的方法中需使用十六进制编辑工具,能防住不会使用该工具的人
缺:加密不方便

二、破解方式
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编码保护

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

但是,亲测之后,发现显示密码破解成功,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版本!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: