轉載自:http://hi.baidu.com/free3people/item/0fba87d34091df15d80e4400
web
轉載自:http://hi.baidu.com/free3people/item/0fba87d34091df15d80e4400安全
dotfuscator如何對.net程序進行混淆保護對於程序代碼的保護,網上有不少資料,有的說混淆,有的說加密,我比較支持混淆的方法,這樣可讓反編譯勞工,頭暈一陣子,哈哈開玩笑。對於加密若是不是不得已,我想沒有必要。加密性能消耗比較大。架構
dotfuscator相信作程序的人不少都知道,dotfuscator與XenoCode都是代碼混淆工具,作爲保護代碼安全的一個工具。既然說到.net的程序,那固然要扯扯dotfuscator,都同屬微軟的產品,兼容性絕對是天生一對。函數
閒話很少說,說最直接的東西,最實用東西。工具
下面來講說dotfuscator的用法,我用的是Dotfuscator Professional Edition 4.2版,Dotfuscator的版本有多好,具體請看微軟官方說明性能
http://msdn.microsoft.com/zh-cn/library/ms227255(v=VS.80).aspxui
用法一 使用默認混淆加密
打開軟件點擊input選項卡,把dll或exe添加,Libray不要選,不然的話,幾乎全部的公共函數變量,不會被加密和混淆,能夠很容易的看到代碼spa
點擊build選項卡,在目標目錄(destination directory)選取你想把dll生成到的位置,如F盤:/混淆目錄.net
其它不用設置,直接點build,會有提示是否要保存項目。點擊否
生成的dll,再用.net Reflector 進行反編譯,看一下。
看到的結果是,類名重命名,方法名重命名 全都變成a,b,c
這種方法有個缺點,對於三層架構來講,他的dal層語句仍是有在。比較容易看懂。
用法二 自定義混淆,類名,方法名不變。
可是方法裏面的內容變成只有一句 // This item is obfuscated and can not be translated.
打開軟件點擊input選項卡,把dll或exe添加
在options的選項中,這是全局配置選項:
把 Disable String Encryption 設爲 NO,即啓用字符串加密;檢查 Disable Control flow、Dsiable Renaming爲NO,即保證控制流和混淆功能打開,其餘默認
Rename 選項勾選「use enhanced overload induction」(使用加強模式),注意:不要勾選下方的「 Do not suppress on serializable types」,即序列化類型的變量不加密,不然編譯後可能異常; 「Renaming Scheme」 選擇「Unprintable」(不可打印字符,即亂碼),也能夠選擇其餘如小寫字母、大寫字符、數字的方式。
點擊build選項卡,在目標目錄(destination directory)選取你想把dll生成到的位置,如F盤:/混淆目錄
其它不用設置,直接點build,會有提示是否要保存項目。點擊否
生成的dll再用.net Reflector 進行反編譯,看一下。
能夠發現函數體內的代碼已經看不到了,提示:「 This item is obfuscated and can not be translated.」;字符串也變成了亂碼,函數名稱也不可見了
看起來是比較強大。可是有個缺點。由於dll是須要被web程序調用的,web的程序調用的方法,以前是使用類名,及方法名的。因此推薦不要作rename這步驟。
也就是在Options選項時,Dsiable Renaming設置爲NO.而Rename裏面就不要去設置了
DotFuscator其特色是混淆,一個很重要的方面是重命名。然而重命名又致使沒法引用的問題。
這要求須要對幾個DLL 同時混淆,對於WEB 來講,頁面cs能夠發佈成一個DLL,將全部層的DLL一塊兒混淆,能夠解決不少問題。這裏對WEB DLL不進行重名,以保證頁面文件能夠訪問。
對於說在混淆後,容量會變小.我以爲這不是絕對的,個人容量是變大了
如下屬於本做者:
經測以後,我以爲仍是能起到必定的防止菜鳥級別,可是真的要認真看起來,那也是很容易看懂的。
還有一點就是一些本身寫的類,已經對象名,方法是沒法更換名字,因此仍是不安全,特別是最重要的都沒有作到。