分享
 
 
 

FlyTreeView for ASP.NET 3.2 破解攻略

王朝c#·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

FlyTreeView for ASP.NET 3.2 破解攻略

三君DotNet工作室 君 仁

近日对目前较为流行的Asp.Net TreeView 控件的性能进行了测试。如RadTreeView,FlyTreeView,IEWebControlTreeView等。总体感觉,作为一个独立产品,FlyTreeView的外观更为俏丽,性能也最为丰富,可谓精雕细琢。用它遍历服务器硬盘,仿真资源管理器目录的速度是非常快的;它所具有的独一无二的异步加载功能,对那些梦想把全部数据都绑定到一个Web树上,又不想影响客户端加载速度的程序开发者来讲,FlyTreeView切实能使我们鱼肉和熊掌兼得。用过一段时间的IEWebControlTreeView,深感其性能的平平,反应的迟缓,因而一见到FlyTreeView for ASP.NET 3.1 便爱不释手,FlyTreeView for ASP.NET 3.2 出来以后便立即下载了一个。由于试用期过后必须调整“座机”的系统时间才能继续使用,感觉很不方便,便决定自己动手,延长一下试用期,也借机学习一下优秀软件的编制技巧,了解一些书本上得不到的知识。

一、环境准备

1、基本环境:Microsoft Visual Studio .NET 200X开发环境和IIS服务。

2、PATH环境:为方便在命令行上使用有关工具,需要确保更新系统的PATH环境变量。以使系统能在任何目录下都能找到所需的.NET工具。为此,需要将 X:\Program Files\Microsoft Visual Studio .NET 2003\SDK\v1.1\Bin和X:\winnt\Microsoft.NET\Framework\v1.1.4322(v1.0.3705)这两个目录的完整路径添加到PATH环境变量字符串的末尾,如(图一):

另外,为确保在任何目录下都能进入命令行,须对文件夹的右键菜单添加一个进入命令行的快捷选项。其方法见(图二)。这样,在资源管理器中当对需要进入命令行的文件夹右击鼠标的时候,就会出现图三的画面,选择“进入命令行”即可,免去了手工键入全路径的繁琐过程,见(图三)。

二、工具准备

1、反编译器:代码分析工具我用的是Reflector 4.1.6.0 的试用版,可从 http://www.aisto.com 下载最新版本,Reflector 可以将目标代码反编译成IL、C#、VB.NET、 Delphi四种语言,可供你根据自己的语言习惯进行选择。 Reflector 试用版装载后如果出现过期问题,可通过调整系统时钟予以解决,当然,也可以试着用Reflector自己把Reflector的代码分析一下将这个问题解决了,但不这样做也不影响我们的后续工作。将控件完整的反编译成破解档的工具就使用环境中已有的Microsoft免费提供的MSIL反汇编器ILDASM。经过第一步的准备,我们已经可以在需要的时候在任何目录中调用它。

2、汇编程序:使用环境中已有的Microsoft免费提供的MSIL汇编程序ILASM,通过使用 Ilasm.exe 运行我们破解处理过的ILDASM生成的有关文件以生成最终的破解控件。同 ILDASM一样,经过第一步的准备,我们已经可以在需要的时候在任何目录中调用它。

3、其他工具:记事本、计算器等,均为系统默认的工具、软件。

三、破解过程

1、安装FlyTreeView:运行FlyTreeView_for_ASP_Setup.3.2.exe,并注意安装过程中选中安装示例Web应用程序。如(图四):

在浏览器中浏览示例页面,控件未过期时的正常画面如(图五):

将系统时钟向后调整(如一年)后,再次浏览上述页面,则控件立即抛出异常如下(图六):

2、控件分析:

在你喜欢的位置新建一文件夹,姑且起名为“FlyTreeView破解”,作为我们的工作目录;将示例站点bin目录中的NineRays.Web.UI.WebControls.FlyTreeView.dll拷贝一份到工作目录;用记事本在我们的工作目录里再新建两个批处理文件,以方便后续工作,代码如下:

myildasm.bat

ildasm NineRays.Web.UI.WebControls.FlyTreeView.dll

/output:NineRays.Web.UI.WebControls.FlyTreeView.il

myilasm.bat

ilasm /dll /resource:NineRays.Web.UI.WebControls.FlyTreeView.res

/output:NineRays.Web.UI.WebControls.FlyTreeView.dll /key:treekey.snk

NineRays.Web.UI.WebControls.FlyTreeView.il

基本准备就绪后,启动 Reflector打开工作目录中的NineRays.Web.UI.WebControls.FlyTreeView.dll,如(图七)

根据以往破解经验及之前破解FlyTreeView for ASP.NET 3.1 的经历,Web控件的试用限制通常是在 New,Render,Init等位置实现。为此,我们直接展开NineRays.Web.UI.WebControls.FlyTreeView中的FlyTreeView类,以(图六)中抛出的异常信息“9Rays.Net FlyTreeView for ASP.NET TRIAL license has expired.” 为线索,逐个浏览该类中的重点方法与函数的反汇编代码,发现异常是在FlyTreeView类的构造函数New()中抛出的,其高级语言代码如下:

C#代 码

VB.NET代码

public FlyTreeView()

{

this._designPage = null;

this._clientRuntimePath = "/aspnet_client/ninerays_web_

ui_webcontrols_flytreeview_3_2_83_3/";

this._loadingMessage = "Loading...";

this._expandLevel = 0;

this._childIndent = 0x12;

this._SupportIE55 = false;

this._OldSelectedNodeKeyList = null;

this._RestoreValue = null;

this._DefaultNodeType = null;

this._NodeEventsArgs = new ArrayList();

this._SelectedNode = null;

if (DateTime.Now > Global.TRIAL_EXPIRE_DATE)

{

throw new Exception("9Rays.Net FlyTreeView

for ASP.NET TRIAL license has expired.");

}

this._NodeTypes = new TreeNodeTypeCollection();

this._NodeTypes._FlyTreeView = this;

this.Font.Name = "Tahoma";

this.Font.Size = FontUnit.XSmall;

this.BorderStyle = BorderStyle.None;

this.ClientRuntimePath = "/aspnet_client/ninerays_web_

ui_webcontrols_flytreeview_3_2_83_3/";

}

Public Sub New()

Me._designPage = Nothing

Me._clientRuntimePath = "/aspnet_client/ninerays_web_

ui_webcontrols_flytreeview_3_2_83_3/"

Me._loadingMessage = "Loading..."

Me._expandLevel = 0

Me._childIndent = 18

Me._SupportIE55 = False

Me._OldSelectedNodeKeyList = Nothing

Me._RestoreValue = Nothing

Me._DefaultNodeType = Nothing

Me._NodeEventsArgs = New ArrayList

Me._SelectedNode = Nothing

If (DateTime.Now > Global.TRIAL_EXPIRE_DATE) Then

Throw New Exception("9Rays.Net FlyTreeView

for ASP.NET TRIAL license has expired.")

End If

Me._NodeTypes = New TreeNodeTypeCollection

Me._NodeTypes._FlyTreeView = Me

Me.Font.Name = "Tahoma"

Me.Font.Size = FontUnit.XSmall

Me.BorderStyle = BorderStyle.None

Me.ClientRuntimePath = "/aspnet_client/ninerays_web

_ui_webcontrols_flytreeview_3_2_83_3/"

End Sub

相关截图见(图八):

显然,关键代码是:If (DateTime.Now > Global.TRIAL_EXPIRE_DATE) Then

Throw New Exception("9Rays.Net FlyTreeView for ASP.NET TRIAL license has expired.")

End If

Global.TRIAL_EXPIRE_DATE中保存的应该是控件试用的最后期限,我们只要将Global.TRIAL_EXPIRE_DATE中的期限值向后延长一定年限就可以达到破解的要求了,因为我们毕竟不是要做该控件的注册机,不需要再做更复杂的分析。为此,我们在点击(图八)中蓝色加亮的TRIAL_EXPIRE_DATE,转到静态全局类Global,浏览其相关代码,我们找到了如下关键代码:

语 言

代 码

IL汇编

.method private hidebysig specialname rtspecialname static void .cctor() cil managed

{

// Code Size: 18 byte(s)

.maxstack 4

L_0000: ldsflda [mscorlib]System.DateTime NineRays.Web.UI.WebControls.FlyTreeView.Global::TRIAL_EXPIRE_DATE

L_0005: ldc.i4 2004

L_000a: ldc.i4.8

L_000b: ldc.i4.3

L_000c: call instance void [mscorlib]System.DateTime::.ctor(int32, int32, int32)

L_0011: ret

}

C#

static Global()

{

Global.TRIAL_EXPIRE_DATE = new DateTime(0x7d4, 8, 3);

}

VB.NET

Private Shared Sub New()

Global.TRIAL_EXPIRE_DATE = New DateTime(2004, 8, 3)

End Sub

Delphi

constructor Global.Create;

begin

Global.TRIAL_EXPIRE_DATE.Create(2004, 8, 3)

end;

相应的截图见(图九):

在以上由Reflector反编译出的代码中,以VB.NET和Delphi代码最为直观,它使我们一眼就看出该控件的最后使用期限为2004年8月3日。(不同时间下载或安装的FlyTreeView表现在代码中的截止日期可能不同,笔者未特意考证)

下一步的工作就是进入实际破解了。

3、控件破解:

在工作目录中双击反汇编批处理文件myildasm.bat,工作目录中便出现了反汇编后得出的NineRays.Web.UI.WebControls.FlyTreeView.il等相关文件,见下表:

NineRays.Web.UI.WebControls.FlyTreeView.il

NineRays.Web.UI.WebControls.FlyTreeView.Resources.Previews.Iconless.gif

NineRays.Web.UI.WebControls.FlyTreeView.FlyNodeSet.resources

NineRays.Web.UI.WebControls.FlyTreeView.FlyContextMenu.bmp

NineRays.Web.UI.WebControls.FlyTreeView.Resources.Previews.Default.gif

NineRays.Web.UI.WebControls.FlyTreeView.Design.AutoFormatForm.resources

NineRays.Web.UI.WebControls.FlyTreeView.Resources.Previews.MSDN.gif

NineRays.Web.UI.WebControls.FlyTreeView.Resources.Previews.Night.gif

NineRays.Web.UI.WebControls.FlyTreeView.FlyTreeView.bmp

NineRays.Web.UI.WebControls.FlyTreeView.Design.PreNodeTypesButton.resources

NineRays.Web.UI.WebControls.FlyTreeView.Resources.Previews.Office-2003.gif

NineRays.Web.UI.WebControls.FlyTreeView.RelItem.resources

NineRays.Web.UI.WebControls.FlyTreeView.Resources.FlyTreeView.ico

NineRays.Web.UI.WebControls.FlyTreeView.Resources.Previews.Windows-XP-Explorer.gif

NineRays.Web.UI.WebControls.FlyTreeView.FlyNodeSet.bmp

NineRays.Web.UI.WebControls.FlyTreeView.Resources.Previews.Classic-Explorer.gif

NineRays.Web.UI.WebControls.FlyTreeView.res

用记事本打开NineRays.Web.UI.WebControls.FlyTreeView.il,向后翻一至两页可以看到如下代码,这是用于控件签名的公钥,应将其删除,以避免破解后的控件的被GAC踢出去且添加不进工具箱。

.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........

07 20 57 CD EB B7 1A 84 93 4B 53 79 1C 47 F2 FA // . W......KSy.G..

7E AE D6 6A D6 0F 43 77 3C DC 6C 32 89 1D 48 B2 // ~..j..Cw<.l2..H.

B9 1A 9E E9 25 B2 6A 13 D9 2F 84 32 90 E8 97 44 // ....%.j../.2...D

E8 2E A2 29 6C BB DC 5A 31 C5 19 46 B9 23 72 96 // ...)l..Z1..F.#r.

5B D7 3F 0C 0A 2A 10 F3 0E 98 9D 28 31 12 5B 63 // [.?..*.....(1.[c

EE 08 92 7A 7A 63 F4 2E 96 47 36 79 47 FF 8D 32 // ...zzc...G6yG..2

8B FA F4 AF 7C 12 84 3D 0B 55 15 B1 D0 2D C2 7C // ....|..=.U...-.|

C1 29 30 41 FC 8E AF 72 9C 4E 4F C6 0A A2 AA BE ) // .)0A...r.NO..... //应删除

在记事本中利用查找功能查找“0x7d4” (2004年),结合前面Reflector反汇编时得到的有关线索,可以确定NineRays.Web.UI.WebControls.FlyTreeView.il中对应Global()的构造函数的IL汇编代码如下:

.method private hidebysig specialname rtspecialname static

void .cctor() cil managed

{

// 代码大小 18 (0x12)

.maxstack 4

IL_0000: ldsflda valuetype [mscorlib]System.DateTime NineRays.Web.UI.WebControls.FlyTreeView.Global::TRIAL_EXPIRE_DATE

IL_0005: ldc.i4 0x7d4

IL_000a: ldc.i4.8

IL_000b: ldc.i4.3

IL_000c: call instance void [mscorlib]System.DateTime::.ctor(int32,

int32,

int32)

IL_0011: ret

} // end of method Global::.cctor

将上述代码中的 0x7d4改为我们需要的年份就可以达到我们破解的目的。需要注意的是,新的年份值不可过大,否则可能超出操作系统支持的上限,那就可能出现“万年虫”了。这个值改为2050年就已经足够了,因为人们不可能在四十多年后还在使用这个版本的FlyTreeView,况且到那时,如果微软还侥幸存在的话,恐怕连DOTNET都不知被它淘汰到哪里去了。2050对应的十六进制表示为0x802,修改后保存NineRays.Web.UI.WebControls.FlyTreeView.il。

接下来就是使用汇编工具ILASM编译破解后的代码了。

在编译之前,我们对也对控件来个数字签名。(强名称不是必需的,也可以不做,但如果不想做的话请将myilasm.bat中的/key:treekey.snk指令删除)

要进行数字签名,首先要使用SN.EXE产生签名密钥。在资源管理器中右击工作目录“FlyTreeView破解”的文件夹图标后在弹出菜单中选择“进入命令行”,然后再DOS窗口键入sn -k treekey.snk回车。一个新的“随机密钥对”便存储到了工作目录下的treekey.snk文件中。

接下来便进入实际编译过程了。关闭DOS窗口和Reflector等软件,回到资源管理器,删除工作目录中的NineRays.Web.UI.WebControls.FlyTreeView.dll,然后双击工作目录中的批处理文件myilasm.bat,等编译工作结束,就可以看到一个新的NineRays.Web.UI.WebControls.FlyTreeView.dll出现在工作目录中。

至此,如果之前的工作没有失误的话,FlyTreeView控件的破解工作就结束了。

四、破解后的测试

启动 Visual Studio .NET 2003,打开FlyTreeView示例站点Samples目录中的示例项目Samples.csproj,在解决方案资源管理器中将项目对NineRays.Web.UI.WebControls.FlyTreeView的引用删除,将对破解后的NineRays.Web.UI.WebControls.FlyTreeView的引用添加进来,并顺便将其添加到工具箱中。

重新生成Samples项目后将系统日期向后调整数年,在浏览器中浏览示例站点,你会发现不再抛出异常。

为最后确认破解是否成功,换另外一台机器使用ip地址或域名方式访问该示例站点,一切正常。

至此,FlyTreeView for ASP.NET3.2的破解工作结束,如果你有兴趣的话,还可以为破解后的控件再做一个安装部署项目。这就不在本文探讨的范畴了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有