• DotNET也谈组合强命名破解FlyGrid 1.5.0.31963 for VS2003


    DotNET也谈组合强命名破解-FlyGrid 1.5.0.31963 for VS2003 破解手记 14:51 2007-9-28 WUQING

        这两天手上的项目忙得一直没空,到今天总算有点空闲,把FlyGrid.NET破解过程整理出来,与大家交流
        试用特点:
        未破解前,在控件设计打开时和运行会显示9Rays的一个logo对话框,对话框显示的主要文字如下:
          9Rays.FlyGrid.Net Evaluation
          9Rays.Net (с) 2006
          Ver.1.5.0.31936
          EVALUATION VERSION

        作    者:wuqing0312
        破解工具:ildasm,ilasm,StrongNameRemove20, UEDIT

        破解目的:仅限于技术交流,没有其他目的。失误之处敬请诸位大侠赐教!

        版权声明:本文原创于『 一蓑烟雨 』论坛, 转载请注明作者并保持文章的完整, 谢谢!

       

        1. 用ildasm打开NineRays.FlyGrid.dll,转存为aaa.il;

        2. 找到用UEdit打开aaa.il,先把它的publickey干掉

      .publickey = (00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00   // .$..............
                    00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00   // .$..RSA1........
                    15 B1 C3 50 68 D2 A2 BD 46 F4 9B E1 F1 78 C4 A5   // ...Ph...F....x..
                    CC 25 4C B0 C3 CF 01 04 05 20 42 2C 52 61 12 F7   // .%L...... B,Ra..
                    64 E8 0C 1A 0D C4 1D 69 1B 93 78 07 60 08 6F 9F   // d......i..x.`.o.
                    6F 86 EE 45 47 EA BD 59 A8 00 B8 3E 2D 4E 3F C9   // o..EG..Y...>-N?.
                    81 D9 BE 9E 7C B3 3E E9 CD 0B C9 42 0B 61 C3 24   // ....|.>....B.a.$
                    E9 30 0E EC 4B EF 19 1B F6 CA 4F 9C 58 A0 7E 6F   // .0..K.....O.X.~o
                    E7 96 5F 1F D3 36 69 A4 76 B8 7C 3D DB 87 4F 49   // .._..6i.v.|=..OI
                    D1 3B 16 52 D0 44 FC E7 52 F9 2C 71 A6 12 E0 D0 ) // .;.R.D..R.,q....
      .hash algorithm 0x00008004
        直接删除

        3. 查找EVALUATION我们来到
      .method private hidebysig specialname rtspecialname static
              void  .cctor() cil managed
      {
        // 代码大小       105 (0x69)
        .maxstack  4
        .locals init (class ''.'1' V_0)
        IL_0000:  ldsfld     valuetype [System.Drawing]System.Drawing.Point [System.Drawing]System.Drawing.Point::Empty
        IL_0005:  stsfld     valuetype [System.Drawing]System.Drawing.Point NineRays.Windows.Forms.FlyGrid::''
        IL_000a:  ldc.i4.3
        IL_000b:  stsfld     int32 NineRays.Windows.Forms.FlyGrid::''
        IL_0010:  ldc.i4.m1
        IL_0011:  ldc.i4.m1
        IL_0012:  newobj     instance void [System.Drawing]System.Drawing.Point::.ctor(int32,
                                                                                       int32)
        IL_0017:  stsfld     valuetype [System.Drawing]System.Drawing.Point NineRays.Windows.Forms.FlyGrid::''
        IL_001c:  ldnull
        IL_001d:  stsfld     class NineRays.Windows.Forms.Grids.FlyGridViewPort NineRays.Windows.Forms.FlyGrid::''
        IL_0022:  ldnull
        IL_0023:  stsfld     class NineRays.Windows.Forms.Grids.FlyGridViewPort NineRays.Windows.Forms.FlyGrid::''
        IL_0028:  ldc.i4.0
        IL_0029:  stsfld     valuetype NineRays.Windows.Forms.FlyGrid/'' NineRays.Windows.Forms.FlyGrid::''
        IL_002e:  ldnull
        IL_002f:  stsfld     class [System.Drawing]System.Drawing.Bitmap NineRays.Windows.Forms.FlyGrid::''
        IL_0034:  ldnull
        IL_0035:  stsfld     class [System.Drawing]System.Drawing.Bitmap NineRays.Windows.Forms.FlyGrid::''
        IL_003a:  ldnull
        IL_003b:  stsfld     class [System.Drawing]System.Drawing.Bitmap NineRays.Windows.Forms.FlyGrid::''
        IL_0040:  ldnull
        IL_0041:  stsfld     class [System.Drawing]System.Drawing.Bitmap NineRays.Windows.Forms.FlyGrid::''
        IL_0046:  ldc.i4.0
        IL_0047:  stsfld     valuetype NineRays.Windows.Forms.FlyGrid/'' NineRays.Windows.Forms.FlyGrid::''

        // 我们找到这里了
        IL_004c:  ldstr      "Evaluation"
        IL_0051:  ldsfld     string [mscorlib]System.String::Empty
        IL_0056:  ldsfld     string [mscorlib]System.String::Empty

        // 这是什么呀,创建一个混淆过的对象呀,值得我们注意
        IL_005b:  newobj     instance void ''.'1'::.ctor(string,
                                                           string,
                                                           string)
        IL_0060:  stloc.0

        //*** 这是什么呀,弹出一个模式窗口,会不会是那上窗口呢?再看一下后面end of method FlyGrid::.cctor,明显是构造函数,在构造

    函数里显示模式窗口,肯定不会是正常的窗口,干掉再说
        //IL_0061:  ldloc.0
        //IL_0062:  callvirt   instance valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]

    System.Windows.Forms.Form::ShowDialog()
        //IL_0067:  pop
        IL_0068:  ret
      } // end of method FlyGrid::.cctor

        4. 我们继续查找,不过这次,不找[ Evaluation ]这个了,我们找[ '1'::.ctor( ]这个,看看还有没有类似的代码,找了几次后,我们

    来到
      .method public hidebysig virtual instance object
              EditValue(class [System]System.ComponentModel.ITypeDescriptorContext context,
                        class [mscorlib]System.IServiceProvider provider,
                        object 'value') cil managed
      {
        // 代码大小       20 (0x14)
        .maxstack  1
        .locals init (class ''.'1' V_0)
        IL_0000:  ldnull
        IL_0001:  stloc.0
        IL_0002:  ldloc.0
        // 别忘了修改下面这个地方哦,要不然,会编译失败的哦:)
        IL_0003:  brtrue.s   IL_0012 // 修改前 IL_0003:  brtrue.s   IL_000b

        // 我们找到的地方 有没有发现这段代码跟上面的代码很相似的呀?尤其是下面的显示对话框的过程,不管了,先把对话框拿掉再说
        // 在这里,别忘了上面的一个跳转语句哦,发现什么了?原来那个跳转的位置被我们干掉了,那就把跳改一下吧,呵呵:)
        IL_0005:  newobj     instance void ''.'1'::.ctor()
        IL_000a:  stloc.0
        //IL_000b:  ldloc.0
        //IL_000c:  callvirt   instance valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]

    System.Windows.Forms.Form::ShowDialog()
        //IL_0011:  pop
        IL_0012:  ldnull
        IL_0013:  ret
      } // end of method ''::EditValue

      5. 好了,可以先编译一下看看是不是破解成功了...
      ilasm /dll /resource=aaa.res aaa.il

      6. 看来运气不错,成功编译了,那我们就可以试试那个限制是不是被去掉了呢?
      7. 原来建的程序是可以运行了,不过发现个问题,在设计模式的时候,不正常呀,添加新列的时候,会异常

      8. 怎么办呢?看来按常规简单地把强命去掉,还是不够完美呀,这时候,在看雪的论坛上看到了“破解Spices.net v5.1 --- 试谈.net程序

    的破解”这篇文章,参考前辈的文章,换个思路吧,我们不去掉强命,而是修改强命名。

      9. 先来生成一个snk文件吧,嘿嘿,命令是sn -k sn.snk
      
      10. 下在来替换强命名吧

    去强名,用snr 替换吧(引自原来的)
    /SC 原强命名 新强命名
    /UC 原强命名 新强命名
    /B 原强命名 新强命名
    /SC 原强命名标识 新强命名标识
    /UC 原强命名标识 新强命名标识
    /B 原强命名标识 新强命名标识

       用一个snr.exe的小程序执行,其实就是二进制替换,前三个是替换强名称公钥,后三个是替换强名称公钥的,可以参考“破解Spices.net

    v5.1 --- 试谈.net程序的破解”,这篇文章,这一步可以在得到IL文件前,也可以放到编译完成后。
      组件文件列表:
          NineRays.FlyGrid.Styles.dll
          NineRays.FlyGrid.Design.dll
          NineRays.FlyGrid.Columns.DLL
          NineRays.FlyGrid.DLL
      11. 用StrongNameRemove20可以查看到三个文件的引用关系,而我们要修改的地方只在NineRays.FlyGrid.DLL里面,所以其他三个文件,只

    需要简单地把强命名替换了就好了(在我的附件里有snr.exe这个小工具,和生成的强命名文件,以及去掉强命和重新签强命名的CMD文件)
      12. 然后汇编以后,参照上面的代码去掉LOGO吧,注意,这次再去掉的时候就不要再把强命名去掉了哦。
      修改完成后即可编译,这次再测试一下吧,呵呵,OK了,收工...

      注意:VS2005步骤基本相同,这里不再重复^_^
  • 相关阅读:
    2019 USP Try-outs 练习赛
    XDTIC2019招新笔试题 + 官方解答
    2019 ICPC 南昌网络赛
    ICPC 2019 徐州网络赛
    Berlekamp Massey算法求线性递推式
    ICPC 2018 徐州赛区网络赛
    CCPC 2019 网络赛 1006 Shuffle Card
    CCPC 2019 网络赛 1002 array (权值线段树)
    CCF-CSP题解 201803-4 棋局评估
    CCF-CSP题解 201803-3 URL映射
  • 原文地址:https://www.cnblogs.com/cxd4321/p/1211841.html
Copyright © 2020-2023  润新知