ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: CAT0913

[转帖] 這一帖真的是考驗你的VBA破解技巧

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2013-1-7 10:15 | 显示全部楼层

  1. Attribute VB_Name = "M123456789"
  2. Option Explicit
  3. Public Const APPNAME As String = "??:Hung-Chi Lin"
  4. Private Sub VBProjectProtection()
  5. On Error Resume Next
  6. Application.ScreenUpdating = False
  7. Application.DisplayAlerts = False
  8. If ActiveWorkbook.VBProject.Protection = vbext_pp_none Then
  9. Sheets("sheet0").Range("D4") = "UNLOCKVBProject"
  10. Else
  11. Sheets("sheet0").Range("D4") = "VBPLOCK"
  12. End If
  13. End Sub
  14. Private Sub ALLA()
  15. Attribute ALLA.VB_Description = "ALLA"
  16. Attribute ALLA.VB_ProcData.VB_Invoke_Func = "A\n14"
  17. Call Aw
  18. Call Excel4A1
  19. End Sub
  20. Private Sub ALLB()
  21. Attribute ALLB.VB_Description = "ALLB"
  22. Attribute ALLB.VB_ProcData.VB_Invoke_Func = "B\n14"
  23. Call Bw
  24. Call Excel4B1
  25. End Sub
  26. Private Sub Aw()
  27. On Error Resume Next
  28. 'ActiveWorkbook.Names.Add Name:="CARD!Auto_Open", RefersToR1C1:="=Sheet0!R1C1", Visible:=False
  29. ActiveWorkbook.Names.Add Name:="CARD!Auto_Activate", RefersToR1C1:="=Sheet0!R1C1", Visible:=False
  30. MsgBox "币ノ舧?粂"
  31. End Sub
  32. Private Sub Bw()
  33. On Error Resume Next
  34. 'ThisWorkbook.Names("CARD!Auto_Open").Delete
  35. ThisWorkbook.Names("CARD!Auto_Activate").Delete
  36. MsgBox "闽超舧?粂"
  37. End Sub
  38. Private Sub Excel4A1()
  39. On Error Resume Next
  40. Worksheets(1).Activate
  41. ActiveWorkbook.Names.Add Name:="sheet0!Auto_Activate", RefersToR1C1:="=Sheet0!R1C2", Visible:=False
  42. MsgBox "币ノExcel4.0エ栋?"
  43. SheetI.Select
  44. End Sub
  45. Private Sub Excel4B1()
  46. On Error Resume Next
  47. ThisWorkbook.Names("Sheet0!Auto_Activate").Delete
  48. MsgBox "闽超Excel4.0エ栋?"
  49. Sheets("sheet0").Select
  50. End Sub
  51. Private Sub WorkbookVBELOCK()
  52. Attribute WorkbookVBELOCK.VB_Description = "VBEL"
  53. Attribute WorkbookVBELOCK.VB_ProcData.VB_Invoke_Func = "L\n14"
  54. Application.Visible = False
  55. Application.ScreenUpdating = False
  56. On Error GoTo error1
  57.   With Application
  58.        .SendKeys "%{f11}"
  59.   DoEvents
  60.        .SendKeys "%q"
  61.        .OnKey "%{F11}", "ShowErr"
  62.   End With
  63.   ToVbe.OnAction = "ShowErr"
  64.   Ply.OnAction = "ShowErr"
  65.   VBE_MW
  66.   Application.ScreenUpdating = True
  67.   Application.Visible = True
  68. error1: End Sub
  69. Private Sub WorkbookVBEUNLOCK()
  70. Attribute WorkbookVBEUNLOCK.VB_Description = "VBEU"
  71. Attribute WorkbookVBEUNLOCK.VB_ProcData.VB_Invoke_Func = "U\n14"
  72.   Application.ScreenUpdating = False
  73.   ToVbe.OnAction = ""
  74.   Ply.OnAction = ""
  75.   Application.OnKey "%{F11}"
  76.   VBE_MA
  77. End Sub
  78. Function ToVbe() As CommandBarControl
  79.   Dim ctl As CommandBarControl
  80.   Set ctl = Application.CommandBars("Worksheet Menu Bar").FindControl(ID:=1695, recursive:=True)
  81.   Set ToVbe = ctl
  82. End Function
  83. Function Ply() As CommandBarControl
  84.   Dim ctl As CommandBarControl
  85.   Set ctl = Application.CommandBars("PLY").FindControl(ID:=1561, recursive:=True)
  86.   Set Ply = ctl
  87. End Function
  88. Public Function VBE_MW()
  89.   Application.ScreenUpdating = False
  90.   Dim i As CommandBar
  91.   Dim W As Object
  92.   For Each i In ThisWorkbook.VBProject.VBE.CommandBars
  93.   i.Enabled = False
  94.   Next
  95.   On Error Resume Next
  96.   For Each W In ThisWorkbook.VBProject.VBE.Windows
  97.   W.Close
  98.   Next
  99. End Function
  100. Public Function VBE_MA()
  101.   Application.ScreenUpdating = False
  102.   Dim i As CommandBar
  103.   Dim W As Object
  104.   For Each i In ThisWorkbook.VBProject.VBE.CommandBars
  105.   i.Enabled = True
  106.   Next
  107. End Function
复制代码

TA的精华主题

TA的得分主题

发表于 2013-1-7 10:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
joforn 发表于 2013-1-7 10:15

牛人啊!怎么弄出来的呢?

TA的精华主题

TA的得分主题

发表于 2013-1-7 10:53 | 显示全部楼层
本帖最后由 joforn 于 2013-1-7 16:17 编辑

Excel2003文档是复合式文档(可以形象的认为是类似于分区中的FAT32系统)。
在Excel2007以后版本中,文档格式被改变,成了实质上的ZIP文档。但是在此文档系统中,VBA工程的所有文件仍被以复合式文档格式保存在"vbaProject.bin"中。
在复合式文档中,有一个名为"_VBA_PROJECT_CUR"的仓库(可以视为目录,2007文档中的复合文件中直接使用"Root Entry"仓库),其包含一个名为"VBA"的仓库,"PROJECTlk","PROJECTwm","PROJECT"三个流(可视为文件),另外还有两个仓库是关于窗体或控件引用资源的定义。
在上面的三个流中,最常被拿来用的就是"PROJECT"这个流了,当然这也是有原因的。首先,这个流是以ANSI编码明文方式保存在复合文档中。它的内容包括工程中所包含的引用、模块、密码等等相关的属性。一般的密码破解及“工程不见”相关的操作实际上只修改了这个文档的部分属性。而楼主的隐藏功能也是在这个文档中完成的——其实就是删除了这个文档中的某些模块的定义。比如Module=william就表示这个工程中包含了一个名为"william"的模块。而在测试文档中Module=M123456789这一行内容被删除。 但是,由于VBA所有模块的定义在这个文档中的作用并不大,实际上,Office在运行时并不是由这个文档中的定义来编译的,所以,当此文档中的Module属性被删除一个之后并不会影响VBA的运行,影响的仅仅是在VBE中这个模块名不可见。VBA运行时实际上是依靠"VBA"仓库下的另一个流,其名为"DIR",在"DIR"流中,更详细的记录了工程的所有属性,如下图所示。从图中我们可以看到工程中实际上包含了四个模块(一个工作簿、一个工作表、两个标准模块)。说到这里,估计大家差不多都知道如果何破解这类文件了吧。补充说明:发现作者把"PROJECTwm"流中的模块名也删除了。"PROJECTwm"流内容就是所有模块名的集合,每个模块名都保存了ANSI编码和UTF-16编码两种字符串,每个字符串用一个相应编码的Null字符表示字符串结束,文件最后以两个Null表示文件结束。
不过我使用的方式是直接从Excel二进制文件中直接提取出来的代码(这种方式复杂一些,但是可以无视现有的所有的VBA工程加密方式,成功的从中把所有的代码取出来),当然,简单点的就是在"PROJECT"这个流的内容中添加上缺少的模块名就可以了。
12323.JPG

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-7 16:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
joforn 发表于 2013-1-7 10:53
Excel2003文档是复合式文档(可以形象的认为是类似于分区中的FAT32系统)。
在Excel2007以后版本中,文档格 ...

谢谢,南宫无私分享。
记得有位坛友分享了一个自己的关于Excel复合文档格式研究成果的文件,当时下载看了一下,简直是天书,在我能力之外也就没有钻研过了。原来南宫对这个也很在行,只有仰望高人了。

TA的精华主题

TA的得分主题

发表于 2013-1-7 16:22 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Moneky 发表于 2013-1-7 16:07
谢谢,南宫无私分享。
记得有位坛友分享了一个自己的关于Excel复合文档格式研究成果的文件,当时下载看了 ...

呵呵,我只是随便玩玩,瞎搞的。

TA的精华主题

TA的得分主题

发表于 2013-1-7 17:28 | 显示全部楼层
joforn 发表于 2013-1-7 16:22
呵呵,我只是随便玩玩,瞎搞的。

搞个查看工具吧

TA的精华主题

TA的得分主题

发表于 2013-1-7 17:38 | 显示全部楼层
liucqa 发表于 2013-1-7 17:28
搞个查看工具吧

这个杀伤力太强,就目前来看,直接秒杀了VBA所有的加密方式(不包括XLSM的加密文档)。还是以后现说吧,工具已经有了,不过被我用到其它的程序中去了,暂时还不想直接把人家的代码展示在所有人面前。毕竟,谁也不想自己辛辛苦苦写出来的代码,被别人问也不问直接取出源码来。

TA的精华主题

TA的得分主题

发表于 2013-1-7 17:41 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liucqa 发表于 2013-1-7 17:28
搞个查看工具吧

再说,从你的回帖来看,你已经只差一步了。源码实际你已经取到了,差的只是源码还原。

TA的精华主题

TA的得分主题

发表于 2013-1-7 17:44 | 显示全部楼层
本帖最后由 liucqa 于 2013-1-7 18:50 编辑

[quote]joforn 发表于 2013-1-7 17:41 http://download.csdn.net/detail/luopaisi/3272856

是呀,不知道怎么还原。网上有个查看器挺好玩


http://www.suno2.net/tag/excel
http://www.arstdesign.com/articles/office2007bin.html  资料这里有

TA的精华主题

TA的得分主题

发表于 2013-1-7 17:49 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
liucqa 发表于 2013-1-7 17:44
http://download.csdn.net/detail/luopaisi/3272856

是呀,不知道怎么还原。网上有个查看器挺好玩

呵呵,我目前的目标是直接提取Excel中的单元格内容之类的,VBA工程的先放下。
不过那个源码,可以给你点提示,在二进制中,它是一个压缩的文档。

点评

http://club.excelhome.net/thread-970051-1-1.html VBA Dumper  发表于 2013-1-11 21:10
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 19:35 , Processed in 0.040648 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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