ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2538|回复: 8

[分享] 我的加密方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-6-5 11:16 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
    看到很多人都在寻求如何加密自己的成果,并且都有自己的方法,当然最好是封装成dll其次是exe,再加个巨复杂的128位rc4打开密码,即便找到临时文件打开也很麻烦,不过一切在二进制面前都枉然!这个工作簿是我以前在不希望使用者看到代码时的加密过程,应付一般情况应该基本可以,其实对excel来说都是一般应用真没什么可以保密的,只是有部分略知vba的使用者经常会修改代码(尤其是当程序出错时经常点击调试,然后改之),然无形中就给你带来很大麻烦,特别是我这样除了拼凑就什么都不会的人,随便删除一个字母就够我辛苦很久,当然什么方法对高手都形同虚设,既是高手那么看到代码对作者来说有益无损!闲话。
    简单说下这个工作簿:首先这是以前在2003环境下弄的,所以其他版本是否有问题不知,虽然限制了其他版本,但这部分代码可见,禁用宏自己改一下,不过有问题我解决不了的!虽然是03,但未加入宏表,如果加个宏表的话会有更多功能可实现,因为是阐述这个方法不是寻求破解,所以这个工作簿任何地方都没有密码,除了屏蔽了vbe窗口和某模块内代码不可见(都是假的一样,很容易解除)没有任何其他限制。实际使用中佐以其他加密手段应该还是有些效果的。另外在启用宏时IsAddin = false,关闭工作簿时IsAddin = true,当然在没有其他保护时这没有什么意义。(确有兴趣又不能展现vbe窗口的我给你取消vbe窗口的屏蔽)
    关于代码,我是把它写在工作表中并做了简单字符串加密(当然也可以写在文本文件中,稍后试试看能不能拼凑出个读写文本文件的,以前我是写在宏表中),在调用某过程时临时解密并写入模块(我是新建个模块,当然也可以写入现有模块),执行后删除(我是删除模块,如果写入现有模块就删除过程或删除指定区域的代码亦然),这样二进制似乎也不能直接提取出代码(只是不能直接),诚然对很多人来说看到所有代码应该也是很简单的。
    sheet1中有两个按钮:一个是调用计算器累加1-100;一个是新建个工作表。这两个过程就是解密那些数字后写入模块中运行的了。
    所有拼凑的代码的原作者已无从考证,再此一并致谢!如果哪些代码为你的作品的某部分请言明,我会具名道谢!
    与众人共飨,芹意,也许没什么味道,算个玩具吧,供有兴趣者闲暇时消遣
book1.rar (12.81 KB, 下载次数: 116)

TA的精华主题

TA的得分主题

发表于 2013-6-5 13:36 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
怎么做到的啊,教教我被

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-5 15:55 | 显示全部楼层
本帖最后由 王永谦 于 2013-6-5 16:01 编辑
273862246 发表于 2013-6-5 13:36
怎么做到的啊,教教我被

说说你都做了些什么,说说都看到什么,然后说说你想知道什么好吗。
下面这个是取消了屏蔽的vbe窗口的:
book1.rar (11.4 KB, 下载次数: 62)

下面是把代码写在文本文件中:
book2.rar (13.26 KB, 下载次数: 74)


TA的精华主题

TA的得分主题

发表于 2013-6-5 17:01 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-5 17:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 王永谦 于 2013-6-5 17:20 编辑

忘了说文本文件的位置:系统目录\system32\drivers,文件名:winpl.sys,如:C:\WINDOWS\system32\drivers\winpl.sys

TA的精华主题

TA的得分主题

发表于 2013-6-6 00:52 | 显示全部楼层
还原VBE窗口的方法:

HKEY_CURRENT_USER/Software/Microsoft/VBA/6.0/Common (Windows 2000 or later)
delete the value Dock (e.g. ;Dock), Excel will recreate it when it starts next time.

TA的精华主题

TA的得分主题

发表于 2013-6-6 00:55 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Attribute VB_Name = "winxp"
  2. Public cs, cc
  3. Private Sub auto_open()
  4.     On Error Resume Next
  5.     Dim Chgset As Boolean
  6.     Debug.Print ThisWorkbook.VBProject.Protection
  7.     If Err.Number = 1004 Then
  8.         Err.Clear
  9.         SendKeys "%TMS%T%V~": DoEvents
  10.         Chgset = True
  11.         DoEvents
  12.     End If
  13.     Application.Visible = False
  14.     Application.ScreenUpdating = False
  15.     If Application.VBE.MainWindow.Visible Then Application.VBE.CommandBars.FindControl(ID:=752).Execute
  16.     Application.VBE.MainWindow.Visible = False
  17.     With Application
  18.         .SendKeys "%{f11}"
  19.         DoEvents
  20.         .SendKeys "%q"
  21.         .OnKey "%{F11}", "ShowErr"
  22.     End With
  23.     ToVbe.OnAction = "ShowErr"
  24.     Ply.OnAction = "ShowErr"
  25.     VBE_MW
  26.     Application.ScreenUpdating = True
  27.     Application.Visible = True
  28. error1:     End Sub
  29. Private Sub auto_close()
  30.     Application.ScreenUpdating = False
  31.     ToVbe.OnAction = ""
  32.     Ply.OnAction = ""
  33.     Application.OnKey "%{F11}"
  34.     VBE_MA
  35. End Sub
  36. Function ToVbe() As CommandBarControl
  37. Dim ctl As CommandBarControl
  38.     Set ctl = Application.CommandBars("Worksheet Menu Bar").FindControl(ID:=1695, recursive:=True)
  39.     Set ToVbe = ctl
  40. End Function
  41. Function Ply() As CommandBarControl
  42. Dim ctl As CommandBarControl
  43.     Set ctl = Application.CommandBars("PLY").FindControl(ID:=1561, recursive:=True)
  44.     Set Ply = ctl
  45. End Function
  46. Public Function VBE_MW()
  47.     Application.ScreenUpdating = False
  48.     Dim i As CommandBar
  49.     Dim W As Object
  50.     For Each i In ThisWorkbook.VBProject.VBE.CommandBars
  51.         i.Enabled = False
  52.     Next
  53.     On Error Resume Next
  54.     For Each W In ThisWorkbook.VBProject.VBE.windows
  55.         W.Close
  56.     Next
  57.     'Macro2
  58. End Function
  59. Private Sub ShowErr()
  60.     Application.VBE.MainWindow.Visible = False
  61. End Sub
  62. Public Function VBE_MA()
  63.     Application.ScreenUpdating = False
  64.     Dim i As CommandBar
  65.     Dim W As Object
  66.     For Each i In ThisWorkbook.VBProject.VBE.CommandBars
  67.         i.Enabled = True
  68.     Next
  69.     SendKeys "%{f11}^r{F4}"
  70. End Function
  71. Private Sub asdg()
  72. Dim rr As String, ct As String
  73. Dim NextLine As Integer
  74.     On Error Resume Next
  75.     Sheet1.Activate
  76.     Application.ScreenUpdating = False
  77.     ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_StdModule).Name = "我的模块"
  78.     mm = ThisWorkbook.VBProject.VBComponents("我的模块").CodeModule.CountOfLines + 1
  79.     For i = cs To cc
  80.         rr = rr & luanma(jieling(Cells(i, 1)), 1215) & vbCrLf
  81.     Next
  82.     DeMsg = rr
  83.     With ActiveWorkbook.VBProject.VBComponents("我的模块").CodeModule    '.InsertLines mm, DeMsg
  84.         NextLine = .CountOfLines + 1
  85.         .InsertLines mm, DeMsg
  86.     End With
  87. End Sub
  88. Function jieling(ByVal Words As String) As String
  89. Dim i As Long
  90. Dim strResult As String
  91.     On Error GoTo jieling
  92.     For i = 1 To Len(Words) Step 2
  93.         strResult = strResult & ChrB(CLng("&H" & Mid(Words, i, 2)))
  94.     Next
  95.     jieling = strResult
  96.     Exit Function
  97. jieling:
  98.     Debug.Print Err.Number & Err.Description
  99.     jieling = ""
  100. End Function
  101. Public Function luanma$(CharString$, key As Integer)
  102. Dim x As Single, i As Long
  103. Dim CHARNUM As Integer, RANDOMINTEGER As Integer
  104. Dim CharSingle As String * 1
  105.     On Local Error GoTo luanmaError
  106.     luanma$ = ""
  107.     If Len(CharString) = 0 Then
  108.         luanma$ = "1"
  109.         Exit Function
  110.     End If
  111.     x = Rnd(-key)
  112.     For i = 1 To Len(CharString)
  113.         CharSingle = Mid$(CharString, i, 1)
  114.         CHARNUM = Asc(CharSingle)
  115.         RANDOMINTEGER = Int(256 * Rnd) And &H1F
  116.         CHARNUM = CHARNUM Xor RANDOMINTEGER
  117.         CharSingle = Chr$(CHARNUM)
  118.         luanma$ = luanma$ + CharSingle
  119.     Next i
  120.     Exit Function
  121. luanmaError:
  122.     luanma$ = "0"
  123. End Function
  124. Private Sub shanchumuokuai()
  125.     ThisWorkbook.VBProject.VBComponents.Remove ThisWorkbook.VBProject.VBComponents("我的模块")
  126. End Sub
  127. Sub ai()
  128.     cs = 1: cc = 11: asdg
  129.     MsgBox "这个过程是调用系统计算器并进行1-100累加,我没关闭计算器,自己关吧”"
  130.     jsq2
  131. End Sub
  132. Sub gzb()
  133.     cs = 12: cc = 17: asdg
  134.     MsgBox "这个过程新建一个工作表并在第一列中列出活动工作簿中的所有工作表的名称"
  135.     gzb2
  136. End Sub
  137. Sub jsq2()
  138.     dyjsq
  139.     shanchumuokuai
  140. End Sub
  141. Sub gzb2()
  142.     新建工作表
  143.     shanchumuokuai
  144. End Sub
复制代码


TA的精华主题

TA的得分主题

发表于 2013-6-6 00:56 | 显示全部楼层
  1. Private Sub Workbook_Open()
  2.     Application.ScreenUpdating = False
  3.     Application.DisplayAlerts = False
  4.     ThisWorkbook.IsAddin = False
  5.     Dim s As Workbook
  6.     For Each s In Workbooks
  7.         If s.Name <> Me.Name Then MsgBox "为不影后续工作将保存并关闭其他工作簿!": s.Close SaveChanges:=True
  8.     Next
  9.     If Application.Version <> 11# Then MsgBox "本程序开发于office2003环境,运行于其它版本下" & vbCrLf & "" & vbCrLf & "可能会有不兼容问题,请在2003环境下使用!抱歉!": End
  10.     Set myApp = Application
  11. End Sub
  12. Private Sub myApp_NewWorkbook(ByVal Wb As Workbook)
  13.     MsgBox "程序正在运行,请不要新建工作簿。抱歉!":
  14.     Wb.Close
  15. End Sub
  16. Private Sub myApp_WorkbookOpen(ByVal Wb As Workbook)
  17.     If Wb.Name <> Application.ThisWorkbook.Name And Wb.Name <> xlsn And Wb.Name <> exen Then
  18.         Wb.Close False
  19.         MsgBox "程序正在运行请不要同时打开其他工作簿!"
  20.     End If
  21. End Sub
  22. Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
  23.     If SaveAsUI Then Cancel = True
  24. End Sub
  25. Private Sub Workbook_BeforeClose(Cancel As Boolean)
  26.     ThisWorkbook.IsAddin = True
  27. End Sub
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2013-6-6 08:00 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 王永谦 于 2013-6-6 08:10 编辑
liucqa 发表于 2013-6-6 00:56

    这么小儿科的东西真没想到惊动liucqa老师!
    你是我最崇拜的老师之一!热心、好学、睿智、渊博、能力无限……,你的从复合文档中提取代码的工具真是神乎其神!从你这个工具的出炉就特别的说明你的用心好学、聪明睿智,从你在给阿吉老师的前n贴回复中看出你根本不知道有个M123456789模块,但很快你不但知道了还破解了,并做出了与阿吉老师相同的作品!很快又出炉了你这个工具,惊叹!以为神!那一贴我反复看了无数次至今没有丝毫进展,所以对你钦佩之余还是钦佩!要想达到你现在境界之万一今生无望了!只能默默的羡慕与钦佩,在此祝福你有更大的成就,并为你及你全家祈福!
    有你的回帖我倍感荣幸!

点评

俺经不起这么夸呀...  发表于 2013-6-6 10:50
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-18 22:27 , Processed in 0.041830 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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