zoukankan      html  css  js  c++  java
  • 关于.Net FrameWork 1.1 强名称的去除

    Net程序破解跟普通程序破解一样,大部分是修改检验注册的代码,直接返回已注册标记,或者了解注册机制写一个注册机。对于第一种修改代码的方法,必须解决.net强名称的问题。强名称为CLR提供了一个程序集的惟一性标识。除此之外,添加一个强名称还可确保二进制完整性,因为CLR可在程序集加载时执行验证,判断它自从编译以来是否被篡改过。

    一般去除强名称的方法是用ILAsm反编译程序,去除il文件中的.publickey和.hash algorithm一段,然后重新编译
      .custom instance void [mscorlib]System.Reflection.AssemblyDescriptionAttribute::.ctor(string) = ( 01 00 10 50 72 65 62 75 69 6C 74 20 52 65 6C 65   // ...Prebuilt Rele
                                                                                                        61 73 65 00 00 )                                  // ase..
      .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........
                    23 82 FC B1 06 95 23 CE 72 D8 49 49 7A 55 7A 44   // #.....#.r.IIzUzD
                    5C 15 1E AF 40 07 AA 79 AD EF 55 1A 82 04 CA 7F   // \...@..y..U.....
                    72 8E 53 78 60 7D 85 69 5B 16 F1 29 EC 35 BF 4A   // r.Sx`}.i[..).5.J
                    F1 5D CF 6D 35 81 DE B8 BB 0D EB B2 39 C3 3E 7F   // .].m5.......9.>.
                    12 71 A3 7C 7F 60 F1 04 4A E4 17 73 0F 50 82 AB   // .q.|.`..J..s.P..
                    EE 5F 9E C5 68 A8 A4 CE F0 40 74 39 47 55 70 63   // ._..h....@t9GUpc
                    76 E9 82 DC 6F 9D 15 43 0F AA AD 38 5A E8 F0 0A   // v...o..C...8Z...
                    77 EF 1C 97 51 7F 1A 15 17 00 4C E7 80 28 B9 CE ) // w...Q.....L..(..
      .hash algorithm 0x00008004

    但是并不是所有程序都可以反编译成功,有些程序反编译后无法重新编译,还有些反编译和编译都成功了,但是无法在设计环境设置属性。因此必须先去掉强名称,才能破解注册检验。

    网上有一个专门去除强名称的工具:snremove.exe。网址是:http://www.nirsoft.net/dot_net_tools/strong_name_remove.html
    我使用过效果不错,的确能去除强名称。但是这个工具有一个缺点,在windows 2003 server上会失效。

    我又找到网上另外一个去除强名称的工具:snremover.exe,这是tankaiha 写的,tankaiha 把去除签名称的机制都说的非常具体,请看下面的连接:

    http://vxer.cn/hmx/show.php?id=14
    http://vxer.cn/hmx/show.php?id=15
    令我不解的是 tankaiha说nirsoft的snremove不好用,无法去除强名称。但是我比较后发现则2个工具其实处理都一样的,都是把DLL位置为:1028处的50 20 00 00 80全部改为00。因此这两个工具是一样的。但是这两个工具都无法解决Windows 2003 Server下去除强名称失效的问题。

    我通过比较发现Windows 2003 Server是内置.Net Framework 1.1的,而且不能卸载重新安装,Windows 2003 Server的.net framework 1.1与标准的.net framework 1.1的区别是文件版本号不一样。标准.net framework 1.1的文件版本是1.1.4322.573,而Windows 2003 Server的是1.1.4322.2300,版本高好多。因此可以看出Windows 2003 Server的.net framework 1.1已经修补了强名称去除的漏洞,导致普通的强名称去除工具失效。

    解决办法:用标准.net framework 1.1的文件mscorsn.dll (版本号:1.1.4322.573),替换windows 2003的mscorsn.dll (版本号:1.1.4322.2300)。替换的目录是下面3个目录:
    c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\mscorsn.dll
    c:\WINDOWS\ServicePackFiles\i386\mscorsn.dll
    c:\WINDOWS\system32\dllcache\mscorsn.dll

    网上有更狠的破解强名称校验的方法就是直接破解mscorsn.dll ,把强名称校验StrongNameSignatureVerification和StrongNameSignatureVerificationFromImage都patch掉

    StrongNameSignatureVerification

    xor eax,eax
    inc eax
    retn 0ch


    StrongNameSignatureVerificationFromImage

    xor eax,eax
    inc eax
    retn 10h


    保存,替换原来的mscorsn.dll。

    这个方法尽管比较彻底,但是会导致其他不同版本的.net dll会调用错误,后果可能会很严重的。因此还是用低版本的mscorsn.dll 替换高版本的mscorsn.dll 比较安全。

     .Net的强名称并不能起到加密.net程序的作用,要加密.net程序比较困难,顶多只能防止反编译为可以识别的C#代码,用内嵌PE dll的方式加密,还是可以被破解的。 

  • 相关阅读:
    HDU 1022 Train Problem I
    HDU 1702 ACboy needs your help again!
    HDU 1294 Rooted Trees Problem
    HDU 1027 Ignatius and the Princess II
    HDU 3398 String
    HDU 1709 The Balance
    HDU 2152 Fruit
    HDU 1398 Square Coins
    HDU 3571 N-dimensional Sphere
    HDU 2451 Simple Addition Expression
  • 原文地址:https://www.cnblogs.com/cxd4321/p/1213297.html
Copyright © 2011-2022 走看看