原創(chuàng)|其它|編輯:郝浩|2012-11-22 16:59:14.000|閱讀 5674 次
概述:C#編寫的代碼如果不進(jìn)行一定程度的混淆和加密,那么是非常容易被反編譯進(jìn)行破解的,特別是對于一些商業(yè)用途的C#軟件來說,因?yàn)槎⒅娜硕啵菢O易被攻破。使用Dotfuscator有助于防止程序被逆向工程,同時(shí)使程序更小和更高效。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
C#編寫的代碼如果不進(jìn)行一定程度的混淆和加密,那么是非常容易被反編譯進(jìn)行破解的,特別是對于一些商業(yè)用途的C#軟件來說,因?yàn)槎⒅娜硕啵菢O易被攻破。現(xiàn)今很多用C#編寫的項(xiàng)目,做出的產(chǎn)品,都會(huì)遇到這種情況:C#的代碼辛辛苦苦寫出來之后,一個(gè)反射工具,就可以完全顯露出來,這樣會(huì)是個(gè)什么結(jié)果,不說被反射出來照搬功能,就是注冊和加密的那一部分都會(huì)被輕易拿到,所以就必須使用代碼混淆器。
C#的代碼混淆器有很多了,比如Dotfuscator、xeoncode、foxit等等。這些混淆器大多是需要注意的,使用效果各不相同。普通的代碼混淆器只是把私有字段和變量轉(zhuǎn)換成隨機(jī)碼,如果是小程序,還可以猜一猜,如果是比較大的程序,猜起來可就不會(huì)那容易了。高級一點(diǎn)的是混淆成不可閱讀的字符,這樣的混淆后的代碼干脆就比機(jī)器碼還難懂,基本上是翻譯不出來了。但這些代碼混淆器都有一定的風(fēng)險(xiǎn),即混淆后的代碼實(shí)然無法正常調(diào)用了。
這里介紹的是版本,安裝 Dotfuscator 好 打開界面,有幾個(gè)需要配置的地方: Options、Input、Rename、String Encryption、Build,其他的默認(rèn)即可,下面一一講解。
這是全局配置選項(xiàng),把 Disable String Encryption 設(shè)為 NO,即啟用字符串加密;檢查 Disable Control flow、Dsiable Renaming 也為 NO,即保證控制流和混淆功能打開,其他默認(rèn)。如下圖:
選擇你需要混淆加密的 dll、exe文件,其中Library不要勾選,否則有些類、變量等等不會(huì)混淆。
勾選“use enhanced overload induction”(使用增強(qiáng)模式),注意:不要勾選下方的“ Do not suppress on serializable types”,即序列化類型的變量不加密,否則編譯后可能異常; “Renaming Scheme” 選擇“Unprintable”(不可打印字符,即亂碼),也可以選擇其他如小寫字母、大寫字符、數(shù)字的方式。
include里勾選需要字符串加密的工程文件exe、dll等。
設(shè)置輸出目標(biāo)文件夾,點(diǎn)擊上方的運(yùn)行按鈕即可重新生成新的 exe、dll文件了。
接下來來看一下一段簡單的C#代碼加密混淆后的效果:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static readonly int A = B * 10; static readonly int B = 10; //const int A = B * 10; //const int B = 10; public static void Main(string[] args) { Person p = new Person(); Console.WriteLine("A is {0},B is {1} ", A, B); } } public class Person { static int age; } }
使用Dotfuscator進(jìn)行代碼混淆后 我們使用著名的反編譯軟件 Reflector 來查看,可以發(fā)現(xiàn)函數(shù)體內(nèi)的代碼已經(jīng)看不到了,字符串也變成了亂碼,函數(shù)名稱也不可見了,效果圖如下:
Dotfuscator作為一款代碼混淆的軟件,具有很強(qiáng)的反編譯功能,但使用時(shí)應(yīng)注意以下幾點(diǎn):
當(dāng)然如果你編寫的軟件不涉及商業(yè)用途的話,本著開源的思想,不推薦使用代碼混淆器。使用代碼混淆器存在一定的風(fēng)險(xiǎn),在使用前最好做好相關(guān)代碼備份。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn