我正在尋找一種方法來加密.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();
}
}
}
可以將無用的條件標記爲控制流混淆?
請分享您的建議,任何可能有趣的鏈接或預訂建議。
混淆代碼會適得其反,因爲它會使開發人員的代碼變得更加複雜,而這些代碼通常會轉化爲更晦澀的錯誤。開發人員應該努力的關鍵是簡單易懂的代碼,這通常意味着更少的bug和更好的可維護性。 – zaph
我想,重要的一點是,這不是'加密',你問的是混淆。你可以嘗試'加密'的代碼作爲一個dll,然後assembly.load解密的數據,有效地部署與您的應用程序加密垃圾;然而,至少有任何成功的希望,你需要編寫一個非託管封裝(C++應用程序),裏面有高熵,以解密託管代碼並執行它。總體而言,延誤可能對可疑收益有重大意義。 – zaitsman