zoukankan      html  css  js  c++  java
  • 一种简单有效的VBA源代码加密办法,支持64位宿主,适用于大部分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

    功能说明:
    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

  • 相关阅读:
    Java中时间方法大全(持续更新)
    Set集合转换为List集合
    Maven配置【详细】
    maven配置环境变量
    idea中创建Java类时,自动在文件头中添加作者和创建时间
    linux下怎样在某个文件里面查找一个字符串?
    执行docker一系列命令失败
    如何在服务器上搭建SVN
    本地拉取服务器上的项目,SVN 由于目标计算机积极拒绝 无法连接失败
    [节选] web项目中使用freemarker [Translated By Nan Lei]
  • 原文地址:https://www.cnblogs.com/Charltsing/p/EncryptVBACode.html
Copyright © 2011-2022 走看看