.NET 混淆工具/策略 [關閉]
我的產品有幾個組件:ASP.NET、Windows Forms App 和 Windows Service。95% 左右的程式碼是用 VB.NET 編寫的。
出於智慧財產權的原因,我需要對程式碼進行模糊處理,直到現在我一直在使用一個 dotfuscator 版本,該版本已經超過 5 年了。我認為是時候轉向新一代工具了。我正在尋找的是在搜尋新的混淆器時應該考慮的要求列表。
到目前為止,我知道我應該尋找什麼:
- 序列化/反序列化。在我目前的解決方案中,我只是告訴該工具不要混淆任何類數據成員,因為無法載入先前序列化的數據的痛苦太大了。
- 與建構過程集成
- 使用 ASP.NET。過去,由於更改 .dll 名稱(通常每頁有一個),我發現這個問題 - 並非所有工具都能很好地處理。
回到 .Net 1.1 時,混淆是必不可少的:反編譯程式碼很容易,您可以從彙程式式碼到 IL 程式碼,再到 C# 程式碼,然後毫不費力地再次編譯它。
現在有了.Net 3.5,我完全不確定。嘗試反編譯 3.5 程序集;你得到的距離編譯還有很長的路要走。
添加從 3.5 開始的優化(比 1.1 好得多)以及匿名類型、委託等通過反射處理的方式(它們是重新編譯的噩夢)。添加 lambda 表達式、編譯器“魔術”如 Linq-syntax 和
var以及 C#2 函式yield(這會導致新類的名稱不可讀)。您的反編譯程式碼距離可編譯還有很長的路要走。一個有大量時間的專業團隊仍然可以再次對其進行逆向工程,但任何混淆程式碼也是如此。他們從中得到的程式碼將是不可維護的,並且很可能是非常錯誤的。
我建議對您的程序集進行密鑰簽名(這意味著如果黑客可以重新編譯一個他們必須重新編譯所有程序),但我不認為混淆是值得的。
我們已經嘗試了許多混淆器。它們都不適用於使用遠端處理的大型客戶端/伺服器應用程序。問題是客戶端和伺服器共享一些 dll,我們還沒有找到任何可以處理它的混淆器。
我們已經嘗試過 DotFuscator Pro、SmartAssembly、XenoCode、Salamander 和幾個小型應用程序,它們的名字讓我無法理解。
坦率地說,我確信混淆是一個大技巧。
即使它解決的問題也不完全是一個真正的問題。你真正需要保護的唯一東西是連接字元串、啟動碼、諸如此類的安全敏感的東西。另一家公司將對您的整個程式碼庫進行逆向工程並從中創建競爭產品的胡說八道是偏執狂經理的噩夢,而不是現實。