2016-09-29 52 views
-1

我正在尋找一種方法來加密.net程序集(EXE,DLL)或應用反調試技術。我知道程序集不包含本地字節碼,但是CIL代碼並且可以很容易地反編譯。
老實說,我不得不說我對.NET很新。我來自網絡開發人員背景,C#只是一種業餘愛好,所以我不需要加密可執行文件,但我想知道如何使用dotfuscator這樣的解決方案。
我也知道文件必須在內存中解密才能執行它們,但這與包含本機代碼的程序集相同。
我不想要的是討論加密.NET可執行文件是否有用。我只關心應用加密或反調試技術的理論方法(例如控制流混淆)。從以下示例和相關問題可以看出,我的知識遠低於ZERO。我是典型的應用程序編碼人員,如果代碼編譯並運行,那麼他很高興,但我想深入挖掘。加密.net程序集/反調試技術

using System; 
namespace HelloWorld 
{ 
    class Hello 
    { 
     static void Main() 
     { 
      if(1 < 2) 
      { 
       if(3 == 3) 
       { 
        if ("a" != "b") 
        { 
         if(0 != 1) 
         { 
          Console.WriteLine("Hello World!"); 
         } 
        } 
       } 
      } 
      Console.ReadLine(); 
     } 
    } 
} 

可以將無用的條件標記爲控制流混淆?
請分享您的建議,任何可能有趣的鏈接或預訂建議。

+0

混淆代碼會適得其反,因爲它會使開發人員的代碼變得更加複雜,而這些代碼通常會轉化爲更晦澀的錯誤。開發人員應該努力的關鍵是簡單易懂的代碼,這通常意味着更少的bug和更好的可維護性。 – zaph

+0

我想,重要的一點是,這不是'加密',你問的是混淆。你可以嘗試'加密'的代碼作爲一個dll,然後assembly.load解密的數據,有效地部署與您的應用程序加密垃圾;然而,至少有任何成功的希望,你需要編寫一個非託管封裝(C++應用程序),裏面有高熵,以解密託管代碼並執行它。總體而言,延誤可能對可疑收益有重大意義。 – zaitsman

回答

1

有商業工具,可以幫助你混淆你的代碼,如Dotfuscator。另一種選擇是使用ngen將MSIL編譯爲本機代碼。

我認爲並希望您的自定義「控制流混淆」在構建版本時得到優化。

+0

我會看看ngen。另外,我不知道在構建過程中進行優化。今晚我會測試一下,看看反編譯的代碼。 – Seppel

+0

在Visual Studio中,您可以在項目設置中找到優化代碼選項。這只是MSIL優化,與JIT編譯期間不盡相同。但是,你使用的if-conditions是基於常量,所以很容易確定它們將永遠是真實的。因此,我的猜測是,他們將被優化,但它總是很好的檢查。 –

+0

你說得對,條件得到了優化。 – Seppel