FlyTreeView V4.3 破解手记
FlyTreeView V4.3 破解手记
Posted on 2008-07-12 13:27 快乐家++ 阅读(247) 评论(2) 编辑 收藏 网摘 所属分类: FlyTreeView Body:203.125,BeforeCate:0,312.5,Total:515.625
官方网址:http://www.9rays.net/
未破解前,会有45天的试用期限制。超其以后运行时会有异常:“9Rays.Net FlyTreeView for ASP.NET 2.0 evaluation period has
expired.”
破解工具:ildasm,ilasm,StrongNameRemove20, UEdit, Reflector(个人习惯使用,这个随便了) [注] ildasm[vs2003版]可以到看雪下载
修改版,原版的有限制
这个DLL的破解的关键是让它永不过期或者修改一个足够大的时间值让我们使用就可以了,网上有破解的就是直接修改它的过期期限,使用
用户可以使用的期限加长,达到破解。在本例中,我使用的是直接把过期异常干掉,使得永不过期。
1. 用ildasm打开NineRays.WebControls.FlyTreeView.dll,转存为aaa.il;
2. 找到用UEdit打开aaa.il,并找到"has expired",来到如下的代码处理
// 为了便于分析,我把reflactor的反编译代码贴出来
public FlyTreeView()
{
this.NodeEvents = new List<FlyTreeNodeEventArgs>();
DateTime maxValue = DateTime.MaxValue;
// 当然这个异常我们也可以去掉,但在本次过程中,我们主要去掉下面那个过期的异常部分
try
{
maxValue = File.GetLastWriteTime(base.GetType().Assembly.Location);
}
catch
{
throw new Exception("Unknown TRIAL version error has occurred.";
}
// 我们最关心的是过期的异常,所以这个异常是关键部分
if (maxValue < DateTime.Now.AddDays(-45))
{
throw new Exception("9Rays.Net FlyTreeView for ASP.NET 2.0 evaluation period has expired.";
}
this._flyControlCommon = new FlyControlCommon<FlyTreeView>(this, this.ViewState, this.Context);
this._dataBindings = new FlyNodeBindingCollection();
this._nodes = new FlyTreeNodeCollection(this);
this._nodeTypes = new FlyNodeTypeCollection();
this.ShadowNodes = new FlyTreeNodeCollection(this);
}
看了反编译的代码,简单一点儿,我们只要把
if (maxValue < DateTime.Now.AddDays(-45))
{
throw new Exception("9Rays.Net FlyTreeView for ASP.NET 2.0 evaluation period has expired.";
}
这段代码干掉就可以了啊?当然,我们也可以把
try
{
maxValue = File.GetLastWriteTime(base.GetType().Assembly.Location);
}
catch
{
throw new Exception("Unknown TRIAL version error has occurred.";
}
这段代码也干掉,呵呵。
那我们就开始吧,
下面我们结合反编译代码对下面的程序进行分析,并去掉关键的异常代码部分
// 源代码如下
.method public hidebysig specialname rtspecialname
instance void .ctor() cil managed
{
// 代码大小 173 (0xad)
.maxstack 5
.locals init (valuetype [mscorlib]System.DateTime V_0,
string V_1,
valuetype [mscorlib]System.DateTime V_2)
//*** this.NodeEvents = new List<FlyTreeNodeEventArgs>(); 对应的IL代码开始 ***//
IL_0000: ldarg.0
IL_0001: newobj instance void class [mscorlib]System.Collections.Generic.List`1<class
NineRays.WebControls.FlyTreeNodeEventArgs>::.ctor()
IL_0006: stfld class [mscorlib]System.Collections.Generic.List`1<class NineRays.WebControls.FlyTreeNodeEventArgs>
NineRays.WebControls.FlyTreeView::NodeEvents
//*** this.NodeEvents = new List<FlyTreeNodeEventArgs>(); 对应的IL代码结束 ***//
//**************** 获取最大的时间值,并保存到本地变量maxValue里对应IL就是V_0
//*** DateTime maxValue = DateTime.MaxValue; 对应的IL代码开始 ***//
IL_000b: ldarg.0
IL_000c: call instance void [System.Web]System.Web.UI.WebControls.HierarchicalDataBoundControl::.ctor()
IL_0011: ldsfld valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::MaxValue
IL_0016: stloc.0
//*** DateTime maxValue = DateTime.MaxValue; 对应的IL代码结束 ***//
// ************************************ 第一个异常的代码对应 开始 ***********************************//
//************ 取文件的最后修改时间值,正常的话保存到本地变量maxValue里对应IL就是V_0,如果错误,则异常
* reflector反编译代码
* try
* {
* maxValue = File.GetLastWriteTime(base.GetType().Assembly.Location);
* }
* catch
* {
* throw new Exception("Unknown TRIAL version error has occurred.";
* }
* 对应的IL 代码
.try
{
IL_0017: ldarg.0
IL_0018: call instance class [mscorlib]System.Type [mscorlib]System.Object::GetType()
IL_001d: callvirt instance class [mscorlib]System.Reflection.Assembly [mscorlib]System.Type::get_Assembly()
IL_0022: callvirt instance string [mscorlib]System.Reflection.Assembly::get_Location()
IL_0027: stloc.1
IL_0028: ldloc.1
IL_0029: call valuetype [mscorlib]System.DateTime [mscorlib]System.IO.File::GetLastWriteTime(string)
IL_002e: stloc.0
IL_002f: leave.s IL_003d
} // end .try
catch [mscorlib]System.Object
{
IL_0031: pop
IL_0032: ldstr "Unknown TRIAL version error has occurred."
IL_0037: newobj instance void [mscorlib]System.Exception::.ctor(string)
IL_003c: throw
} // end handler
// ************************************ 第一个异常的代码对应 结束 ***********************************//
// ************************************* 第二个异常的代码对应 开始 ***********************************//
//************ maxValue跟当前时间-45天相比较,如果在试用期内,则正常,不在试用期内,则异常
* reflector反编译代码
* if (maxValue < DateTime.Now.AddDays(-45))
* {
* throw new Exception("9Rays.Net FlyTreeView for ASP.NET 2.0 evaluation period has expired.";
* }
* IL 代码开始
// ******** 这里开始是判断当前时间与文件创建时间的比较,如果在试用期内,则正常试用,否则则抛出过期的异常
IL_003d: ldloc.0
IL_003e: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_Now()
IL_0043: stloc.2
IL_0044: ldloca.s V_2
IL_0046: ldc.r8 -45.
IL_004f: call instance valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::AddDays(float64)
IL_0054: call bool [mscorlib]System.DateTime:p_LessThan(valuetype [mscorlib]System.DateTime,
valuetype [mscorlib]System.DateTime)
IL_0059: brfalse.s IL_0066 // 如果没超出试用期,则跳转,否则抛异常
// 我们的思路,不管是否超出试用期都不让它抛出异常,那么我们最简单的方法,就是把抛异常的代码段干掉
// 那我们还等什么呀,直接把下面的关键部分代码注释掉不就行了吗,呵呵:) 是不是很Easy的啊
//************************* 关键位置开始 ^_^ *******************************************************//
//IL_005b: ldstr "9Rays.Net FlyTreeView for ASP.NET 2.0 evaluation p"
//+ "eriod has expired." // 查找到的位置***************************
//IL_0060: newobj instance void [mscorlib]System.Exception::.ctor(string)
//IL_0065: throw
//************************* 关键位置结束 ^_^ *******************************************************//
// ************************************* 其他类域的初始化代码 开始 ***********************************//
* reflector反编译代码
* this._flyControlCommon = new FlyControlCommon<FlyTreeView>(this, this.ViewState, this.Context);
* this._dataBindings = new FlyNodeBindingCollection();
* this._nodes = new FlyTreeNodeCollection(this);
* this._nodeTypes = new FlyNodeTypeCollection();
* this.ShadowNodes = new FlyTreeNodeCollection(this);
* IL 代码开始
IL_0066: ldarg.0
IL_0067: ldarg.0
IL_0068: ldarg.0
IL_0069: callvirt instance class [System.Web]System.Web.UI.StateBag [System.Web]System.Web.UI.Control::get_ViewState()
IL_006e: ldarg.0
IL_006f: callvirt instance class [System.Web]System.Web.HttpContext [System.Web]System.Web.UI.Control::get_Context()
IL_0074: newobj instance void class NineRays.WebControls.FlyControlCommon`1<class
NineRays.WebControls.FlyTreeView>::.ctor(!0,
class [System.Web]System.Web.UI.StateBag,
class [System.Web]System.Web.HttpContext)
IL_0079: stfld class NineRays.WebControls.FlyControlCommon`1<class NineRays.WebControls.FlyTreeView>
NineRays.WebControls.FlyTreeView::_flyControlCommon
IL_007e: ldarg.0
IL_007f: newobj instance void NineRays.WebControls.FlyNodeBindingCollection::.ctor()
IL_0084: stfld class NineRays.WebControls.FlyNodeBindingCollection NineRays.WebControls.FlyTreeView::_dataBindings
IL_0089: ldarg.0
IL_008a: ldarg.0
IL_008b: newobj instance void NineRays.WebControls.FlyTreeNodeCollection::.ctor(object)
IL_0090: stfld class NineRays.WebControls.FlyTreeNodeCollection NineRays.WebControls.FlyTreeView::_nodes
IL_0095: ldarg.0
IL_0096: newobj instance void NineRays.WebControls.FlyNodeTypeCollection::.ctor()
IL_009b: stfld class NineRays.WebControls.FlyNodeTypeCollection NineRays.WebControls.FlyTreeView::_nodeTypes
IL_00a0: ldarg.0
IL_00a1: ldarg.0
IL_00a2: newobj instance void NineRays.WebControls.FlyTreeNodeCollection::.ctor(object)
IL_00a7: stfld class NineRays.WebControls.FlyTreeNodeCollection NineRays.WebControls.FlyTreeView::ShadowNodes
// ************************************* 其他类域的初始化代码 结束 ***********************************//
IL_00ac: ret
} // end of method FlyTreeView::.ctor
3. 别忘了看一下文件开头有没有加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........
EB FD B1 7F 49 35 9E C0 95 39 EE 11 CD D2 30 A3 // ....I5...9....0.
72 D3 A0 72 DD 10 42 86 EA 59 60 AB 5F C4 3F 7F // r..r..B..Y`._.?.
09 A7 6C 5E FA D0 54 FF B9 B7 12 C6 13 DD 6D C3 // ..l^..T.......m.
D3 5B E4 90 76 EC CC 92 CD B0 7E 9B 22 A5 A4 71 // .[..v.....~."..q
D0 EA 1A EE 0D 6B BE 82 55 D6 7E B2 7F B1 32 DB // .....k..U.~...2.
50 5B F7 50 07 19 91 59 22 BF FB 82 A9 0B F7 DE // P[.P...Y".......
87 36 F9 6C 19 CA D9 63 55 63 78 44 C6 33 6C 55 // .6.l...cUcxD.3lU
39 00 7B 0A 89 8E C2 C5 8E 4A 52 C2 8E 23 37 B3 ) // 9.{......JR..#7.
.hash algorithm 0x00008004
还在想什么呢?直接删除呀,嘿嘿
4. 到现在破解就完工了,可以编译新的程序了。ilasm /dll /resource=aaa.res aaa.il,得到的aaa.dll即为完美破解版了。
顺便说一句,使用的时候,最好先安装原版,再把破解版覆盖,就好了
如果感觉好用,请支持正版
转载于:https://www.cnblogs.com/zhangbinghe/archive/2009/07/23/1529227.html
FlyTreeView V4.3 破解手记相关推荐
- Uninstall Tool 破解手记
0x0 简述 Uninstall Tool是目前我所用过的最强的傻瓜化卸载工具了[专业手段除外],软件本身很小巧,但是涉及卸载相关的功能却很全面,如下图介绍所示: 此工具有两种形态,一种是安装包版,一 ...
- Hawaiki Keyer 4 Mac(AE/FCPX抠图遮罩插件) v4.5破解版
Hawaiki Keyer 4 Mac 破解版是一款非常不错的AE/FCPX抠图遮罩插件,适用于绿屏和蓝屏,专为Apple的Final Cut Pro X和After Effects而设计,其中包括两 ...
- safeengine虚拟机licence破解手记
声明:请支持使用正版软件,尊重原作者的劳动成果,此文只做技术交流,如有他人利用,产生后果,不负任何责任. Safengine是一个具有反调试.反附加.动态自效验等功能,同时提供了对代码的变形.乱序和虚 ...
- 【破解手记】普利尼,破解手记[3]
趁上班间隙偷懒再上来更新一下.上回书把文本破解方面基本都介绍过了,本回就来扯一下图片方面. 该游戏用到的图片格式有三种txp,dat,GM3.txp格式上回书已经说过了,本回主要介绍dat和GM3. ...
- 最新推荐:【凯立德 移动导航系统】【V4.0 破解版】3D高清地图
发现一个网站,有好多手机软件供下载的.很实用,现在转过来,大家分享分享! 3D实景地图,复杂路口不再迷航.凯立德明星产品,百万车主用户的共同选择! - 覆盖全国所有复杂路口,3D实景全屏清晰呈现. 1 ...
- ASPMaker4_2破解手记(原创)
本破解仅作学习研究用,请勿用于任何不法行为,否则后果自负. 软件名称:ASPMaker4.2 下载:http://www.onlinedown.net/soft/25067.htm 编码语言:DELP ...
- SQLDBCompare_Rel2.0破解手记
引子:montaque POST了数据库脚本版本控制 和 数据库比较工具,推荐了工具SQLDBCompare,于是有了此文. 正文:一路NEXT下来顺利安装完毕,立刻启动程序来尝尝鲜,咚 未授权,还剩 ...
- CAD批量打印软件破解手记(E01著)
目标文件:CAD批量打印软件, 一个小打印软件居然要30元注册费,太黑了点 检查:无壳 VB语言做的 运行: 1.注册:您的注册码是错误的.... VBexplorer检查: 注册码窗口是form4 ...
- Dr.COM宽带认证客户端共享上网破解V3.46
校园网使用了Dr.COM宽带登录用户认证程序,Dr.COM对P2P下载限速,禁止单网卡代理.双网卡.宽带路由器共享上网,禁止通过修改IP和Mac地址接入.为了省钱,我决定将我们寝室只交一台电脑的上网费 ...
最新文章
- Streams那些事之概述与原理
- qt当前工程相对路径_QT编程:(6)相对路径问题
- [LeetCode]547. Friend Circles朋友圈数量--不相邻子图问题
- UITableView加载几种不同的cell
- mysql 删除记录代码_mysql 删除记录时报错
- python廖老师_Python3.5-20190518-廖老师-自我笔记-面向对象
- PMP搞心态,解读最新『三大领域』考试内容:(附上第7版教材)
- PPT无法插入视频,验证编码解码器
- win11怎么改成win7界面设置?
- EBS系统常见问题与故障
- 4 Three.js一个案例详解
- PLY的LALR语法详细解释
- 手把手做一个JSP入门程序(九):购物车的基本实现(Servlet)
- python获取中文字体点阵坐标_Python实现点阵字体读取与转换
- pdf怎么编辑连续页码
- Android版本代号
- Uipath Excel-读取操作(Read Row)
- matlab生成一个数值一样的向量
- 五种前端布局之float布局
- 【大唐杯学习超快速入门】5G技术原理仿真教学——通信网络认知
热门文章
- win10计算机的用户和组,win10用户和组介绍
- Html实现视频播放器(超级简单)
- 海龟交易法--本地回测(Python)
- Oracle中as关键字
- 使用JSONObject生成和解析json
- 云平台分为三种类型IaaS, PaaS和SaaS
- 【解决方案】不能解决org.apache.commons:commons-math:2.2
- 从高考到程序员--------你到底在追求着什么?------串烧似的文章
- Kettle内存OutOfMemory错误解决办法
- 第2周项目2—就拿胖子说事