一種簡單有效的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM