DotFuscator是微軟推薦的一個第三方混淆器,在vs.net2003的工具里面,但是只提供了Community Edition,如果需要使用更完全的功能,還需要注冊。目前還不清楚Community Edition和注冊后的版本有什么差別。
1. 在”vs.net studio工具”->”Dotfuscator Community Edition”,就打開了Dotfuscator軟件。
2.首先遇見的時要求注冊的窗口,選擇”否,我不要注冊”就可以了
3.在彈出的”選擇項目類型”窗口中,選擇”創建新項目”,點擊”確定”按鈕
4.下面看一下幫助文件中是如何描述創建新項目功能的。
(1) 選擇觸發器程序集
(a) 選擇”觸發器”選項卡
(b) 點擊“瀏覽”按鈕,選擇一個程序集
(2) 指定目標目錄
(a) 選擇”生成”選項卡
(b)選擇“目標目錄”中的“瀏覽”按鈕,選擇一個目錄
(3) 保存項目配置文件
(4) 生成項目
點擊“生成”按鈕,項目開始被生成。
正在加載程序集...
正在運行 D:/Program Files/Microsoft Visual Studio .NET 2003/SDK/v1.1//bin/ildasm.exe /OUT=D:/DOCUME~1/SHAREA~1/LOCALS~1/Temp//K2SystemFramework.dll.il /TEXT /NOBAR /RAWEH /QUOTEALLNAMES /UTF8 D:/K2SystemFramework.dll
正在重命名...
正在寫入程序集...
正在運行 D:/WINDOWS/Microsoft.NET/Framework/v1.1.4322/ilasm.exe /OUTPUT=D:/混淆器目錄/K2SystemFramework.dll /nologo /quiet /dll /resource=D:/DOCUME~1/SHAREA~1/LOCALS~1/Temp//K2SystemFramework.dll.res D:/DOCUME~1/SHAREA~1/LOCALS~1/Temp//K2SystemFramework.dll.il
生成已完成。
現在用Reflector來查看混淆以后的dll:發現所有的類名都用a,a0等代碼代替了。
類里面的方法名也被替換成沒有意義的符號了。
下面是方法里面的代碼,變量也被替換了。
現在用ILDASM來看一下。
下面是一段具體的代碼,可以看出變量已經被替換了。
觀察一下程序集被混淆前后的大小變化,混淆前是80k,混淆后是72k,也就是說大小有變化。看來混淆器還有另外一個作用,就是減小程序集的體積。
5. 測試一下被混淆后的程序集是否可以正常使用。這里是錯誤描述!
在使用該程序集的應用程序中重新添加引用,引用可以正常的添加,但是編譯應用程序的時候,竟然提示找不到程序集。
我想原因應該是剛剛開始添加程序集到i混淆器的時候產生的一個錯誤。
詳細信息:
有關調用實時(JIT)調試而不是此對話框的詳細信息,
請參閱此消息的結尾。
************** 異常文本 **************
System.Reflection.ReflectionTypeLoadException: 程序集中的一個或多個類型無法加載。
at System.Reflection.Module.GetTypesInternal(StackCrawlMark& stackMark)
at System.Reflection.Module.GetTypes()
at dh.a(TreeNode A_0, Module[] A_1)
at dh.a(String A_0, String A_1)
at ck.c(String A_0)
at ck.a8(Object A_0, EventArgs A_1)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** 已加載的程序集 **************
mscorlib
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
dotfuscator
程序集版本: 1.1.1019.14028
Win32 版本: 1.1.1019.14028
基本代碼: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%20.NET%202003/PreEmptive%20Solutions/Dotfuscator%20Community%20Edition/dotfuscator.exe
----------------------------------------
dfengine
程序集版本: 1.1.1019.14017
Win32 版本: 1.1.1019.14017
基本代碼: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%20.NET%202003/PreEmptive%20Solutions/Dotfuscator%20Community%20Edition/dfengine.DLL
----------------------------------------
dfgui
程序集版本: 1.1.1019.14026
Win32 版本: 1.1.1019.14026
基本代碼: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%20.NET%202003/PreEmptive%20Solutions/Dotfuscator%20Community%20Edition/dfgui.DLL
----------------------------------------
System.Windows.Forms
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
dfengine.resources
程序集版本: 1.1.1018.26530
Win32 版本: 1.1.1018.26530
基本代碼: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%20.NET%202003/PreEmptive%20Solutions/Dotfuscator%20Community%20Edition/zh-CHS/dfengine.resources.DLL
----------------------------------------
System.Drawing
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
dfgui.resources
程序集版本: 1.1.1018.26851
Win32 版本: 1.1.1018.26534
基本代碼: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%20.NET%202003/PreEmptive%20Solutions/Dotfuscator%20Community%20Edition/zh-CHS/dfgui.resources.DLL
----------------------------------------
System.Xml
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
mscorlib.resources
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/mscorlib.resources/1.0.5000.0_zh-chs_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
System.Windows.Forms.resources
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system.windows.forms.resources/1.0.5000.0_zh-chs_b77a5c561934e089/system.windows.forms.resources.dll
----------------------------------------
System.resources
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system.resources/1.0.5000.0_zh-chs_b77a5c561934e089/system.resources.dll
----------------------------------------
K2SystemFramework
程序集版本: 1.0.2195.17766
Win32 版本: 1.0.2195.17766
基本代碼: file:///D:/K2SystemFramework.dll
----------------------------------------
************** JIT 調試 **************
計算機的配置文件(machine.config)的
system.windows.forms 節中必須設置 jitDebugging 值。
編譯應用程序時還必須啟用/r/n調試。/r/n/r/n例如: /r/n/r/n<configuration>/r/n <system.windows.forms jitDebugging="true" />/r/n</configuration>/r/n/r/n啟用 JIT 調試后,任何未處理的異常/r/n都將被發送到此計算機上注冊的 JIT 調試器,/r/n而不是由此對話框處理。/r/n
下面開始做如下的嘗試:
(1) 修改machine.config文件,設置如下的屬性:
<system.windows.forms jitDebugging="true" />
然后重新混淆。
出現如下的錯誤信息
詳細信息:
有關調用實時(JIT)調試而不是此對話框的詳細信息,
請參閱此消息的結尾。
************** 異常文本 **************
System.Reflection.ReflectionTypeLoadException: 程序集中的一個或多個類型無法加載。
at System.Reflection.Module.GetTypesInternal(StackCrawlMark& stackMark)
at System.Reflection.Module.GetTypes()
at dh.a(TreeNode A_0, Module[] A_1)
at dh.a(String A_0, String A_1)
at ck.c(String A_0)
at ck.a8(Object A_0, EventArgs A_1)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** 已加載的程序集 **************
mscorlib
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
dotfuscator
程序集版本: 1.1.1019.14028
Win32 版本: 1.1.1019.14028
基本代碼: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%20.NET%202003/PreEmptive%20Solutions/Dotfuscator%20Community%20Edition/dotfuscator.exe
----------------------------------------
dfengine
程序集版本: 1.1.1019.14017
Win32 版本: 1.1.1019.14017
基本代碼: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%20.NET%202003/PreEmptive%20Solutions/Dotfuscator%20Community%20Edition/dfengine.DLL
----------------------------------------
dfgui
程序集版本: 1.1.1019.14026
Win32 版本: 1.1.1019.14026
基本代碼: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%20.NET%202003/PreEmptive%20Solutions/Dotfuscator%20Community%20Edition/dfgui.DLL
----------------------------------------
System.Windows.Forms
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
dfengine.resources
程序集版本: 1.1.1018.26530
Win32 版本: 1.1.1018.26530
基本代碼: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%20.NET%202003/PreEmptive%20Solutions/Dotfuscator%20Community%20Edition/zh-CHS/dfengine.resources.DLL
----------------------------------------
System.Drawing
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
dfgui.resources
程序集版本: 1.1.1018.26851
Win32 版本: 1.1.1018.26534
基本代碼: file:///D:/Program%20Files/Microsoft%20Visual%20Studio%20.NET%202003/PreEmptive%20Solutions/Dotfuscator%20Community%20Edition/zh-CHS/dfgui.resources.DLL
----------------------------------------
System.Xml
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
mscorlib.resources
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/mscorlib.resources/1.0.5000.0_zh-chs_b77a5c561934e089/mscorlib.resources.dll
----------------------------------------
System.Windows.Forms.resources
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system.windows.forms.resources/1.0.5000.0_zh-chs_b77a5c561934e089/system.windows.forms.resources.dll
----------------------------------------
System.resources
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/system.resources/1.0.5000.0_zh-chs_b77a5c561934e089/system.resources.dll
----------------------------------------
Accessibility
程序集版本: 1.0.5000.0
Win32 版本: 1.1.4322.573
基本代碼: file:///d:/windows/assembly/gac/accessibility/1.0.5000.0__b03f5f7f11d50a3a/accessibility.dll
----------------------------------------
K2SystemFramework
程序集版本: 1.0.2195.20209
Win32 版本: 1.0.2195.20209
基本代碼: file:///D:/K2SystemFramework.dll
----------------------------------------
************** JIT 調試 **************
計算機的配置文件(machine.config)的
system.windows.forms 節中必須設置 jitDebugging 值。
編譯應用程序時還必須啟用/r/n調試。/r/n/r/n例如: /r/n/r/n<configuration>/r/n <system.windows.forms jitDebugging="true" />/r/n</configuration>/r/n/r/n啟用 JIT 調試后,任何未處理的異常/r/n都將被發送到此計算機上注冊的 JIT 調試器,/r/n而不是由此對話框處理。/r/n
更剛才的錯誤一樣。
難道需要重新啟動機器?
(2)重新啟動機器以后,重新編譯程序集,然后添加到混淆器中。還是出現同樣的錯誤。到底怎么回事啊。
6.上面的方法已經把程序集混淆到了一定的程度,不過我看到過一個被混淆后的程序集根本就不能用Reflector查看,效果如下:
(1) 程序集
(2)類
(3)方法
如果能達到這種效果就好了。難道作者用的不是大眾版本(Communist Edition),而是用的專業版(注冊版),還是用了大眾版中的其他功能?
7. 用了一下feiyun0112推薦的XenoCode 2005,效果還不錯,具體效果如下:
類名變得亂糟糟
方法名變得亂糟糟
一部分方法看不見了:
大部分方法可以看見,但是變量名變得亂糟糟:
用ILDASM查看一下,出現下面的錯誤:
根本就打不開。
看來除了可以看到大部分代碼的結構以外,效果還是很好的。
但是可以斷定,DVNews那個程序集不是用XenoCode 2005工具來混淆的,因為產生程序集的界面是不同的,而且DVNews那個程序集大部分函數都看不到結構,而用XenoCode 2005混淆后大部分函數可以看到結構。
下面是一個關鍵的問題,就是混淆后后的程序集能否被正常使用。
還是出現找不到引用的錯誤,看來又是失敗的。
8. 針對混淆后的程序集總是無法正常被引用的問題,研究幾種解決方案。
(1) 利用XenoCode 2005工具的依賴項功能,試驗一下如果把這個程序集中所有的依賴項一起混淆,會不會有效果:
(a) 用XenoCode 2005工具的”Scan Dependency”功能,搜索依賴項,結果如下:
(b) 然后把所有的依賴項添加進來