什么是.NET
.NET 是由 Microsoft 創建的開源開發平臺,用于生成多種不同類型的應用程序,主要支持C#、F#及VB。
.NET程序運行原理
.NET程序的運行是由其虛擬機CLR(公共語言運行時)把程序編譯成IL中間語言,然后由CLR即時編譯器JIT編譯成機器代碼交由CPU執行。
.NET語言開發雖有眾多優點,但眾所周知,其編譯后的程序極易被反編譯,即
使用最常規的調試工具 如Refelctor,其代碼都可以被輕松反編譯,也因此各種代碼混淆橫空出世。代碼混淆技術僅能混淆加密方法名稱及部分流程,并不能混淆加密代碼,也不能完全隱藏程序邏輯,只是增加了閱讀代碼的難度,使用反混淆技術即可輕松破解還原代碼。
那么如何高效安全地保護.NET程序不被反編譯破解呢?我們通過德國威步的.NET代碼加密技術,可窺一斑。
AxProtector全自動加密.NET程序
AxProtector .NET是一款全自動純代碼保護工具,開發者無需任何代碼開發即可實現軟件加密。我們將從以下四個方向了解AxProtector .NET的安全原理。
AxProtector .NET按需加解密代碼原理
AxProtector .NET是實現.NET軟件保護最節省時間和精力的理想解決方案。無需任何代碼開發,使用AxProtector .NET,可以以全自動的方式保護.NET程序免受盜版和逆向工程的侵害。
AxProtector .NET對需要保護的軟件的類和方法進行加密,并使用安全加密工具AxEngine對其進行保護。通過集成AxProtector .NET,將最佳反調試和反匯編方法注入到軟件當中。
各個方法以加密的形式加載,并一直保持加密狀態,直到需要調用時再在后臺中自動解密。在由JIT編譯器轉換之后,這些方法再次從內存中刪除,從而將IL代碼以未加密形式花費的時間保持在最小。這對軟件性能的影響可以忽略不計,以換取盡可能高的保護級別。
AxProtector .NET中的安全機制
授權鎖定阻止調試繼續
每當第一次運行一個加密后的方法時,AxEngine就會被激活,其將立即查找是否有可用許可證,如有許可證可用,許可證會自動激活并用于解密相關方法。作為完整性檢查的一部分,AxEngine還測試軟件是否被篡改過。其使用最先進的反調試和反逆向工程方法識別各種威脅,并在發現任何此類風險時停止它。在這種情況下,軟件商可以選擇將許可證鎖定。
AxProtector包含后臺監控系統,以實現定期檢查許可證、軟件完整性以及是否存在威脅。
加密陷阱讓破解無法深入
AxProtector .NET還提供了可選的隱藏命令,可作為額外陷阱方法添加至軟件中。任何試圖解密加密后的功能以達到破解目的的行為,均會誤入陷阱,并觸發鎖定許可證的命令,用于阻止解密更多的功能。自動陷阱使得AxProtector .NET成為阻止系統分析的絕佳手段。
相比普通的混淆器,AxProtector .NET的安全加密級別更高。傳統的混淆只是改變名稱,并將軟件擾亂為條狀的代碼,而AxProtector .NET則使用強大的256位AES對稱算法對可執行代碼進行加密。即使使用最好的破解工具也無法反編譯硬盤上的程序集。受保護的代碼在安全的加密狗黑箱中或windows系統服務中解密,相比.NET層面上的簡單混淆更讓破解者無法得逞。破解者如果沒有合法授權或密鑰,則無法從內存中獲取代碼。有了陷阱的加持,更是讓方法鈍化、系統化解密以及遍歷方法等破解手段在實際應用中變得完全不可能。
當有陷阱被觸發時,許可證被鎖定,鑰匙丟失,無法再進行任何其他解密嘗試。AxProtector .NET與混淆器相比還有一個基本優勢:函數無需重新命名,這意味著反射、遠程或WCF等功能仍然可用,不會對軟件的安全性造成任何影響。
通訊加密防止錄制回放通訊被破解
相比使用CodeMeter Core API,使用AxProtector .NET能夠以一種最小的代價達到極高的軟件保護水平。當然軟件商也可以選擇額外使用CodeMeter Core API功能以進一步增加安全強度。比如我們可以使用Core API對數據或代碼使用ECC非對稱算法進行加密,從而保證通信安全。
總而言之,加密是木桶效應,安全的高低取決于短板,只有全面、整體的方案才能真正保證加密方案的安全。
德國威步的軟件加密方案從軟件代碼加密、通訊加密及授權安全等三個方面保證安全防護做到極致。
除了高安全性之外,加密方案的兼容、穩定性及運行效率都是軟件保護方案需考慮的重要因素。AxProtector .NET支持C#、.NET Core、.NET Standard以及Mono平臺,并且可通過選擇加密或不加密代碼平衡安全性及兼容性。雖然AxProtector .NET加密的是可執行代碼,對運行效率影響極小,但仍然可以通過調整加密方法,把在極端特殊情況下出現的效率影響降到最低。