我希望當我打開EXE文件用像「ILSpy」或「IL反彙編」我看不到代碼軟件,以使加密我的WPF代碼。加密WPF代碼
我不想使用任何現有的軟件,而是自己編寫加密。
誰能給我一個簡單的代碼呢? (?我需要使用「System.Security.Cryptography」命名空間)
謝謝...
我希望當我打開EXE文件用像「ILSpy」或「IL反彙編」我看不到代碼軟件,以使加密我的WPF代碼。加密WPF代碼
我不想使用任何現有的軟件,而是自己編寫加密。
誰能給我一個簡單的代碼呢? (?我需要使用「System.Security.Cryptography」命名空間)
謝謝...
你真的不能加密代碼(有多次嘗試 - 他們中的一些像臭名昭著的Themida實際上工作),但你可以混淆它。有很多預製工具,如Dotfuscator,專爲此目的而設計。
但是,如果您要編寫自己的混淆器,則必須進入「低級別」,該低級別在.NET上下文中爲CIL。你可以重命名所有的變量和類,將常見的方法調用包裝到一些不明確的代碼中,但是這很難,最終如果對某人很重要,它會被去混淆。
還有否簡單解決您所談論的問題。這就是爲什麼有幾個,有時是相當昂貴的商業工具。他們被稱爲obfuscators。由於您顯然不知道混淆是如何工作的,甚至可能不是如何工作(您不會問這個問題是否適用),所以很可能是自定義混淆器的自殺任務。因此,我的建議是去購買適合您要求的工具許可證。
我假設你想要在你的項目中存儲加密的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。