一种采用COM交互机制的VBA加密办法,适用于大部分VBA代码加密

泡泡龙 2017-09-15 01:09:56
一种采用COM交互机制的VBA加密办法,适用于大部分VBA代码加密
http://www.cnblogs.com/Charltsing/p/EncryptVBACode.html

VBA代码加密是个老生常谈的问题,自从本人的VBA Dumper发布之后,在Office层面上做任何加密都已经失去了意义。所以,很多人开始转战VB封装或者升级到VSTO,Delphi等其他语言。但是,对于广大的VBAer来说,重新学一门语言带来的麻烦要远远超过开发VBA程序所带来的收益。所以,是否能有一种办法在不改变VBA代码的情况下,将VBA代码脱离office进行加密呢?

考虑到office支持COM插件,那么是否能够通过外接插件完成VBA代码文件的动态解密,实时插入,实时运行,完毕删除这一系列保护代码的动作呢。这样,VBA代码不会与office文件存在一处,就可以有充分的手段对VBA明文代码进行加密了。

本人在去年开发了VBA智能排版插件Smart Indenter for VBE,那么我就利用这个插件,完成了上述功能。

使用方法很简单:

参考下面的代码调用加密的VBA代码文件即可,支持Sub和Function,默认支持五个参数,支持不定参数。

'密文Function测试
Public Sub SampleEncryptVBA()
Dim oAdd As Object, obj As Variant
Dim modulename$, vbafilefullpath$, ret
'建立VBA动态调用
On Error Resume Next
Set oAdd = GetObject(, "SmartIndenterVBE.Connect")
If Err <> 0 Then
MsgBox "请按Alt-F11进入一次VBE之后再运行宏!"
End
End If
Set obj = oAdd.Instance
Call obj.SetExcelApp(Application)
'要运行的代码文件
vbafilefullpath = ThisWorkbook.Path & Application.PathSeparator & "Encryptedemo.txt"
'RunVBAFunction是运行VBA函数,参数:文件名,文件密钥,文件编码,函数名,函数参数1,函数参数2,函数参数3...(超过五个请使用不定参数)
ret = obj.RunVBAFunction(vbafilefullpath, "abc", True, "ReturnRangeValue", Range("A1"))
MsgBox ret
End Sub


Demo下载

考虑到CSDN喷子多,给个功能说明:
1、 此功能只是VBA加密的一个思路,供大家参考。VBA代码要正确编写,确保不能因为各种弹窗和错误情况中断代码(最简单的办法是加上On Error Resume Next,去掉窗体和MsgBox)
2、 不建议将全部的vba代码都采用动态生成,推荐在部分核心功能上使用。
3、 此功能并非永远不能破解,但它的优点在于将vba代码的加密层面从office转移到了外部,这给保护代码提供了极多的可行性。

...全文
1550 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_40615278 2017-10-13
  • 打赏
  • 举报
回复
直接封装成dll 不就可以了
Joforn 2017-10-09
  • 打赏
  • 举报
回复
好久没登陆了,今天居然找回了密码。 支持一下,万一这软件火了呢?
泡泡龙 2017-09-25
  • 打赏
  • 举报
回复
引用 14 楼 chewinggum 的回复:
为了一个VBA,搞外部DLL加密还加壳?就这样还不如单独写一套程序搞定数据处理了
你肯定是没看懂这个工具的作用: 它是给那些不会vba之外的编程语言的人准备的加密工具。
脆皮大雪糕 2017-09-24
  • 打赏
  • 举报
回复
为了一个VBA,搞外部DLL加密还加壳?就这样还不如单独写一套程序搞定数据处理了
泡泡龙 2017-09-22
  • 打赏
  • 举报
回复
实际上,有能力做反编译的根本就不会用vba做开发。请得起反编译高手的,那费用足够买多少份正版授权了,还需要破解吗? 所以,从技术上,任何加密都能破解,包括我这个。但从社会学角度来看,如果破解成本高于购买正版的成本,那加密就是成功的。
泡泡龙 2017-09-22
  • 打赏
  • 举报
回复
引用 11 楼 chewinggum 的回复:
[quote=引用 10 楼 Chen8013 的回复:] [quote=引用 9 楼 liucqa 的回复:] 嗯,这下你们发现一楼加密工具的作用了吧
你这样也同样不保险。 毕竟你要把代码“还原”后才能执行吧?那么这个时候不就有机会得到代码了? [/quote] 反编译跟踪,在函数的调用处等着函数的返回值即可,反正横竖都要是明文返回来才能执行,总会在内存里出现的。[/quote] 前提是你得能跟踪,现在的壳强度很高的,你可以写个demo文件,然后挨个加壳试试你的反编译跟踪能力。
脆皮大雪糕 2017-09-21
  • 打赏
  • 举报
回复
引用 10 楼 Chen8013 的回复:
[quote=引用 9 楼 liucqa 的回复:] 嗯,这下你们发现一楼加密工具的作用了吧
你这样也同样不保险。 毕竟你要把代码“还原”后才能执行吧?那么这个时候不就有机会得到代码了? [/quote] 反编译跟踪,在函数的调用处等着函数的返回值即可,反正横竖都要是明文返回来才能执行,总会在内存里出现的。
舉杯邀明月 2017-09-21
  • 打赏
  • 举报
回复
引用 9 楼 liucqa 的回复:
嗯,这下你们发现一楼加密工具的作用了吧
你这样也同样不保险。 毕竟你要把代码“还原”后才能执行吧?那么这个时候不就有机会得到代码了?
泡泡龙 2017-09-21
  • 打赏
  • 举报
回复
嗯,这下你们发现一楼加密工具的作用了吧
舉杯邀明月 2017-09-20
  • 打赏
  • 举报
回复
引用 6 楼 chewinggum 的回复:
被刺激了一下好奇心,把xlsm里的VBA加了个密码,然后后缀改为zip解压,找到了vbaProject.bin。居然在这里面直接看到代码明文,我就没明白微软设那个密码是干啥的。代码居然没加密处理。
反正VBA代码,不管2000/2003,还是2007(或更高版本),加密码也只能骗到小白。 稍懂一点儿的人都中以轻松“越过密码”障碍得到源码。
舉杯邀明月 2017-09-20
  • 打赏
  • 举报
回复
引用 6 楼 chewinggum 的回复:
被刺激了一下好奇心,把xlsm里的VBA加了个密码,然后后缀改为zip解压,找到了vbaProject.bin。居然在这里面直接看到代码明文,我就没明白微软设那个密码是干啥的。代码居然没加密处理。
这都被你发现了…………
脆皮大雪糕 2017-09-19
  • 打赏
  • 举报
回复
好奇,去找了一下VBA Dumper,win10+vs2017说.net frame版本太高,没跑起来。不过看了一下sample,那里面的例子VBA没有加密?暂时不知道实际运行效果。
脆皮大雪糕 2017-09-19
  • 打赏
  • 举报
回复
被刺激了一下好奇心,把xlsm里的VBA加了个密码,然后后缀改为zip解压,找到了vbaProject.bin。居然在这里面直接看到代码明文,我就没明白微软设那个密码是干啥的。代码居然没加密处理。
泡泡龙 2017-09-19
  • 打赏
  • 举报
回复
引用 4 楼 chewinggum 的回复:
好奇,去找了一下VBA Dumper,win10+vs2017说.net frame版本太高,没跑起来。不过看了一下sample,那里面的例子VBA没有加密?暂时不知道实际运行效果。
http://www.cnblogs.com/Charltsing/p/DNATools.html 隐藏模块及提取模块都在这个工具里面,但这个工具对一楼的方案不管用。
赵4老师 2017-09-18
  • 打赏
  • 举报
回复
现在是开源时代。 奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中!
舉杯邀明月 2017-09-18
  • 打赏
  • 举报
回复
我就围观一下。
泡泡龙 2017-09-18
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
现在是开源时代。 奉劝楼主不要把有限的生命浪费在无限的加密解密死循环中!
我就知道有喷子

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧