根据以往破解经验及之前破解FlyTreeView for ASPNET 的经历Web控件的试用限制通常是在 NewRenderInit等位置实现为此我们直接展开NineRaysWebUIWebControlsFlyTreeView中的FlyTreeView类以(图六)中抛出的异常信息RaysNet FlyTreeView for ASPNET TRIAL license has expired 为线索逐个浏览该类中的重点方法与函数的反汇编代码发现异常是在FlyTreeView类的构造函数New()中抛出的其高级语言代码如下
相关截图见(图八)
显然关键代码是
GlobalTRIAL_EXPIRE_DATE中保存的应该是控件试用的最后期限我们只要将GlobalTRIAL_EXPIRE_DATE中的期限值向后延长一定年限就可以达到破解的要求了因为我们毕竟不是要做该控件的注册机不需要再做更复杂的分析为此我们在点击(图八)中蓝色加亮的TRIAL_EXPIRE_DATE转到静态全局类Global浏览其相关代码我们找到了如下关键代码
相应的截图见(图九)
在以上由Reflector反编译出的代码中以VBNET和Delphi代码最为直观它使我们一眼就看出该控件的最后使用期限为2004年8月3日(不同时间下载或安装的FlyTreeView表现在代码中的截止日期可能不同笔者未特意考证)
下一步的工作就是进入实际破解了
3控件破解
在工作目录中双击反汇编批处理文件myildasmbat工作目录中便出现了反汇编后得出的NineRaysWebUIWebControlsFlyTreeViewil等相关文件见下表
用记事本打开NineRaysWebUIWebControlsFlyTreeViewil向后翻一至两页可以看到如下代码这是用于控件签名的公钥应将其删除以避免破解后的控件的被GAC踢出去且添加不进工具箱
在记事本中利用查找功能查找xd (2004年)结合前面Reflector反汇编时得到的有关线索可以确定NineRaysWebUIWebControlsFlyTreeViewil中对应Global()的构造函数的IL汇编代码如下
将上述代码中的 xd改为我们需要的年份就可以达到我们破解的目的需要注意的是新的年份值不可过大否则可能超出操作系统支持的上限那就可能出现万年虫了这个值改为2050年就已经足够了因为人们不可能在四十多年后还在使用这个版本的FlyTreeView况且到那时如果微软还侥幸存在的话恐怕连DOTNET都不知被它淘汰到哪里去了2050对应的十六进制表示为x修改后保存NineRaysWebUIWebControlsFlyTreeViewil
接下来就是使用汇编工具ILASM编译破解后的代码了
在编译之前我们对也对控件来个数字签名(强名称不是必需的也可以不做但如果不想做的话请将myilasmbat中的/key:treekeysnk指令删除)
要进行数字签名首先要使用SN.EXE产生签名密钥在资源管理器中右击工作目录FlyTreeView破解的文件夹图标后在弹出菜单中选择进入命令行然后再DOS窗口键入sn k treekeysnk回车一个新的随机密钥对便存储到了工作目录下的treekeysnk文件中
接下来便进入实际编译过程了关闭DOS窗口和Reflector等软件回到资源管理器删除工作目录中的NineRaysWebUIWebControlsFlyTreeViewdll然后双击工作目录中的批处理文件myilasmbat等编译工作结束就可以看到一个新的NineRaysWebUIWebControlsFlyTreeViewdll出现在工作目录中
至此如果之前的工作没有失误的话FlyTreeView控件的破解工作就结束了
四破解后的测试
启动 Visual Studio NET 打开FlyTreeView示例站点Samples目录中的示例项目Samplescsproj在解决方案资源管理器中将项目对NineRaysWebUIWebControlsFlyTreeView的引用删除将对破解后的NineRaysWebUIWebControlsFlyTreeView的引用添加进来并顺便将其添加到工具箱中
重新生成Samples项目后将系统日期向后调整数年在浏览器中浏览示例站点你会发现不再抛出异常
为最后确认破解是否成功换另外一台机器使用ip地址或域名方式访问该示例站点一切正常