zoukankan      html  css  js  c++  java
  • .net代码混淆技术

     

    DotFuscator使用步骤

     

    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)    然后把所有的依赖项添加进来

    然后生成,我的机器是512M内存,2GCPU,结果竟然出现内存不足,根本无法执行,只好到此为止。

    现在还不知道到底为什么混淆之后程序集无法正常使用,有没有其他的解决方案。

  • 相关阅读:
    Haskell Interactive Development in Emacs
    Access Java API in Groovy Script
    手工设置Eclipse文本编辑器的配色
    Color Theme of Emacs
    Gnucash的投资记录
    Special Forms and Syntax Sugars in Clojure
    Use w3m as Web Browser
    SSE指令集加速之 I420转BGR24
    【图像处理】 增加程序速度的方法
    TBB 入门笔记
  • 原文地址:https://www.cnblogs.com/dfsxh/p/1661042.html
Copyright © 2011-2022 走看看