.NET程序的破解–静态分析(附图)

日期: 2010-02-22 来源:TechTarget中国

  .NET程序已经红红火火的兴起,就象LINUX一样势不可挡的涌来。作为一名Cracker,你会选择躲避吗?嘿嘿,对俺而言,挑战更富有趣味。

  破解好几个.NET的程序了,一直想写出来,只是时间问题,所以拖到现在,怕再不写,就忘的一干二净了;)…….

  一、兵器

  公欲善其事,必先励其器。在静态下反编译NET程序我选择Reflector,Xenocode Fox 2006 Evaluation。他们的下载地址分别如下:

Reflector: http://www.aisto.com/roeder/dotnet/

Xenocode:http://www.xenocode.com/Products/Fox/Community.aspx

  二、破解目标:Xenocode Fox 2006 Evaluation 14天使用限制

  三、破解流程

  很多人都介绍过静态分析破解.NET的程序,所以如果你已经是老手或者下面的部分刚好是你所不屑一看的部分,请退出J。

  破解这个程序是在论坛里henryouly曾“【推荐】两个.NET IL的相关工具”,试用了一下Xenocode Fox 2006 Evaluation,效果确实很不错,程序有点类似Reflector,只是多了一点我认为比较好的功能:直接显示代码在程序体中的位置。Reflector是完全免费的,但Xenocode Fox 2006 Evaluation却有14天的限制,过了14天想使用就需要调整计算机的日期了,而且老版本的Reflector还无法反编译Xenocode Fox 2006 Evaluation。以己之矛,克己之盾,唉,军中大忌呀。

  启动Xenocode Fox 2006 Evaluation的主程序FOX.EXE,在没过期的时候很容易就启动了;把时间向后调整1个月,FOX.EXE启动就提示14天的测试期到了,然后就退出了。

  用新版本的.NET Reflector, Version 4.2.36.0打开Xenocode Fox 2006 Evaluation主程序,发现程序代码已经被混淆过,看不出什么名堂了,就是有一点的有名函数,对我们来说也没什么太大作用了;搜索关键字串14-day,也找不到。过期如下

NET程序的破解--静态分析1

  在Reflector里用鼠标右键点程序FOX的名字,在出现的菜单里有一个选项“Go To Entry Point”,嘿嘿,看到了吗?

NET程序的破解--静态分析2


  在这个菜单上点一下,我们被动局面立刻就被扭转了:我们直接来到了程序的入口代码处!按我们的推测,程序启动就判断了时间,验证是是不是过期了,没过期就启动,否则就出现过期的提示框,然后退出。那么在入口代码处,我们一段段代码的过,一定可以找到时间比较过程等。入口处函数代码如下图:

NET程序的破解--静态分析3

  在xc447809891322395函数上双击,出现函数代码一如下(C#)显示:[STAThread]private static void xc447809891322395(){ if (!x867eb3246b182488._c7c43f12e732db09()) ;行1 { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new x3e4e23fadc83a77e()); }}
看到上面的入口代码,你不觉得行1可疑吗?进入程序就调用了一个函数,然后判断的结果影响后面的所有代码的执行,嘿嘿,我们点击上面的_c7c43f12e732db09()进入,看到代码段二如下:

public static bool _c7c43f12e732db09(){ if (x71a0073930f50f3f.xb30f5e1eb4806151(“XFTRL” + x77fa6322561797a0.x9c1ceef9a932f141, new TimeSpan(x867eb3246b182488.x7ee7e0aa39016337, 0, 0, 0, 0))) { MessageBox.Show(MessageTable.TrialExpired, x77fa6322561797a0.x6886d5a1867d55cb); return false; } return false;
}

  看到什么了?如果你学的外语是英语,一定可以看出来在.IF语句里的TimeSpan、TrialExpired 是什么意思了,而且还带着MessageBox,哎,是不是来的有点太容易了,J。上面语句中进入就用那些参数进行了时间比较,然后不过期的话,返回FALSE;过期返回TRUE。
看来修改返回的TRUE和FALSE测试一下,就知道我们上面的判断的正确与否了,就是让返回的都是FALSE,程序不就认为是在使用期限内吗?如何修改?有很多前辈高人讲了很多办法,比如直接用ILDASM反汇编出来,然后修改语句,再用ILASM编译回去等等。我对他们的方法一直操作的不好,所以我用懒人的办法。你想知道吗?呵呵,let us go!
把上面代码段二切换为IL格式,如下代码段三:L_0033: pop L_0034: ldc.i4.1 L_0035: ret L_0036: ldc.i4.0 L_0037: ret 
所对应的机器码就是26 17 2A 16 2A ,而我们想修改上面的L_0034: ldc.i4.1变成L_0034: ldc.i4.0 就可以了。我用HEXWORKSHOP打开FOX.EXE,然后查找上面的HEX代码,找到后,修改17为16,就可以了。这里会有个问题:如果在程序中查找出来好几个地方都一样,你如何修改?这就是我看中Xenocode Fox 2006 Evaluation的地方,它可以直接告诉你函数的入口在BODY中

NET程序的破解--静态分析4

启动FOX看看效果,嘿嘿,已经在过期的情况也使用了,只是过期提示还存在,让人觉得难受。去掉提示框:①修改代码L_0022: brfalse.s L_0036 这里,改为直接跳转到L_0036②或者把Messagebox函数屏蔽掉,都可以去掉过期提示。我开始用方法1修改,发现程序运行就出错,原来是牵扯到OPCODE语句执行后有堆栈平衡的问题,看来不熟悉也不行。我最终选择使用方法2修改,启动Hexworkshop,把L_0024~ L_0033间的语句全替换为NOP,在IL语言中就是00,然后保存退出。再启动,世界清净了,里面的EVALUTE 就修改成PRO好了。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

相关推荐

  • 合理分析恶意软件:用对方法很重要

    以正确的顺序实施多种分析方法可以使安全团队更有可能防止恶意软件渗透进入网络,甚至对于以前并没有被确认的恶意软件样本也能够起作用……

  • 软件测试方式的比较:白盒测试

    软件测试的方式多种多样,你需要不同的方法来从不同的角度审视,这样才能有足够的信心你得到的是一个比较安全的软件。本文介绍了软件测试中的白盒测试方式……