曾經有人說.NET是最容易被反編譯的開發語言。其實現如今,在常見的開發語言中,無論是.NET還是JAVA,甚至人氣排名第一的JavaScript都存在容易被反編譯的風險,如何保護代碼不受竊取,如何應用程序不受破壞,是所有開發人員最為關系的話題。
或許在軟件開發的過程中,工程師會尋找一些開源產品以節約成本,但在實際應用、分發授權、許可控制的過程中,仍不希望自己的成果被竊取。“代碼保護”、“軟件保護”等等這些詞的熱度一直經久不衰。
其中,最常見的保護方式有“代碼混淆”、“代碼虛擬化”以及“軟件加密”。
混淆:利用花指令和代碼非等價變形等技術,將程序的代碼,轉換成一種功能上等價,但是難于閱讀和理解的代碼,可充分干擾靜態分析。
虛擬化:將指令編譯為虛擬代碼,放在指定虛擬機中運行,目前對指令有一定的格式要求,有的函數可能不能被保護。
加密:將代碼塊作為數據,用許可加密函數存儲,程序執行到該函數時驗證許可并解密,內存中不會暴露完整的代碼塊,目前有的函數不可添加到保護中。
無論哪種方法,必然會借助工具來實現,接下來咱們就一起來聊聊軟件代碼保護的那些工具。這里說幾個熱議度比較高的,其他歡迎在評論區補充~
(本文篇幅較長,建議收藏閱讀)
針對軟件保護
先說說軟件加密保護,也有人會說是加殼保護,加殼實際上就是一種加密方式。這里我們說說VMProtect、WinLicense和Themida。
VMProtect——軟件加密混淆保護工具
虛擬化,突變以及涉及應用程序代碼突變和后續虛擬化的組合保護。
支持的平臺和操作
支持從windows 2000開始的Windows家族的32/64位操作系統,以及從版本10.6開始的mac OSX
保護方式
- 字節碼
- 虛擬化
- 虛擬機
- 水印
- 突變
- 混淆
- 保護器
- 入口點保護
- 打包
- 加密
Themida——軟件加密保護器
Themida®使用SecureEngine®保護技術,該技術以最高優先級運行時,實現了前所未有的保護技術,以保護應用程序免遭高級軟件破解。
SecureEngine®擊敗了當前可用于受保護應用程序的所有破解工具,它將確保受保護應用程序僅在安全環境中運行。
保護方式
- 反調試器技術,可檢測/欺騙任何類型的調試器
- 適用于任何Ring3和Ring0自卸車的反內存自卸車技術
- 受保護的應用程序中都有不同的加密算法和密鑰
- 避免重建原始導入表的反API掃描程序技術
- 目標應用程序中的自動反編譯和加擾技術
- 特定代碼塊中的虛擬機仿真
- 先進的Mutator引擎
- SDK與保護層通信
- 任何靜態和交互式反匯編程序的反分解技術
- 具有超過50.000個排列的多個多態層
- 先進的API包裝技術
- 針對文件和注冊表監視器的反監視器技術
- 在真實指令之間隨機插入垃圾代碼
WinLicense——軟件加密保護&許可控制器
WinLicense作為軟件保護者
WinLicense使用SecureEngine®保護技術,該技術能夠以最高優先級運行其代碼,以實現前所未有的保護技術。這樣可以保護任何具有最高安全級別的應用程序。
WinLicense作為許可證管理器
WinLicense提供了最廣泛的選項和功能,可以為應用程序創建試用版和注冊版。開發人員可以與WinLicense通信,以通過完整的SDK檢查其應用程序的試用版或注冊版的當前狀態。WinLicense還提供了自動處理所有可能情況的功能。
保護方式
- 反調試器技術,可檢測/欺騙任何類型的調試器
- 適用于任何Ring3和Ring0自卸車的反內存自卸車技術
- 受保護的應用程序中都有不同的加密算法和密鑰
- 避免重建原始導入表的反API掃描程序技術
- 目標應用程序中的自動反編譯和加擾技術
- 特定代碼塊中的虛擬機仿真
- 先進的Mutator引擎
- SDK與保護層通信
- 任何靜態和交互式反匯編程序的反分解技術
- 具有超過50.000個排列的多個多態層
- 先進的API包裝技術
- 針對文件和注冊表監視器的反監視器技術
- 在真實指令之間隨機插入垃圾代碼
如果是保護知識產權的角度,脫離混淆的代碼加密是偽命題,無論怎么加密,如果不加以混淆手段保護,都沒有意義。如同傳統軟件的加殼保護,代碼混淆給底層的加密算法加了最基本的保障,所以說,混淆和加密一定是相輔相成的。
針對代碼保護
再說說代碼混淆保護器,.NET、Java以及JavaScript代碼混淆是目前熱議度較高的。.NET混淆器可試試Dotfucator、.NET Reactor;Java混淆器可試試DashO;JavaScript混淆器可試試JSDefender;當然也有針對x32和x64本機PE/ELF/Mach-O文件中代碼混淆器Code Virtualizer。
.NET Reactor——.NET代碼保護和軟件授權系統
通過多種方法來防止反編譯,這些方法會將.NET程序集轉換為任何現有工具都無法反編譯的進程。
.NET Reactor還提供了強大的選項,通過使用豐富的試用版和完整版本鎖來執行許可條款,以確保您的收入流。
支持的平臺和操作
- 支持的平臺:Windows 98,ME,NT,2000,XP,Vista,7、8 / 8.1、10,Server 2003-2019
- 支持的平臺(單聲道):linux-SUSE,Novell,Red Hat,Mac-OS X,Solaris,BSD-OpenBSD,FreeBSD,NetBSD
- 支持的平臺(Xamarin):Android,Apple IOS,Mac
保護方式 - 知識產權保護
- 強大的許可系統
- 軟件開發工具包
- 部署方式
DashO——Java混淆和運行檢查保護器
提供了多層保護:混淆的多種形式(重命名,字符串加密,控制流等)以及活動的運行時檢查(篡改,調試,root等)。
支持的平臺和操作
Windows,MacOS / OS X,Unix,Java 1.3-1.8、9-14,Java模塊,Kotlin,Android 4.1+(API 16 +),J2EE,WAR,J2ME,Spring,Gradle,APK
保護方式
- 重命名
- 控制流
- 字符串加密
- 資源加密
- 水印
- 刪除
- 入侵偵測與防御
- 調試檢測和防御
- 使用支票
- 根檢查對于安卓
- 模擬器檢查對于安卓
- 掛鉤檢查對于安卓
- 保質期
Dotfucator——.NET混淆和運行檢查保護器
提供了多層保護:混淆的多種形式(重命名,字符串加密,控制流等)以及活動的運行時檢查(篡改,調試,root等)。
支持的平臺和操作
.NET Framework 1.0和更高版本,.NET Core 2和更高版本,.NET 5和Mono的應用程序,并有針對性地支持包括Xamarin,UWP,http://ASP.NET,.NET Standard等在內的各種框架。
Dotfuscator的構建組件可以在Windows,Mac和Linux上的.NET Framework 4.7.2 + 、. NET Core 2.1+和Mono 6+上運行。Config Editor需要Windows上的.NET Framework。
保護方式
- 重命名
- 控制流
- 字符串加密
- 水印
- 修剪
- 鏈接
- 篡改檢測與防御
- 調試檢測與防御
- 保質期
- Xamarin.Android的根檢查
JSDefender——JavaScript模糊處理器
JavaScript模糊處理技術,包括控制流變平,篡改檢測和其他應用內保護轉換。
支持的平臺和操作
JavaScript框架,運行時和捆綁器,包括Angular,Node,React,React Native,Webpack等。
保護方式
- 布爾文字
- 控制臺偽裝
- 控制流保護
- 日期鎖定
- 移除調試器
- DevTools阻止
- 域鎖
- 表達序列混淆
- 功能重新排序
- 全局對象隱藏
- 整數字面量
- 本地宣言
- 財產稀疏
- 屬性間接
- 字符串文字
- 篡改檢測
- 可變分組保護
Code Virtualizer——代碼混淆系統
在任何x32和x64本機PE / ELF / Mach-O文件中保護您敏感的代碼區域。
由于.NET應用程序的性質,Code Virtualizer無法保護.NET應用程序中的敏感代碼。
支持的平臺和操作
適用于Windows,Linux和Mac OS X應用程序
保護方式
- 通過多個虛擬機進行混淆
- 為每個受保護的應用程序提供獨特的保護
- 保護任何x32和x64應用程序和設備驅動程序
- 先進的變異引擎
- 代碼重定位以保護DLL和設備驅動程序
- 仿真獨特虛擬機中的任何Intel x86操作碼
- 每個受保護應用程序的唯一虛擬操作碼
- 與任何壓縮機/保護器完全兼容
- 命令行保護
以上就是目前市面上我所了解的軟件和代碼保護工具,歡迎在評論區留言補充。