首页
社区
课程
招聘
[原创]DotNetBar6.2.0.2破解(.net最新组件)
发表于: 2007-1-14 12:28 10989

[原创]DotNetBar6.2.0.2破解(.net最新组件)

2007-1-14 12:28
10989
前几天需要编写一个对界面要求比较高的程序,想到了Dotnetbar,在google上搜索,哈哈,找到了

DotNetBar 5.9 with Office 2007 style controls Released,Are you ready? cracked perfectly! 文章,链接地址在

http://www.cnblogs.com/aspsir/archive/2006/08/03/467154.html

作者为恩电――只有热恋般的激情和宗教般的执着才能成就一份事业

破解的不错,可是我在网上找了半天也没有找到5.9版本的安装文件,一点也不爽。去了官方网站却看到了DotNetBar6.2.0.2版本,下载回来,安装,替换成上面的文件,不幸,程序出错,看来不好整。
作者也不提供破解思路,唉,不爽,俗话说,
授人鱼不如授人以渔,呵呵,不废话了,现在动手搞这个新版本的。

首先在网上找看看有没有人写以前版本地破解心得,呵呵,充分利用前人的成果嘛。。。

还真找到了。DotNetBar 4.6.0.0 ,为了表示对此大侠的尊重,特把文章贴过来
*********************************************************************
DotNetBar 是一个控件工具包,包含多种很漂亮的控件,适合于winform界面
主要限制:
1、弹出窗口
2、30天时间限制
1)使用ildasm解开DevComponents.DotNetBar.DLL,查找evaluation发现弹出窗口的代码在
如下地方定义
public 0H();
Declaring Type: DevComponents.DotNetBar.0H
进一步查找,发现在
1、public class DevCoLicenseProvider : LicenseProvider
Name: DevComponents.DotNetBar.DevCoLicenseProvider
2、class DotNetBarManager : Component, IExtenderProvider, IOwnerItemEvents, IOwnerMenuSupport, IOwner, IOwnerBarSupport, IOwnerAutoHideSupport, 4, IOwnerLocalize
Name: DevComponents.DotNetBar.DotNetBarManager
两个地方有调用,发现没有逻辑条件,任何情况都会显示,所以在
il文件中直接去掉相关调用代码即可。

2)il文件查找expired,发现在如下地方判断时间是否过期
internal static bool BA();
Declaring Type: DevComponents.DotNetBar.9
Assembly: DevComponents.DotNetBar, Version=4.6.0.0
分析逻辑,只要简单的在
.ctor()中修改
9.08U = Color.Empty;

9.08U = Color.Black;
直接修改il文件,去掉public key,重新用ilasm组装。

3)类似修改DotNetBarDesigner.exe,去掉对DevComponents.DotNetBar.DLL
调用的public token,完成。

重新编译后可以测试看看!

**********************************************************************

拿出reflector,呵呵,对照着看了下,很真差不多,ok开始行动

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 222
活跃值: (115)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
上会书说到拿出reflector,还不够,按照我的思路,我喜欢在二进制程度上修改程序,呵呵,这是还得拿出一样东西,一本书Inside Microsoft .NET IL Assembler,这可是一本好书啊,IL指令全部在里面。首先考虑在二进制程度上修改:

找到弹出未注册版本对话框的地方,根据前人的思路,有两个地方啊

第一个

1、DevCoLicenseProvidermethod public hidebysig virtual instance [System]System.ComponentModel.License GetLicense([System]System.ComponentModel.LicenseContext context, [mscorlib]System.Type 'type', object instance, bool allowExceptions) cil managed{      .maxstack 3      .locals init (            [0] DevComponents.DotNetBar.7K k1,            [1] DevComponents.DotNetBar.61 1,            [2] DevComponents.DotNetBar.61 2)      L_0000: ldnull       L_0001: stloc.0       L_0002: ldarg.1       L_0003: brfalse.s L_0034      L_0005: ldstr ""      L_000a: newobj instance void DevComponents.DotNetBar.7K::.ctor(string)      L_000f: stloc.0       L_0010: ldarg.1       L_0011: callvirt instance [System]System.ComponentModel.LicenseUsageMode [System]System.ComponentModel.LicenseContext::get_UsageMode()      L_0016: brtrue.s L_0027      L_0018: newobj instance void DevComponents.DotNetBar.61::.ctor()      L_001d: stloc.1       L_001e: ldloc.1       L_001f: callvirt instance [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.Form::ShowDialog()[j1]       L_0024: pop       L_0025: br.s L_0034      L_0027: ldarg.1       L_0028: ldarg.2       L_0029: ldloc.0       L_002a: callvirt instance string [System]System.ComponentModel.License::get_LicenseKey()      L_002f: callvirt instance void [System]System.ComponentModel.LicenseContext::SetSavedLicenseKey([mscorlib]System.Type, string)      L_0034: ldloc.0       L_0035: brtrue.s L_0052      L_0037: ldarg.1       L_0038: brfalse.s L_0052      L_003a: newobj instance void DevComponents.DotNetBar.61::.ctor()    !!new 弹出未注册版本的对话框       L_003f: stloc.2       L_0040: ldloc.2       L_0041: callvirt instance [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.Form::ShowDialog()!!!弹出未注册版本的对话框      L_0046: pop       L_0047: ldstr ""      L_004c: newobj instance void DevComponents.DotNetBar.7K::.ctor(string)      L_0051: stloc.0       L_0052: ldloc.0       L_0053: ret }--------------------------------------------------------------------------------将上面的指令弄成二进制代码,以便于在UltraEdit中查找到指定位置,并作相应的修改这个工作有点繁琐了,好在代码不多,关于il指定和二进制的对应,请参考上面的书籍 L_0000: ldnull                                                        14      L_0001: stloc.0                                             0A      L_0002: ldarg.1                                             03      L_0003: brfalse.s L_0034                                2c 后面跟着 int8      L_0005: ldstr ""                                                             72后面跟着 string      L_000a: newobj instance void DevComponents.DotNetBar.7K::.ctor(string) 73 后面是 method(method是未知的二进制代码)      L_000f: stloc.0                                                             0a      L_0010: ldarg.1                                             03      L_0011: callvirt instance [System]System.ComponentModel.LicenseUsageMode [System]System.ComponentModel.LicenseContext::get_UsageMode()          6F method      L_0016: brtrue.s L_0027                                 2d int8      L_0018: newobj instance void DevComponents.DotNetBar.61::.ctor()  73后面是method      L_001d: stloc.1                                             0B      L_001e: ldloc.1                                              07      L_001f: callvirt instance [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.Form::ShowDialog()      6F method       L_0024: pop                                                                 26      L_0025: br.s L_0034                                                      2B int8--------------------------------------------------------------------------------暂时查找到此处好了再UltraEdit里面二进制查找 14 0A 03 2C,并对照后面的几个字节,终于找到了合适的地方,将弹出对话框的那个地方6F method(一共6F一个字节+ method四个字节 = 5个字节),全部修改为00 00 00 00 00 (就是nop空操作)存盘退出 第二个地方DotNetBarManager 发现构造函数里面就有弹出对话框的,晚上有点事情要出去下,回来再写,大家多多包涵
2007-1-14 12:29
0
雪    币: 222
活跃值: (115)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
上回说道DotNetBarManager 发现构造函数里面就有弹出对话框的,

.method public hidebysig specialname rtspecialname instance void .ctor([System]System.ComponentModel.IContainer cont) cil managed{.maxstack 4      .locals init (            [0] DevComponents.DotNetBar.61 1)      L_0000: ldarg.0       L_0001: ldc.i4.1 ............................................................一直来到L_00a5: ldarg.0       L_00a6: call instance void [System]System.ComponentModel.Component::.ctor()      L_00ab: newobj instance void DevComponents.DotNetBar.61::.ctor()      L_00b0: stloc.0 [j1]    0a      L_00b1: ldloc.0    06      L_00b2: callvirt instance [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.Form::ShowDialog()[j2]    6F method !弹出对话框      L_00b7: pop                                26      L_00b8: ldloc.0                             06      L_00b9: callvirt instance void [System]System.ComponentModel.Component::Dispose()                                                              6F method      L_00be: ldarg.0                              02      L_00bf: ldarg.1                              03      L_00c0: call instance void DevComponents.DotNetBar.DotNetBarManager::07P([System]System.ComponentModel.IContainer)  28      L_00c5: ret }-------------------------------------------------------------------------------- 这下和上面的一样 6F method    把ShowDialog nop掉就行了,和上一篇介绍的方法一样 先修改了这两处,用ultraedit存盘后。替换相应的dll文件,DevComponents.DotNetBar2.dll好了,运行程序,出现了  未处理 System.IO.FileLoadExceptionMessage: 未能加载文件或程序集“DevComponents.DotNetBar2, Version=6.2.0.2, Culture=neutral, PublicKeyToken=7eb7c3a35b91de04”或它的某一个依赖项。强名称验证失败。 (异常来自 HRESULT:0x8013141A)的错误 看清楚了,基本上就是强名称验证失败 的问题,真不爽。应该考虑到这样的产品化的dll应该肯定强名过的 没办法,去网上看看有没有好的解决办法。 先解释一下强名方面的知识 强名称保护用户不会使用一个被篡改的程序集。一个没有强名称的程序集只能被使用在非常小的范围内。如果你分发一个没有进行正确签名的程序集,将不能保证它没有被篡改。如果用户没有设置忽略强名称确认,CLR将会拒绝载入这个程序集。 下面任何一条都会引起这条规则校验失败: 1.  这个程序集没有进行强名称签名2.  进行签名后,这个程序集被修改过。3.  程序集被设置成延迟签名4.  程序集签名失败5.  程序集需要一定的注册表设置才能通过强名称校验 上面的文字是从网站上拷贝的,说直白点,就是说,对于强名称验证过的dll,exe等,修改将导致验证失败,不能正常运行。如果删除强名称或者用其他密钥对签名,会导致publickey不同,程序里一个AssemblyName.GetPublicKey就死翘了。 在网上看到一个写的一篇文章,是解决所有类似问题的,从修改.net framework的角度解决的。 所以,能蒙混过系统的验证最好。StrongName强名称相关的操作在mscorsn.dll里,里面有三个导出函数是验证相关的:StrongNameSignatureVerificationStrongNameSignatureVerificationEx(调用StrongNameSignatureVerification)StrongNameSignatureVerificationFromImage为了保险起见,把StrongNameSignatureVerification和StrongNameSignatureVerificationFromImage都patch掉:StrongNameSignatureVerificationxor eax,eaxinc eaxretn 0chStrongNameSignatureVerificationFromImagexor eax,eaxinc eaxretn 10h保存,替换原来的mscorsn.dll。运行一个修改过的具有强名称的.net可执行文件,成功~ 记得没事的时候要改回去哦,改回去要安全一些的。 我靠,太复杂了修改.net framework,有点太那个了吧。 不过就没有办法了么,不是,下面就介绍如何解决问题,以为涉及到强名的去除,就得使用ildasm、ilasm工具了在下一篇文章中具体介绍。
2007-1-14 12:31
0
雪    币: 222
活跃值: (115)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
首先使用ildasm,把dll反编译成il代码

首先新建一个目录用于存放反编译后的il代码,把DevComponents.DotNetBar2.dll文件拷贝到刚才新建的目录下,

新建一个dasm.bat的文本文件,写 命令 ildasm DevComponents.DotNetBar2.dll /out=DevComponents.il

为什么要使用bat文件呢,方便啊,不用在命令行输入那么多东西。

好了,开始-找到Microsoft Visual Studio 2005,Visual Studio Tools-Visual Studio 2005 命令提示

出来命令窗口,进入 新建的目录,输入dasm

等一会,发编译出来一大堆文件,还有很多的资源文件,如resources,ico,png什么的。

其他的不看了,关键是il代码。使用editplus打开DevComponents.il,

首先去掉 .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........
                41 0A EC E4 75 57 4B 7C 69 A4 C3 9A 91 02 06 54   // A...uWK|i......T
                3A 84 0D A4 8C 47 3F 4A AD 01 59 6B 2E BB D2 1D   // :....G?J..Yk....
                FE E3 13 B8 87 F5 B8 80 3E 3B EB 6E 23 30 4F 79   // ........>;.n#0Oy
                3F B6 59 D3 FA 70 75 FC A8 C0 F6 CD CA 72 42 DF   // ?.Y..pu......rB.
                7E 88 D8 CF 32 D6 8D 9E 06 B6 C4 82 91 73 5B BC   // ~...2........s[.
                1E AA 85 8B 0A 28 11 88 E2 9D 61 5A 0C 91 7D CB   // .....(....aZ..}.
                14 7C 77 0F 3D 7A 7F 9F 37 7D 54 29 FD D8 2F BD   // .|w.=z..7}T)../.
                44 74 6F D3 6D D5 47 67 A9 AB 5E 77 71 67 94 D2 ) // Dto.m.Gg..^wqg..

把它删除掉,

简单的看了下il代码,发现弹出对话框的地方还是类似于

callvirt   instance valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.Form::ShowDialog()

这样的形式,好了,搜索 System.Windows.Forms.Form::ShowDialog,有很多的地方,需要分辨出

哪些是弹出未注册版本的对话框。怎么分辨呢,看前面的代码,如

newobj     instance void DevComponents.DotNetBar.'61'::.ctor()
    IL_0005:  stloc.0
    IL_0006:  ldloc.0
    IL_0007:  callvirt   instance valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.Form::ShowDialog()
    IL_000c:  pop

相当于就是new 61的对话框,stloc.0
再取出来(ldloc.0)这个变量,然后调用ShowDialog(),好了,还是原来的招数,nop掉,现在要修改的话,就不是弄机器码了,要写il代码

    IL_0007:  callvirt   instance valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.Form::ShowDialog()

修改完了如下

IL_0007:  nop
IL_0008:  nop
IL_0009:  nop
IL_000a:  nop
IL_000b:  nop

看,下面正好接上 IL_000c:  pop

好了,接着查找,System.Windows.Forms.Form::ShowDialog查看上面是不是‘61’的Dialog,如果是就按照上述方法修改掉

直到全部修改完毕。存盘il文件。

接着要重新生成dll文件

新建一个asm.bat的文件,写入

ilasm /dll /res:DevComponents.res DevComponents.il /out:DevComponents.DotNetBar2.dll /quiet

执行命令 asm,重新生成dll文件,拷贝到Dotnetbar的安装目录,替换原来的文件,好了,运行相关的示例程序

还是出现错误,没有一个能运行的,郁闷。。

重新编译示例程序也不行,这时候想到了GAC(全局程序集缓存中),是不是这些程序使用了GAC里面的dll阿,去GAC
目录C:\WINDOWS\assembly,我使用的是xp,删除掉DevComponents.DotNetBar2,后重打开vs.net2005想重新编译程序,
发现设计器错误,根本不能在。net开发环境下加载设计器。还有,就是在GAC把这个组件删除掉了,总觉得不舒服,感觉
给原来的不一样了,好了,下面讲讲如何重新给修改的程序签名,并加入到全局缓存。
2007-1-14 12:32
0
雪    币: 222
活跃值: (115)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
好了,下面对程序实施强名,并加入到全局缓存

使用强名称,要生成此加密密钥对,使用 SN 工具来生成,SN 工具易于使用。命令行语句采用以下形式:

sn -k "[DriveLetter]:\[DirectoryToPlaceKey]\[KeyName].snk"
好了那在il代码的目录,生成一个DevComponents.snk的文件

sn -k DevComponents.snk

Microsoft (R) .NET Framework 强名称实用工具 版本 2.0.50727.42
Copyright (c) Microsoft Corporation.  All rights reserved.

密钥对被写入 DevComponents.snk

提示创建成功了。好了,再把它编译进去就行了,修改asm.bat

ilasm /dll /res:DevComponents.res /key:DevComponents.snk DevComponents.il /out:DevComponents.DotNetBar2.dll /quiet

/key:DevComponents.snk 就是加入编译进取强名的选项

好了,删除先前编译生成的dll,重新执行asm,生成新的dll文件。

把生成DevComponents.DotNetBar2.dll拷贝到安装目录下,覆盖原来的文件,看到了目录里面有个remove.bat

打开看看,"D:\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /u DevComponents.DotNetBar2
呵呵,原来是调用卸载DevComponents.DotNetBar2在GAC缓存的。对了,我的vs.net安装在D盘的。

好了,复制一个bat文件,修改成add.bat,修改文件内容 /u 修改成/i ,i就是安装了,呵呵

"D:\Microsoft Visual Studio 8\SDK\v2.0\Bin\gacutil.exe" /i DevComponents.DotNetBar2

好了,去GAC目录,DevComponents.DotNetBar2已经有了。好了,重新编译示例程序,ok

全部搞定!!!

ok,DotNetBar6.2.0.2破解全部结束了,有什么问题大家给我

邮件jetws@163.com

qq 94473032。需要文件的给我写邮件或者在下面评论留下自己的邮件,我通过邮件给各位发过去。
2007-1-14 12:32
0
雪    币: 222
活跃值: (115)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
格式有点乱,需要看清晰的
http://jetboy.blog.hexun.com/
或者http://www.jetboy.cn/
2007-1-14 12:33
0
雪    币: 5275
活跃值: (451)
能力值: (RANK:1170 )
在线值:
发帖
回帖
粉丝
7
通常把这种软件称作“裸奔”
2007-1-14 15:55
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
8


超哥好久不来了,现在忙什么?
2007-1-14 17:14
0
雪    币: 222
活跃值: (115)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
呵呵,牛老弟,谢谢支持阿
2007-1-14 20:04
0
游客
登录 | 注册 方可回帖
返回
//