破解NET的四大神器(转)
原本这篇文章可以更早一星期写出来与大家分享,由于某方面的原因耽搁到现在,心里竟有那么一点好像对不住大家的感觉。这当然与神器有关,因为我发现利用这四大神器我似乎觉得几乎所有的NET程序破解都不在话下了。而我竟然在发现这神器组合后推迟了一周才分享与大家!
在开始分享之前,还是要说明一点,说是神器到目前为止也仅仅是对我自己而言,至于这四大神器会不会成为对各位而言的神器就不得而言了,因此当有哪位亲拿到这四大神器后仍然感到破解NET程序存在很大困难,请拍砖。
先介绍一下我眼中的四大神器:De4Dot、Reflector、Reflexil以及DILE.其中
De4Dot是一个开源的脱壳/反混淆工具,结识到神器工具我要感谢论坛里的朋友wan,他在我的处女新手贴” [原创]新手破解.NET程序”中提到了这个工具,而这款工具被我奉为了神器级工具。因为它的脱壳能力的确很强,使用它我成功地脱掉了Dotfuscator、MaxToCode处理过的程序,至于其它的加壳/反混淆工具比如说Xenocode、ThemIDA等我还没有进行过实验,之后我将计划研究各类加壳/反混淆工具的脱壳方法,我深信De4Dot能够给我带来巨大帮助。(由于De4Dot是开源的,我相信即便De4Dot暂时处理不了的壳通过扩展其功能必将能解决)
Reflector这个功能强大的NET反编译工具相信大家都是很熟悉的,这个工具是我在没有开始学破解之前(大概6个月之前我才开始涉足破解逆向领域)唯一熟知的破解方面的工具。而现在的Reflector的功能更加强大了,不仅仅其自身的功能在增强,而且其强大的插件系统也扩充了其功能,下面提到的Reflexil便是它其中的一个插件。
Reflexil是Reflector中的一个插件,也是开源的,它可以从IL和C#高级语言两个层次对目标程序的代码进行修改/注入。认识到这个工具无疑使我十分震惊,因为在我开始学NET破解的时候经常担心不能像在OD里那样直接修改汇编代码一样来通过修改IL或C#代码来改变NET程序的流程逻辑,如果是这样子那么我学习NET破解的方法将受到极大地限制。而Reflexil的存在完全消除了我这方面的担忧,即便在某些地方不能从C#对目标程序进行修改,那么我总可以在IL代码级别上来修改!
DILE则是一款调试工具,全称Dotnet IL Editor,尽管现在它还没有完全开源但相信在不久的将来也将会在sf上开源。其实一开始我并不想把它放入我的神器之列。有两方面的原因:第一是我比较擅长也倾向于静态分析,能够静态分析完成的我几乎不会去用动态调试法,看过我的处女贴的朋友应该可以看出来我破解的第一款软件中根本就没有用到调试工具;第二尽管静态分析是我的强项,但这并不意味着我不需要一款调试工具,如果大家百度或者Google一下会发现有很多文章在讲Reflexil与Deblector并称他们为神器,而Deblector就是Reflector下的一个调试工具,所以一开始我很希望将Deblector作为我调试方面的神器工具,但是我最终没能把这个工具使用起来,网上的文章都在讲Deblector启动开始调试之后会断在程序的入口处,但我下载了它的几个版本,都没有达到这个效果,它并没有在入口处断下来,而是嗖嗖地直接弹出了程序的主界面。
光说不练,很难让人相信这可以作为神器工具的强大之处,下面就以我实际破解案例来展示一下这四大神器的威力。
要破解的这款软件的是青鸟QQ群发大师,其软件组成如下截图:
首先,在Reflector里查看一下其中的exe文件,看是否有混淆或者加壳。
<ignore_js_op>
青鸟QQ群发大师.exe:
<ignore_js_op>
青鸟qq群发大师陌生人群发.exe:
<ignore_js_op>
SoftPlatorm.exe:
<ignore_js_op>
从上面的反编译结果可以得知前两个exe是没有加壳的,可以很清晰地看到他们的C#代码,并且可以得知他们只是两种不同功能的启动程序,用来启动SoftPlatform程序,因此这次破解的程序入口就可以直接放在了SoftPlatform里面了。
但SoftPlatform是加过壳的,因此需要脱壳,接下来De4Dot就上场了。
De4Dot是命令行工具,所以需要各位熟悉如何使用命令行。在命令行打开之后,对于一般的程序直接输入以下命令: De4Dot 目标程序全路径 便可以脱壳完成,对SoftPlatform.exe我们也这样试一下:
<ignore_js_op>
嗯?好像没有奏效,尽管生成了一个SoftPlatform-cleaned.exe,但是如果用Reflector查看的话,这个程序仍然是加壳。再仔细查看提示,便会发现原来他加了2层壳,根据他的提示可以将其一层一层的脱掉,如下所示:(顺序不能错只能先-p mc,再-p df)
<ignore_js_op>
将最终的文件命名回SoftPlatform.exe,再用Reflector反汇编一下看:
<ignore_js_op>
啊哈哈,看,是不是很爽!所有的代码都被反编译为C#的代码了,而且可读性也很强,接下来就是去找这款软件相关的用户验证的地方了。
很容易找到,其验证的类为SoftLogin,但是在查看他的代码的时候出现了点小问题,无法查看到,这是因为SoftPlatform.exe所引用的dll中有许多个也是被加了壳的:(下图红色感叹号的)
<ignore_js_op>
这个也比较容易解决,De4Dot嘛,使用跟脱SoftPlatform同样的方法,可以非常顺利地脱掉它们的壳,这时再查看SoftLogin类会看到如下关键代码:(在SoftLogin.method_2方法中)
<ignore_js_op>
根据代码的含义很容易得知WebQQ.Key.KUserGrade表示用户的等级,WebQQ.Key.KExpireTime为过期时间,由于该软件的验证为网络验证所以整个验证过程也还有其他的处理,因为这里只是举个例子来说明一下工具的强大,因此我们只讲述一下把用户等级变为最高级别,过期时间延长的方法。
另外根据上面的那段代码可以看出在网络验证返回来的数据很大一部分都作为了GClass1的函数参数(实际上这些函数大部分都是些类似get/set方法),所以我们可以估计GClass1跟验证会有相当大的关系
继续阅读GClass1的代码可以找到如下两个方法:
<ignore_js_op>
呵呵,再一次的啊哈哈,极度明显地可以看出smethod_14就是返回过期时间,而smethod_35则返回的是用户级别!
知道怎么做了吗,我问我知道怎么做了吗,哈哈,轮到Reflexil上场了,使用它将这两个函数的返回值改掉!改之后的效果如下:(如何使用Reflexil修改IL代码及C#代码请大家百度搜索Reflexil会出现一篇介绍神器Reflexil与Deblector的文章里面有讲,这里不再赘述)
<ignore_js_op>
哈哈,过期时间总是当前时间+10000天也就是说永不过期,用户等级为2是至尊vip版,当然这个值代表至尊vip还是要去分析其他的代码才能得知。
案例分析就到此结束吧,要最终破解这个程序仅靠改这两个地方远远不够的,还有许多其他地方也要修正,限于篇幅这里就不再赘述了。
案例是讲完了,但是DILE貌似并没有使用到,是的整个破解过程我没有使用它,经过脱壳之后使用Refletor都能看到源代码级别的东西了,而且我擅长C#编程,静态分析代码对我来讲不在话下,因此DILE没有使用到。那为什么我还要将它列入神器之列呢,这是因为不管是自己写程序还是学习别人的程序在某些情况下调试工具仍然必须要用到,因此选一款调试工具对我来讲也是十分必要的。尽管DILE破解中没有用到,但后来破解完成之后我还是试验了一下它是否可以被我使用起来,至于怎么使用这里不再论述,只作个截图展示一下,以后破解中需要用到调试技巧试再作讲解。
以上都是个人破解中的一些经验之谈,分享与大家,希望能对大家有所帮助,如果有什么不当之处望大家尽情拍砖。