眾所周知,做逆向的可以使用Reflector或其他工具反編譯任何.NET程序集。
反編譯效果圖
常用加密方法
公司購買使用的一款.Net加密工具是VirboxProtector,對.NET的保護方式主要有:JIT加密、智能壓縮、代碼加密、代碼混淆、名稱混淆、去除強簽名等。其他JIT加密及壓縮可以與函數加密方式(代碼加密、混淆)一起使用,增強安全強度。
JIT加密(推薦)
.NET JIT 加密,是將 .NET 所有方法的 IL 指令經過加密,僅在 .NET 虛擬機進行 JIT 編譯階段才解密,可以防止靜態反編譯,也能防止 IL 代碼在內存被 Dump。JIT 加密可以配合代碼混淆、代碼加密、.NET 壓縮一起使用,達到多層保護的效果,在兼顧性能的同時,更進一步提升保護后代碼的安全性。
技術原理
啟用 “JIT 加密” 后,在 Virbox Protector 進行保護時,會將 .NET 方法的 IL 字節碼加密,並插入 VBP JIT HOOK 模塊完成保護。
在運行階段,.NET 虛擬機對原程序中的元數據等信息進行解析,最終需要在 JIT 階段將 IL 方法進行編譯,VBP JIT Hook 模塊會在此時進行解密,使編譯過程順利進行。
壓縮
.NET 的壓縮功能主要為 .NET 程序提供了整體保護的效果,可以防止 .NET 程序中的方法被 DnSpy,ILSpy,.NET Reflector 等工具反編譯,Virbox Protector 2.0 開始使用了 IL 殼代碼,提升了兼容性。
功能:防止靜態反編譯,防止程序被打補丁。
優點
-
能起到一層整體保護效果,可以隱藏程序的代碼、數據和文件結構信息。
-
運行效率高,僅在程序被加載時輕微的性能損失。
代碼加密(Native)
原理:代碼加密是使用 SMC(Self-Modifying Code)技術,將指定的函數加密,在函數被執行時才將函數解密並執行的保護方式。
功能:防脫殼,防止直接Dump。
優點:運行效率高,幾乎沒有性能損失。
代碼混淆
描述:Virbox Protector 支持對 x86/arm/.net il 系列指令進行混淆。
原理:代碼混淆亦稱花指令,是將計算機程序的代碼,轉換成一種功能上等價,但是難於閱讀和理解的形式。
功能:擾亂原始指令,防止靜態分析。
去除強簽名:
強名稱(StrongName)使.NET提供的一種驗證機制, 主要包括標識版本和標識原作者.
強名稱可以用來幫助用戶驗證自己得到的程序是否為原作者所寫切沒有被修改(例如添加惡意代碼), 跟自校驗有點類似.
因此添加了強名稱的程序加殼時要去除強名稱, 並在加殼后重新添加強名稱.
名稱混淆(.NET)
描述:將 .net 的方法名類名使用隨機字符串重新命名,導出和外部的名稱不會改變
加密效果
加密后使用反編譯工具查看效果
獲取 VirboxProtector
Virbox Protector是由深思數盾研發的一款支持多種平台及架構,支持多種開發語言及框架的加密工具,加密后可防止代碼反編譯,防止內存dump。官方提供免費全功能的試用版可以測試,需要測試的可以進入下面鏈接下載:
試用: