轉載自: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).aspx
用法一 使用默認混淆
打開軟件點擊input選項卡,把dll或exe添加,Libray不要選,否則的話,幾乎所有的公共函數變量,不會被加密和混淆,可以很容易的看到代碼
點擊build選項卡,在目標目錄(destination directory)選取你想把dll生成到的位置,如F盤:/混淆目錄
其它不用設置,直接點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不進行重名,以保證頁面文件可以訪問。
對於說在混淆后,容量會變小.我覺得這不是絕對的,我的容量是變大了