原始出处: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

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

演示说明:

在下面演示里面,可以看到运行了VBA过程,VBA代码由插件动态生成到Excel里面,然后调用运行,运行完毕删除模块以达到保护代码的效果。这种加密方式的好处是不需要改动VBA代码,当然也就不需要学什么新的语言了。适合专注VBA应用开发的童鞋。

演示文件下载,未安装Smart Indenter for VBE插件的的请先下载并安装。

CrackMe测试,请在2.71版插件下测试,不要用老版本。

技术交流请联系QQ:564955427

一种简单有效的VBA源代码加密办法,支持64位宿主,适用于大部分VBA代码加密的更多相关文章

  1. [转]VS2013+简单稀疏光束调整库SSBA配置(64位编译)

    有关SSBA库的资源比较少,我是在Github上搜索下载的,具体的GitHub官方下载地址为:SSBA 下载后在SSBA解压文件夹下新建文件夹build. 打开cmake gui,在source co ...

  2. cocos对lua代码加密

    1.0 cocos luacompile 用法 我用的普通的cocos2d lua,没用quick,quick好像可以对整个资源包括图像和音频都加密,打包成zip.但我没用quick.看了下luaco ...

  3. cocos2d 3.3 lua 代码加密 luac

    1.0 cocos luacompile 使用方法 我用的普通的cocos2d lua,没用quick,quick好像能够对整个资源包含图像和音频都加密,打包成zip.我看了下luacompile 的 ...

  4. 五种常用的C/C++编译器对64位整型的支持

    变量定义 输出方式 gcc(mingw32) g++(mingw32) gcc(linux i386) g++(linux i386) MicrosoftVisual C++ 6.0 long lon ...

  5. 四种简单的图像显著性区域特征提取方法-----AC/HC/LC/FT。

    四种简单的图像显著性区域特征提取方法-----> AC/HC/LC/FT. 分类: 图像处理 2014-08-03 12:40 4088人阅读 评论(4) 收藏 举报 salient regio ...

  6. 对Java代码加密的两种方式,防止反编译

    使用Virbox Protector对Java项目加密有两种方式,一种是对War包加密,一种是对Jar包加密.Virbox Protector支持这两种文件格式加密,可以加密用于解析class文件的j ...

  7. Android一键换肤功能:一种简单的实现

     Android一键换肤功能:一种简单的实现 现在的APP开发,通常会提供APP的换肤功能,网上流传的换肤代码和实现手段过于复杂,这里有一个开源实现,我找了一大堆,发现这个项目相对较为简洁:htt ...

  8. GIT将本地项目上传到Github(两种简单、方便的方法)

    GIT将本地项目上传到Github(两种简单.方便的方法) 一.第一种方法: 首先你需要一个github账号,所有还没有的话先去注册吧! https://github.com/ 我们使用git需要先安 ...

  9. 一种简单,轻量,灵活的C#对象转Json对象的方案(续)

    本文参考资料 一种简单,轻量,灵活的C#对象转Json对象的方案 [源码]Literacy 快速反射读写对象属性,字段 一段废话 之前我已经介绍了这个方案的名称为JsonBuilder,这套方案最大的 ...

随机推荐

  1. SQL Server has encountered 1 occurrence(s) of cachestore flush for the 'Object Plans' cachestore (part of plan cache) due to some database maintenance or reconfigure operations.

    2017-11-01 09:49:44.35 spid166 SQL Server has encountered 1 occurrence(s) of cachestore flush for th ...

  2. Not Found woff 字体库

    原因是,默认在IIS上是没有添加对*.woff,*.svg文件的Mime类型,因此在客户端请求此类文件时得到的都是404. 所以我们只需要在我们对应网站下的Mime类型中添加文件对应的类型就行了 .w ...

  3. IDEA: Call Hierarchy

    在日常开发中,查看某个方法.字段可能被用在哪些地方.这个是个很常见的操作. 例如,在使用Eclipse时,选择方法后,右键菜单里选择 show call hierarchy,即可查看有哪些地方调用了这 ...

  4. Python 中的Duck Typing

    在学习Python的时候发现了鸭 子类型这个术语,听起来好像很有意思一样,所以把它记下来. 鸭子类型(Duck Typing)的名字来源于"鸭子测试": "当看到一只鸟走 ...

  5. ASP.NET -- WebForm -- 页面生命周期

    ASP.NET -- WebForm --  页面生命周期 ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件 ...

  6. LeetCode算法题-Move Zeroes(Java实现-三种解法)

    这是悦乐书的第201次更新,第211篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第67题(顺位题号是283).给定一个数组nums,写一个函数将所有0移动到它的末尾,同 ...

  7. 如何弄清Linux系统运行何种系统管理程序

    如何弄清Linux系统运行何种系统管理程序 虽然我们经常听到系统管理器System Manager这词,但很少有人深究其确切意义.现在我们将向你展示其区别. 我会尽自己所能来解释清楚一切.我们大多都知 ...

  8. NGINX+PHP+ZABBIX,推荐

    https://www.cnblogs.com/liuzhennan/articles/5319280.html

  9. 【Java8】@FunctionalInterface

    阅读目录 什么是函数式接口(Functional Interface) 函数式接口用途 关于@FunctionalInterface注解 函数式接口里允许定义默认方法 函数式接口里允许定义静态方法 函 ...

  10. UVA12265-Selling Land(细节处理)

    Problem UVA12265-Selling Land Accept: 309  Submit: 3231Time Limit: 3000 mSec Problem Description Inp ...