ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[讨论] 【关于EXCEL VBA代码加密的一些思考】

[复制链接]

TA的精华主题

TA的得分主题

发表于 2021-5-13 21:07 | 显示全部楼层 |阅读模式
本帖最后由 大灰狼1976 于 2021-5-14 00:18 编辑

【关于EXCEL VBA代码加密的一些思考】

前言
    这两天在论坛看到VBA代码加密相关的贴子,好像除了通过其他插件或工具来间接处理,没有更好更直接的方法。有一种加密方式称为混淆法,这个不是正式名称只是根据个人理解来命名的,也即通过杂乱的代码使他人无法理解意图。但由于VBA具有可调试以及保留字等特性,边调试边确认本地窗口时,所有看似杂乱无章的部分最终会无所遁形。只要了解一些代码调试的知识,解码只是时间长短的问题。
说明:这里所说的加密并不涉及EXCEL自身提供的工作簿、工作表以及工程加密,而是将明文变成密文的方式。

    那么,到底有没有什么方法,即便让你看到语句结构,即便让你随便调试,也能最大程度防止破解呢,我今天一直在思考这个问题,也做了许多尝试,下面楼层会逐步把我的想法和实现过程呈现出来,想法为主、示例仅为辅助理解。

准备工作
    主楼先放上一个简单的字符串加密程序吧,后面会用到,原理很简单,由于用了Xor,加密和解密是用了同一个函数,不限密码长度及符号类型,由于此贴的重点不是这个加密程序,所以目前加密处理只过滤一遍,实际应用中可根据需要增加过滤次数及交织层次以增加难度。
PS:注意看代码里面字节(Byte)数组的使用,字符串实际上一个字符数组,可以和字节数组转换。

字符串加解密.zip

17.45 KB, 下载次数: 36

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-13 21:51 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 大灰狼1976 于 2021-5-16 21:58 编辑

【正题】
    假设主楼的字符串加密程序是极其严谨可靠的,接下来把我对VBA代码加密的想法阐述如下:
1、密码不可保存在文档任意一处,打开文件时必须由用户输入密码进行解密,输入的密码赋值给全局变量;
2、在不涉及代码本身修改的前提下,如何能使用户既能看到代码结构,但却不容易理解,也无法顺利调试呢,我认为可以多利用外部(VBA代码以外)字符串来参与运算过程;
3、能使字符串参与运算过程的方法有哪几个呢,我目前能想到的是:Application.Run()、Evaluate()
4、能通过字符串来调用对象的方法:OleObjects()、Controls()、UserForms.Add().Show、CallByName()、Sheets()...
    仔细想想,能用字符串参与运行过程的情景还是非常多的,特别是Application.Run()和Evaluate(),前者可以把字符串作为过程(函数)名和参数来参与运算;后者更是包罗万象、不拘一格。
5、既然不打算修改代码本身,那么上面的第3项第4项涉及的字符串完全可以放在某个工作表里,然后通过字符串加密方式保存,由于第1项已经获得用户输入的密码变量,过程里引用的时候外面套个解密程序就行了。

PS:示例尚未准备...时间仓促,准备了一个简单的。解密:abc129

测试1.zip

22.68 KB, 下载次数: 30

TA的精华主题

TA的得分主题

发表于 2021-5-13 22:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
别人的代码,看起来多费力。加密不加密有啥区别。还不如自己写吧,写不出来再请教大神。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-13 22:49 | 显示全部楼层
jiangxiaoyun 发表于 2021-5-13 22:19
别人的代码,看起来多费力。加密不加密有啥区别。还不如自己写吧,写不出来再请教大神。

纯探讨,我也不喜欢研究别人的代码。

TA的精华主题

TA的得分主题

发表于 2021-5-16 13:01 | 显示全部楼层
大灰狼1976 发表于 2021-5-13 22:49
纯探讨,我也不喜欢研究别人的代码。

除了商业用途,加密有必要。其他我觉得真没啥必要。
就是商业用途,加不加密其实作用不大吧。
会VBA的自然一般不会买软件系统(搞不出来还是会买),不会的就是裸奔代码也不知道怎么改。
到淘宝上请人改,价格都足够买好几个注册码了。

TA的精华主题

TA的得分主题

发表于 2021-5-16 14:53 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
真有必要,就封装,不然,也就防君子不防小人

TA的精华主题

TA的得分主题

发表于 2021-5-16 15:31 来自手机 | 显示全部楼层
jiangxiaoyun 发表于 2021-5-16 13:01
除了商业用途,加密有必要。其他我觉得真没啥必要。
就是商业用途,加不加密其实作用不大吧。
会VBA的 ...

你说的是大多数情况,还有一些特殊情况是需要加密的。
1是过杀软
2是保护算法。结合vbs 加密,代码多,修改起来,难度会加大

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2021-5-16 15:33 来自手机 | 显示全部楼层
aman1516 发表于 2021-5-16 14:53
真有必要,就封装,不然,也就防君子不防小人

如果是暴力破解,就算是封装了,一样保护不了注册码。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-16 16:28 来自手机 | 显示全部楼层
本帖最后由 大灰狼1976 于 2021-5-16 21:59 编辑

楼上附件的密码是abc129,话说还有一种办法,把代码全部通过字符串加密法加密,打开时输入密码转成明文,反正知道密码的人我不需要对他有所保留,不知道密码的人我可以让他永远解不出来。

TA的精华主题

TA的得分主题

 楼主| 发表于 2021-5-16 16:37 来自手机 | 显示全部楼层
发这个帖的初衷是探讨对加密方法的思考,不是对加密有无必要的探讨。个人也不喜欢加密,我所有发的附件从来不加密。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-5-12 15:38 , Processed in 0.045676 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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