Excel精英培训网

 找回密码
 注册

QQ登录

只需一步,快速开始

工作中常用的Excel函数公式,全印在一张超大鼠标垫上
查看: 608|回复: 24

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

[复制链接]
发表于 2021-5-13 21:08 | 显示全部楼层 |阅读模式
本帖最后由 大灰狼1976 于 2021-5-13 21:40 编辑

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


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

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

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

字符串加解密.zip

17.45 KB, 下载次数: 41

 楼主| 发表于 2021-5-13 21:52 | 显示全部楼层
本帖最后由 大灰狼1976 于 2021-5-13 22:50 编辑

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

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


测试1.zip

22.68 KB, 下载次数: 30

回复

使用道具 举报

发表于 2021-8-21 22:59 | 显示全部楼层
回复

使用道具 举报

发表于 2021-8-22 21:48 | 显示全部楼层
版主老师  请问测试文件的密码 是多少啊  ,一头雾水啊
回复

使用道具 举报

 楼主| 发表于 2021-8-24 16:51 | 显示全部楼层
02761752696 发表于 2021-8-22 21:48
版主老师  请问测试文件的密码 是多少啊  ,一头雾水啊

抱歉过了很久我也忘记了,等下下班后我下载确认一下
回复

使用道具 举报

发表于 2021-8-24 19:28 | 显示全部楼层
我觉得这样加密不是很好,因为全是乱码,让人一看就知道有问题,
能不能加密后还是简体中文字?只是读着不太通顺。
回复

使用道具 举报

发表于 2021-8-25 10:47 | 显示全部楼层
大灰狼1976 发表于 2021-5-13 21:52
【正题】
    假设主楼的字符串加密程序是极其严谨可靠的,接下来把我对VBA代码加密的想法阐述如下:
1、 ...

版主老师,vba加密和excel打开密码加密的原理一样不一样?
回复

使用道具 举报

 楼主| 发表于 2021-8-25 16:10 | 显示全部楼层
02761752696 发表于 2021-8-22 21:48
版主老师  请问测试文件的密码 是多少啊  ,一头雾水啊

昨天忘记下载了,我记得密码是abc129,你试试
回复

使用道具 举报

发表于 2021-9-9 14:48 | 显示全部楼层
大灰狼1976 发表于 2021-8-25 16:10
昨天忘记下载了,我记得密码是abc129,你试试

谢谢  老师   测试正确,请问能否实现6楼说的效果呢??
回复

使用道具 举报

 楼主| 发表于 2021-9-10 11:19 | 显示全部楼层
6楼效果不难的,只要修改一下加解密语句,限定编码在汉字范围内就行。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2021-9-16 19:39 , Processed in 0.177024 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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