Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 37713|回复: 20

[分享] vba工程密码的加密与破解

  [复制链接]
发表于 2011-7-15 15:13 | 显示全部楼层 |阅读模式
今天在网上学了篇有关vba工程密码的文章,与大家分享

一、Excel“工程不可查看”两种实现方法及破解
   关于Excel宏编程中,要用到一些技巧,如破解Excel宏加密。
        今天我对一个Excel宏编程中进行日期限制进行了破解。
    方法一(共用级锁定)
  1、先对excel档进行一般的vbaproject”工程密码保护。
  2、打开要保护的档,选择∶工具--->保护--->保护并共用活页簿--->以追踪修订方式共用-->输入密码-->保存档。 完成後,当你打开“vbaproject”工程属性时,就将会提示∶“工程不可看!”
  方法二(推荐,破坏型锁定)
  用16进制编辑工具,如winhex、ultraedit-32(可到此下载)等,再历害点的人完全可以用debug命令来做......用以上软体打开excel档,查找定位以下地方∶
id="{00000000-0000-0000-0000-000000000000}"    注∶实际显示不会全部为0
  此时,你只要将其中的位元组随便修改一下即可。保存再打开,就会发现大功告成!
  当然,在修改前最好做好你的文档备份。至於恢复只要将改动过的地方还原即可(只要你记住了呵呵)。
    破解方面,有网友说将CMG=,DPB=和GC=后的"="替换为"."也可以的,我已测试过的确可以,这样更省事点。用16进制编辑工具,如winhex、ultraedit-32打开X.xls文件,查找ID=......, 或到文件尾查看,找到即可。改其中的任意一位,存盘就可达到目的,注意:留有备份文件

  二、EXCEL宏保护密码破解-VBA工程密码破解
  在办公中我们常看到许多用宏(VBA)编写的EXCEL表格,而这些表格就如同一个数据库,我们可以选取或查询很多的数据,一般的这些数据是存放在一个隐藏的工作表中的,那么要如何显示这个隐藏的工作表呢?我们可以打开宏编辑器(ALT+F11),再安CTRL+R打开专案,这时弹出窗会有所有的这个EXCEL的工用表,这时你就可以看看那些是被隐藏的了,很多时候打开是需要密码的,用以下方法解密后,再将解密后文件打开,依同样方法在工作表标签中右键>>检视程式码>>复制以下代码>>按F8执行
  Private Sub CommandButton1_Click()
  Worksheets("这里为你要显示的工作表名称").Visible = True
  End Sub
    关于破解EXCEL VBA工程密码的方法,以下代码非常有效,首先建一新EXCEL文件,在工作表标签处右点>>检视程式码>>复制以下代码>>按F8执行   在弹出窗中选你要你破解工程密码的EXCEL文件   >>再按F5执行即可.
  Private Sub VBAPassword()
'你要解保护的Excel文件路径
Filename = Application.GetOpenFilename("Excel文件(*.xls & *.xla & *.xlt),*.xls;*.xla;*.xlt", , "VBA破解")
If Dir(Filename) = "" Then
MsgBox "没找到相关文件,清重新设置。"
Exit Sub
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 Sub
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, "提示"
End If
Close #1
End Sub
  
如果上面代码不能运行或出错,请用以下代码重试.
  
Private Sub VBAPassword()
'你要解保护的Excel文件路径
Filename = Application.GetOpenFilename("Excel文件(*.xls & *.xla & *.xlt),*.xls;*.xla;*.xlt", , "VBA破解")
  If Dir(Filename) = "" Then
MsgBox "没找到相关文件,清重新设置。"
Exit Sub
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 Sub
End If
  
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, "提示"
  Close #1
End Sub
发表于 2011-7-15 23:15 | 显示全部楼层
回复

使用道具 举报

发表于 2012-5-17 15:16 | 显示全部楼层
回复

使用道具 举报

发表于 2012-7-6 10:54 | 显示全部楼层
学会了,谢谢楼主!
回复

使用道具 举报

发表于 2012-7-6 15:50 | 显示全部楼层
怎么这么好的文章没有人顶?!楼主辛苦了!
回复

使用道具 举报

发表于 2012-7-6 16:16 | 显示全部楼层
真牛,等以后用的时候再验证
回复

使用道具 举报

发表于 2012-7-8 09:40 | 显示全部楼层
看着好像很复杂啊
回复

使用道具 举报

发表于 2012-11-16 15:37 | 显示全部楼层
老大
权限被否定(错误 70) 怎么办呢 ?
回复

使用道具 举报

发表于 2012-12-10 21:25 | 显示全部楼层
呵呵,显示破解成功,实际上一打开出错,打开后模块也消失了,所有的宏全部消失
回复

使用道具 举报

发表于 2013-2-25 14:58 | 显示全部楼层
我的也是这样,显示破解成功,实际上一打开出错,打一开文件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-25 13:49 , Processed in 0.625868 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表