2014-03-30 91 views
0

我希望當我打開EXE文件用像「ILSpy」或「IL反彙編」我看不到代碼軟件,以使加密我的WPF代碼。加密WPF代碼

我不想使用任何現有的軟件,而是自己編寫加密。

誰能給我一個簡單的代碼呢? (?我需要使用「System.Security.Cryptography」命名空間)

謝謝...

回答

1

你真的不能加密代碼(有多次嘗試 - 他們中的一些像臭名昭著的Themida實際上工作),但你可以混淆它。有很多預製工具,如Dotfuscator,專爲此目的而設計。

但是,如果您要編寫自己的混淆器,則必須進入「低級別」,該低級別在.NET上下文中爲CIL。你可以重命名所有的變量和類,將常見的方法調用包裝到一些不明確的代碼中,但是這很難,最終如果對某人很重要,它會被去混淆。

1

還有簡單解決您所談論的問題。這就是爲什麼有幾個,有時是相當昂貴的商業工具。他們被稱爲obfuscators。由於您顯然不知道混淆是如何工作的,甚至可能不是如何工作(您不會問這個問題是否適用),所以很可能是自定義混淆器的自殺任務。因此,我的建議是去購買適合您要求的工具許可證。

0

我假設你想要在你的項目中存儲加密的XAML,然後解密並編譯它。首先寫一個命令行實用工具加密你的文件,即是這樣的:

private static byte[] Key = { 123, 217, 19, 11, 24, 26, 85, 45, 114, 184, 27, 162, 37, 112, 222, 209, 241, 24, 175, 144, 173, 53, 196, 29, 24, 26, 17, 218, 131, 236, 53, 209 }; 
    private static byte[] Vector = { 146, 64, 191, 111, 23, 3, 113, 119, 231, 121, 252, 112, 79, 32, 114, 156 }; 

    static void Main(string[] args) 
    { 
     var xaml = File.ReadAllBytes(args[0]); 
     using (var outputFile = new FileStream(args[1], FileMode.Create)) 
     { 
      RijndaelManaged rm = new RijndaelManaged(); 
      var transform = rm.CreateEncryptor(Key, Vector); 
      CryptoStream cs = new CryptoStream(outputFile, transform, CryptoStreamMode.Write); 
      cs.Write(xaml, 0, xaml.Length); 
      cs.FlushFinalBlock(); 
     } 
    } 

現在回到你的主主應用程序設置您的XAML生成操作爲「無」,並在您的項目設置中添加預生成命令加密你的每個文件(我會在這裏假裝你只是將它們作爲加密文件保存在與你的exe文件相同的文件夾中,實際上你會讓它們成爲嵌入式資源或其他東西)。然後,它只是加載它們,解密他們,他們編制的問題:

private void LoadEncryptedXaml(string filename) 
    { 
     RijndaelManaged rm = new RijndaelManaged(); 
     var transform = rm.CreateDecryptor(Key, Vector); 

     var bytes = File.ReadAllBytes(filename); 
     using (var stream = new MemoryStream(bytes)) 
     using (var cs = new CryptoStream(stream, transform, CryptoStreamMode.Read)) 
     { 
      var decrypted = ReadFully(cs); 
      using (var memstream = new MemoryStream(decrypted)) 
      { 
       var xaml_object = XamlReader.Load(memstream); 

       // do something with it here, e.g. if you know it's a resource dictionary then merge it with the other app resources 
       Application.Current.Resources.MergedDictionaries.Add(xaml_object as ResourceDictionary); 
      } 
     } 
    } 

的功能的readFully剛讀,直到流的末尾,你可以get the source code here