• Dundas Win Chart 5.5.0的破解(转)_sportman


    Dundas Win Chart 5.5.0的破解(转)_sportman

    破解   2009-05-18 00:06   阅读253   评论1  
    字号:    
    Dundas Win Chart 5.5.0的破解(转)
    2008-09-19 15:46

    1.描述
    项目中用到这个较好的的图表控件:Dundas Win Chart,如果未花几千$买正版的,用在项目中时会带有水印与license
    出于学习.Net反编译的文件及IL语言的目的,现把破解方法记录如下

    2.破解的版本
    Dundas Win Chart 5.5.0.1696 vs2005-winform- enterprise

    3.相关步骤

    准备工作:

    建立一个用于破解的目录,写两个bat文件

    Dasm.bat (反编译的文件)
    ildasm DundasWinChart.dll /out=DundasWinChart.il

    Asm.bat(编译反编译出来的il代码文件,重新生成dll文件)
    ilasm /dll /res:DundasWinChart.res /key:MyCompany.snk DundasWinChart.il /out:DundasWinChart.dll /quiet

    由于此版本的DLL库进行了强命名,所以在反编译时需要自己生成一个MyCompany.snk的强命名文件,再次进行强命名
    生成方法为在visual studio 2005 commond prompt下用sn工具直接生成即可

    把需要破解的DundasWinChart.dll复制进此目录

    正式开始:

    打开vs2005命令行,进入刚才建立的目录,运行ildasm;
    此时会把当前目录中的DundasWinChart.dll反编译,反编译出相关的IL文件及资源文件
    用NOTEPAD或其它工具打开DundasWinChart.il文件,同时用reflector打开DLL文件
    打开Dundas.Charting.WinControl.ChartPicture的 Paint方法
    public void Paint(Graphics graph, bool paintTopLevelElementOnly)
    {
        this.Paint(graph, paintTopLevelElementOnly, RenderingType.Gdi, null, null, string.Empty, false, false);
    }
    public void Paint(Graphics graph, bool paintTopLevelElementOnly, RenderingType renderingType, XmlTextWriter svgTextWriter, Stream flashStream, string documentTitle, bool resizable, bool preserveAspectRatio)
    {
        this.b = false;
        this.a.a(this.a, null);
    *****************
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                this.OnAfterPaint(new ChartPaintEventArgs(this.a, this.a, new ElementPosition(0f, 0f, 100f, 100f)));
                foreach (ChartArea area7 in this.a)
                {
                    if (area7.Visible)
                    {
                        area7.a();
                        area7.d();
                    }
                }
                this.d = true; --就是这里了
                if (this.d)
                {
                    StringFormat format = new StringFormat();
                    format.Alignment = StringAlignment.Center;
                    format.LineAlignment = StringAlignment.Center;
                    SolidBrush brush = new SolidBrush(Color.FromArgb(40, 0, 0, 0xaf));
                    SolidBrush brush2 = new SolidBrush(Color.FromArgb(40, 200, 200, 200));
                    Font font = new Font(a(), 8f);
                    SizeF relativeSize = this.a.GetRelativeSize(new SizeF(2f, 2f));
                    string text = ct.a("\u14ad\u14de\u14d7\u14cd\u14ca\u14dc\u1489\u14ac\u14d1\u14ca\u14db\u14dd\u1489\u1496\u1489\u14c0\u14d2\u14d7\u14cd\u14d8\u14e0\u14dc\u1489\u14af\u14d8\u14db\u14d6\u14dc\u1489\u14ae\u14d7\u14dd\u14ce\u14db\u14d9\u14db\u14d2\u14dc\u14ce\u1489\u14ae\u14cd\u14d2\u14dd\u14d2\u14d8\u14d7\u1476\u1473\u14ae\u14df\u14ca\u14d5\u14de\u14ca\u14dd\u14d2\u14d8\u14d7\u1489\u14b6\u14d8\u14cd\u14ce\u1489\u14ae\u14d7\u14ca\u14cb\u14d5\u14ce\u14cd\u1495\u1489\u14cf\u14d8\u14db\u1489\u14dd\u14ce\u14dc\u14dd\u14d2\u14d7\u14d0\u1489\u14d9\u14de\u14db\u14d9\u14d8\u14dc\u14ce\u14dc\u1489\u14d8\u14d7\u14d5\u14e2\u1476\u1473\u1491\u14ac\u1492\u1489\u149b\u1499\u1499\u149f\u1489\u14ad\u14de\u14d7\u14cd\u14ca\u14dc\u1489\u14bc\u14d8\u14cf\u14dd\u14e0\u14ca\u14db\u14ce\u1495\u1489\u14e0\u14e0\u14e0\u1497\u14cd\u14de\u14d7\u14cd\u14ca\u14dc\u1497\u14cc\u14d8\u14d6");
                    this.a.a(text, font, brush2, new RectangleF(0f, 0f, 100f, 100f), format);
                    this.a.a(text, font, brush, new RectangleF(0f, 0f, 100f - relativeSize.Width, 100f - relativeSize.Height), format);
                }
                if (renderingType == RenderingType.Svg)
                {
                    this.a.Close();
                    this.a.a(RenderingType.Gdi);
                }
            }
        }
    }

    把上面的this.d = true;改为false就得了

    打开DundasWinChart.il文件,用end of method ChartPicture::Paint搜索,总计应该找到两处,就是第二处了,那个method代码比较多那个

    看到如下IL代码:
          IL_0950: ldarg.0
          IL_0951: ldc.i4.1 就是这个,意思是true,改为false即可
          IL_0952: stfld      bool Dundas.Charting.WinControl.ChartPicture::d
          IL_0957: ldarg.0
          IL_0958: ldfld      bool Dundas.Charting.WinControl.ChartPicture::d
          IL_095d: brfalse    IL_0a4c

    把IL_0951: ldc.i4.1中的ldc.i4.1改为ldc.i4.0
    改完之后,意思就是去除水印了

    还有一个问题就是去除license

    打开Dundas.Charting.WinControl.ChartImage的a(string,string)这个方法,看清楚是有两个字符型参数的这个a方法

    private static bool a(string text1, string text2)
    {
        bool flag = false;   把它改为true就行了
        RegistryKey key = Registry.LocalMachine.OpenSubKey(text1);
        if (key != null)
        {
            string text = (string) key.GetValue(ct.a("\u14b2\u14d7\u14dc\u14dd\u14ca\u14d5\u14d5\u14ad\u14d2\u14db"));
            if (!text.EndsWith(ct.a("\u14c5")))
            {
                text = text + ct.a("\u14c5");
            }
            if (File.Exists(text + ct.a("\u14ab\u14d2\u14d7\u14c5") + text2))
            {
                flag = true;
            }
        }
        return flag;
    }

    打开DundasWinChart.il文件,用end of method ChartImage::a搜索,打开那个有两个字符型参数a(string,string)的a方法
        IL_0000: ldc.i4.1
        IL_0001: stloc.0
        IL_0002: ldsfld     class [mscorlib]Microsoft.Win32.RegistryKey [mscorlib]Microsoft.Win32.Registry::LocalMachine
        IL_0007: ldarg.0
        IL_0008: callvirt   instance class [mscorlib]Microsoft.Win32.RegistryKey [mscorlib]Microsoft.Win32.RegistryKey::OpenSubKey(string)
        IL_000d: stloc.1
        IL_000e: ldloc.1
        IL_000f: brfalse.s IL_006b
    把其中IL_0000: ldc.i4.1的ldc.i4.1改为ldc.i4.0就OK了

    别着急,如果现在就进行asm,可能会错
    Error: Reference to undefined class 'UNKNOWN_OWNER'
    Could not create output file, error code=0x80004005
    这是因为本版本应该是进行了混淆,所以出错,
    把DundasWinChart.il文件中最下面的UNKNOWN_OWNER项全部删除

    在vs2005中asm,编译出新的DundasWinChart.DLL文件,再次加入测试DEMO程序,看看是否还有水印存在!!!

    如果在此之前你已经用过未破解的版本,可能你的项目在会存在license文件,把其删除即可(在Properties下的license.licx)

    OK,破解完成!
    请使用正版软件,此版本仅供学习使用!

  • 相关阅读:
    PHP微信墙制作
    SSM框架构建多模块之业务拆分实践
    系统设计和系统划分有定律可循
    说说application/x-www-form-urlencoded和application/json的区别
    记一次Eclipse关于JDK和JRE的问题
    SVN和Git的比较
    程序员枪击事件引发的背后思考
    高性能JavaScript之加载和执行
    业务拆分的思考
    谈谈运维人员谨慎操作系统环境和管理
  • 原文地址:https://www.cnblogs.com/CCJVL/p/1583207.html
Copyright © 2020-2023  润新知