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

  • 相关阅读:
    第三方驱动备份与还原
    Greenplum 解决 gpstop -u 指令报错
    yum安装(卸载)本地rpm包的方法(卸载本地安装的greenplum 5.19.rpm)
    Java JUC(java.util.concurrent工具包)
    netty 详解(八)基于 Netty 模拟实现 RPC
    netty 详解(七)netty 自定义协议解决 TCP 粘包和拆包
    netty 详解(六)netty 自定义编码解码器
    netty 详解(五)netty 使用 protobuf 序列化
    netty 详解(四)netty 开发 WebSocket 长连接程序
    netty 详解(三)netty 心跳检测机制案例
  • 原文地址:https://www.cnblogs.com/Charltsing/p/EncryptVBACode.html
Copyright © 2011-2022 走看看