C#,Winform軟體防破譯-原始碼加密簡單方法之.NET REACTOR(一)

願餘生隨風發表於2023-02-08

 

一、.NET Reactor介紹

 

.NET Reactor是一個功能強大的程式碼保護和軟體許可系統,適用於為.NET Framework編寫的軟體,並支援生成.NET程式集的所有語言。

支援Blazor保護,支援.NET 5 Preview 4保護,允許建立.NET Core 3.x單個檔案應用程式,改進了許多功能效能,等等10個功能的更新和改進,還沒有體驗的朋友可點選下方按鈕下載試用。

立即下載

本文將介紹.NET Reactor的功能和保護機制中的重要名詞含義,瞭解了這些才能更好的掌握功能使用,希望對您有所幫助。

 

  • .NET Core捆綁

 

啟用此選項可建立.NET Core 3.x單個檔案應用程式。可執行檔案是自解壓縮的,包含執行應用程式所需的所有依賴項(包括本地依賴項)。首次執行該應用程式時,該應用程式將根據應用程式名稱和構建識別符號提取到目錄中。再次執行該應用程式時,啟動速度更快。除非使用了新版本,否則該應用程式無需再次提取自身。

 

  • 反除錯

 

此選項將啟用受保護程式集中的反偵錯程式檢測。如果連線了偵錯程式,當前程式將終止。

 

  • 抗ILDASM

 

此功能可防止使用反編譯工具進行反編譯。反編譯工具(如ILDASM-Microsoft中間語言反彙編程式)將報告它們無法開啟受保護的程式集。

  • 防篡改

此選項可防止駭客工具篡改/修改受保護的程式集。在執行時,受保護的程式集將執行幾個二進位制完整性檢查。

  • 程式碼虛擬化

通用中間語言(CIL)是一組與平臺無關的指令,由特定於語言的編譯器(C#,VB.NET ...)從原始碼生成。CIL是獨立於平臺的,並且可以在任何公共語言基礎架構支援的環境(例如.NET執行時或Mono)上執行。CIL和其他後設資料的儲存方式必須遵循特定的標準(ECMA-335)。這樣,.NET Reflector或ILSpy之類的工具就可以讀取CIL指令並將程式碼轉換回其源語言(C#,VB.NET ...)。

程式碼虛擬化將CIL程式碼轉換為一組隨機指令,這些指令在執行時由我們自己的虛擬機器解釋。由於沒有正確解釋新指令集的標準化程式,因此無法重建原始CIL指令。因此,虛擬程式碼無法轉換回其源語言。

由於虛擬化方法的效能大大降低,因此程式碼虛擬化應僅應用於選定的方法。要啟用程式碼虛擬化,需要使用以下屬性裝飾相應的方法: 

[System.Reflection.ObfuscationAttribute(Feature = "Virtualization", Exclude = false)]

用法示例

之前

 

 

 

 之後

 

 

 

 其餘的存根程式碼將執行虛擬機器。

  • 壓縮和加密資源

.NET Reactor可以透過壓縮和加密託管資源來提高保護和程式集的大小。在執行時,需要時,資源將自動解壓縮和解密。

  • 控制流混淆

控制流混淆將方法內部的程式碼轉換為義大利麵條程式碼,而這又保留了程式碼的功能,這使得人眼和反編譯器很難遵循程式邏輯。反編譯器無法將義大利細麵條程式碼反編譯回原始原始碼。

  • 嵌入元件

.NET Reactor接收程式集(在“ 其他檔案”中列出)並將其嵌入到Main Assembly中。

在可執行檔案中嵌入依賴項可以幫助您部署和維護軟體,因為您可以將所有依賴項嵌入到一個有效的可執行檔案中。在執行時,嵌入式依賴項直接從記憶體中載入,而不提取到硬碟驅動器中。.NET Reactor對嵌入式程式集不施加任何保護。如果要保護嵌入式程式集,則應將其與主程式集合並或先對其進行保護。

  • 評估鎖

如果只希望在有限的時間內使用受保護的程式集,請啟用Evaluation_Lock。在“ Runtime_Minutes”(分鐘)(分鐘)和“ Trial_Days”(天)之間選擇。此鎖將您的軟體轉變為“試用版”。

  • 硬體鎖

如果要將許可證檔案連結到特定計算機,請啟用“硬體鎖定” 。建立的許可證檔案僅在具有定義的硬體ID的計算機上有效。要獲取硬體ID,請使用.NET Reactor SDK庫License.dll。

  • 隱藏方法呼叫

隱藏對外部和/或內部方法的呼叫。方法呼叫透過在執行時動態構建的委託進行重定向。通常,僅隱藏外部方法呼叫就足夠了。

之前:

 

 

 

 然後:

 

 

 

 

 最後(混淆處理->命名約定->隱身):

 

 

 

 

  •  許可檔案

有效的許可證檔案將您鎖定的.NET軟體解鎖。要建立有效的許可證檔案,必須載入正確的主金鑰。它必須與用於保護軟體的主金鑰相同。可以透過許可證管理器建立許可證檔案。

  • 對映檔案

要對跟蹤痕跡進行模糊處理,需要一個對映檔案。對映檔案包含所有混淆名稱的翻譯。該堆疊跟蹤deobfuscator需要對映檔案重建原始的堆疊跟蹤。

  • 合併程式集

啟用此選項可將多個部件合併到單個目標部件中。.NET Reactor將您的程式集(“ 主程式集”和“ 其他檔案中列出的程式集”)合併到一個目標程式集中。

合併依賴項可以改善對軟體的保護。合併的依存關係不再對使用者可見,並且由於它們是主裝配的真實部分,因此它們也將自動受到保護。如果主程式集是可執行檔案,則目標程式集仍然是具有相同入口點的可執行檔案。

第三方庫通常已經受到保護,因此不建議將它們與主程式集合並。如果在合併裝配件時遇到問題,則應將其嵌入到主裝配件中。

  • 本機EXE檔案

.NET Reactor能夠為您的應用程式生成本機x86 EXE檔案存根。這樣就無法在反編譯器中直接開啟受保護的應用程式。反編譯器將受保護的應用程式識別為本地EXE檔案。

  • NecroBit

NecroBit是一種強大的保護技術,透過用加密程式碼替換方法中的CIL程式碼,可以為您的敏感智慧財產權提供全面保護。這樣就不可能對方法原始碼進行反編譯/反向工程。

  • 混淆

除了原始碼保護,.NET Reactor還提供了徹底的類和成員混淆,並輔之以不同的排除方案,在混淆名稱中使用了不可列印的字元,甚至是增量混淆,它們始終為型別和成員名稱生成相同的混淆字串。

模糊處理型別和成員名稱。混淆過程將程式轉換為等效程式,使反向工程更加困難。這種方法的優點是它可以在標準硬體上執行,並且無需對虛擬機器或可用的直譯器進行任何更改。

.NET Reactor完全支援宣告式混淆。宣告式混淆允許您直接定義哪些型別和成員應排除在混淆之外。這可以透過在原始碼中使用自定義屬性System.Reflection.ObfuscationAttribute來完成。.NET Reactor自動檢測該屬性,並從混淆中排除相應的型別和成員。

  • 混淆節點:

建立對映檔案-啟用“建立對映檔案”以建立一個將未混淆名稱與混淆名稱交叉引用的檔案,該名稱由堆疊跟蹤反混淆器使用。
啟用-設定為True以混淆所有非公共類和成員名稱。
排除-選擇要避免混淆的型別。
增量混淆-如果您希望IntelliLock始終為您的型別和成員名稱生成相同的混淆字串,則需要啟用此選項。
模糊公共型別-啟用它也可以模糊所有型別和成員名稱。
混淆可序列化型別-禁用此選項可防止混淆可序列化型別。
使用不可列印的字元-不可列印的字元使用不可列印的字串來混淆型別和成員名稱,但是如果程式集必須作為安全程式碼執行,則無法使用。

  • 準時制方法

與本機EXE檔案功能和NecroBit結合使用,.NET Reactor能夠將託管方法轉換為REAL x86本機程式碼。只有不影響執行時和平臺行為的方法(大多數是諸如屬性getter / setters之類的小方法)才會轉換為本機程式碼。本質上,此功能具有內建保護,可防止元件修改。

  • 字串加密

字串加密使駭客難以理解您的程式碼並嘗試對程式集進行程式碼補丁,因為他將無法識別訊息文字或其他有用的字串,從而使識別補丁程式碼的難度變得更大。此功能具有內建的防止組裝操作的保護。

 

至此,C#,Winform軟體防破譯-原始碼加密簡單方法之.NET REACTOR(一)就結束啦,如果你覺得有用,點個贊吧!

如果您看了本篇部落格,覺得對您有所收穫,請點選右下角的 [推薦];

如果您想轉載本部落格,請註明出處;

如果您對本文有意見或者建議,歡迎留言;

感謝您的閱讀,請關注我的後續部落格。 

 

相關文章