示例图片三

新闻资讯

联系方式

加密狗复制克隆网
电  话:13528540969
联系人:  刘先生
Email:4642967@qq.com
网  址:www.crackdongle.com
地  址 :广东省深圳市地王大厦38层8801号

当前位置: 网站首页 > 新闻资讯 > 业界资讯
业界资讯

net程序脱壳基本知识一二三

现在.Net 壳真是越来越强了,目前的主流保护思想都是基于方法层面的了,在内存中我们已经无法获得完整的Assembly了,即使Dump下来,也看不全IL代码。比较有代表性的壳就是Reactor, MaxToCode, DNGuard HVM等等。 

俗话说:柿子要找软的捏,在上面提到的三款强壳中,最弱的可就是要算Reactor了。虽然是最弱的,但是我相信几乎可以难倒90%DOTNET初学者。虽然大牛们不屑一顾,甚至秒杀,但是作为小菜的我们还是需要研究很久的。
    为了便于研究,我们自己先创建一个小小的CrackMe,代码非常简单如下:
if (textBox1.Text == "123456") {       MessageBox.Show("CODE IS OK"); } else {       MessageBox.Show("ERROR"); } 
只要注册码为123456就可以注册成功,我们根据RVA地址可以顺利找到其二进制代码如下:


我们再使用Reactor4.4对这个CrackMe进行加密,同样为了起到研究的目的,我们仅仅勾选NecroBit选项


加密后,我们再也看不到IL代码了。

这便是Reactor的独门秘籍了,基于方法体加密。

    那么我们就真的没有办法了吗?方法当然是有的,其一是研究Reactor的自我解密函数,那么我们甚至就可以静态脱壳了,但这是属于牛人研究的范畴,我们暂且不研究。其二就是利用Hook JIT来截获IL代码。看雪论坛上已经有高手详细的解释了怎么编写一个HOOK JIT的代码,所以我就不展开讲了,我们甚至可以直接使用OllyDBG的ILLY插件来直接获取IL代码。


在使用这个插件之前,请先搭建一个Pure DOTNET环境,所谓的Pure DOTNET环境是指一台裸机安装了原版Windows XP操作系统后,仅仅安装了.NET Framework v2.0.50727 版本的框架。

    任何其他软件都没有安装。这个环境是非常利于HOOK JIT的,可以让我们今天使用的ILLY插件很稳定的截获IL代码。建议大家在虚拟机中建立这样的环境。

    将ILLY插件拷贝到OllyDBG的plugin目录中去。然后将加密后的CrackMe拖进OllyDBG中,
OllyDBG很快就会中断到compileMethod方法处,并弹出了IL代码对话框,当然这里仅仅只CrackMe的入口点,为了测试,我们先暂停ILLY的监控,让程序跑飞。


可以通过上面的菜单进行暂停或执行ILLY的监控。当程序跑飞后,我们再次启用ILLY,点击按钮后,ILLY插件就真正截获到我们需要的IL代码了。

便是获得的核心IL代码,我们先不急着处理,看一个小小的意外收获。请看OllyDBG的反汇编代码:


    这岂不就是那段IL代码编译后的Native代码么??而红色标出的部分就是判断注册是否成功的关键跳,将74修改为75后,果然显示注册成功了!看样子如果我们只做一个内存补丁也是可以的,但不是今天研究的主题,我们暂不讨论。
    在弹出的ILLY对话框中,我们可以点击Save *.BIN到文件,这样我们就真正通过HOOK JIT获得了Reactor加密后的数据了。我们只需要将这些二进制代码还原到原程序中就行了,可是新的问题出现了:加密后的程序存储IL代码的字节数太少了,而我们获得的IL字节太多了,根本放不下去啊…..

对于这个问题我纠结了很久,最后不得不向某人求助。某人是这样做的:他先用CFF在加密后的程序中新建一个Section 将Dump到的Bin文件添加进去.

分享到:
点击次数:  更新时间:2018-04-30 08:21:48  【打印此页】  【关闭