VS自带代码混淆器DotFuscator的使用步骤

DotFuscator是微软推荐的一个第三方混淆器,在vs.net2003的工具里面,但是只提供了Community Edition,如果需要使用更完全的功能,还需要注册。目前还不清楚Community Edition和注册后的版本有什么差别。

1.  ”vs.net studio工具”->”Dotfuscator Community Edition”,就打开了Dotfuscator软件。

2.首先遇见的时要求注册的窗口,选择否,我不要注册就可以了

 

3.在弹出的选择项目类型窗口中,选择创建新项目,点击确定按钮

VS自带代码混淆器DotFuscator的使用步骤

4.下面看一下帮助文件中是如何描述创建新项目功能的。

 

VS自带代码混淆器DotFuscator的使用步骤

 

(1)       选择触发器程序集

VS自带代码混淆器DotFuscator的使用步骤

VS自带代码混淆器DotFuscator的使用步骤

(a)    选择触发器选项卡

 

VS自带代码混淆器DotFuscator的使用步骤

 

(b)    点击“浏览”按钮,选择一个程序集

 

VS自带代码混淆器DotFuscator的使用步骤

 

(2)       指定目标目录

VS自带代码混淆器DotFuscator的使用步骤

VS自带代码混淆器DotFuscator的使用步骤

(a)    选择生成选项卡

 

VS自带代码混淆器DotFuscator的使用步骤

b)选择“目标目录”中的“浏览”按钮,选择一个目录

VS自带代码混淆器DotFuscator的使用步骤

  (3) 保存项目配置文件

VS自带代码混淆器DotFuscator的使用步骤

 

  (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等代码代替了。

 

VS自带代码混淆器DotFuscator的使用步骤

 

类里面的方法名也被替换成没有意义的符号了。

 

VS自带代码混淆器DotFuscator的使用步骤

 

下面是方法里面的代码,变量也被替换了。

VS自带代码混淆器DotFuscator的使用步骤

 

现在用ILDASM来看一下。

VS自带代码混淆器DotFuscator的使用步骤

下面是一段具体的代码,可以看出变量已经被替换了。

VS自带代码混淆器DotFuscator的使用步骤

观察一下程序集被混淆前后的大小变化,混淆前是80k,混淆后是72k,也就是说大小有变化。看来混淆器还有另外一个作用,就是减小程序集的体积。

 

5. 测试一下被混淆后的程序集是否可以正常使用。这里是错误描述!

  在使用该程序集的应用程序中重新添加引用,引用可以正常的添加,但是编译应用程序的时候,竟然提示找不到程序集。

  我想原因应该是刚刚开始添加程序集到i混淆器的时候产生的一个错误。

 

VS自带代码混淆器DotFuscator的使用步骤

详细信息:

 

有关调用实时(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" />

然后重新混淆。

出现如下的错误信息

VS自带代码混淆器DotFuscator的使用步骤

详细信息:

 

有关调用实时(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) 程序集

VS自带代码混淆器DotFuscator的使用步骤

2)类

VS自带代码混淆器DotFuscator的使用步骤

3)方法

 

VS自带代码混淆器DotFuscator的使用步骤

 

如果能达到这种效果就好了。难道作者用的不是大众版本(Communist Edition),而是用的专业版(注册版),还是用了大众版中的其他功能?

 

7. 用了一下feiyun0112推荐的XenoCode 2005,效果还不错,具体效果如下:

 

类名变得乱糟糟

VS自带代码混淆器DotFuscator的使用步骤

 

方法名变得乱糟糟

VS自带代码混淆器DotFuscator的使用步骤

 

一部分方法看不见了:

VS自带代码混淆器DotFuscator的使用步骤

 

大部分方法可以看见,但是变量名变得乱糟糟:

 

VS自带代码混淆器DotFuscator的使用步骤

 

 

ILDASM查看一下,出现下面的错误:

 

VS自带代码混淆器DotFuscator的使用步骤

根本就打不开。

 

看来除了可以看到大部分代码的结构以外,效果还是很好的。

 

但是可以断定,DVNews那个程序集不是用XenoCode 2005工具来混淆的,因为产生程序集的界面是不同的,而且DVNews那个程序集大部分函数都看不到结构,而用XenoCode 2005混淆后大部分函数可以看到结构。

 

下面是一个关键的问题,就是混淆后后的程序集能否被正常使用。

还是出现找不到引用的错误,看来又是失败的。

 

8. 针对混淆后的程序集总是无法正常被引用的问题,研究几种解决方案。

(1)    利用XenoCode 2005工具的依赖项功能,试验一下如果把这个程序集中所有的依赖项一起混淆,会不会有效果:

(a)    用XenoCode 2005工具的”Scan Dependency”功能,搜索依赖项,结果如下:

VS自带代码混淆器DotFuscator的使用步骤

(b)    然后把所有的依赖项添加进来

VS自带代码混淆器DotFuscator的使用步骤