紫雨轩 .Net, DNGuard HVM , .Net VMProtect

DNGuard HVM - Advanced .NET Code Protection Technology

常用链接

统计

积分与排名

友情连接

最新评论

遭遇未知.Net加密壳

今天晚上朋友找我,说他用的OA系统(ASP.Net的)今天更新了,注册算法好像变了,好像加密壳也换了,找我帮他看看。
是DLL的程序而且是net2.0的,感觉应该很好弄。资源管理器中用大图标视图模式看了一下所有的dll文件的版本信息没有发现可疑文件。先拿ildasm看看结构,分析一下有什么保护方式。结果出来一个 红叉的对话框,说什么是受保护的模块。
用reflector不能看是预料之中的,这个工具太脆弱了。用9ray的能看到部分。
不过这些工具都太弱,还是Dis#比较强悍,就用它了,打开一幕了然,看得清清楚楚。
有名称混淆,名字都被混淆成了类似这样 "o10l1o0l" 的名称。还没有见过什么混淆器有这样的名称混淆特征。
除了部分方法能看到代码,大部分方法都看不到代码,应该是有加密壳。
发现有pinvoke调用。汗,调用的是一个数据库访问层的dll(从dll的文件名来看),实际分析一下这个文件,发现原来是一个native的dll。隐藏得这么深,看来这个文件有猫腻。
看了一下导出表,你面有几个函数是在maxtocode的运行库中看到过的。但这个库导出的函数比以前看到的maxtocode运行库导出函数多了很多,而且运行库的大小明显要大很多。

先不管它是什么壳,姑且用反射方式脱试试,结果显然不行,这个壳 anti 反射了。
我怀疑这个是不是最新版的maxtocode,上它网站下了一份说明文档,看看更新记录。
* 增加了对ILdasm以及使用API 访问源数据的反编译工具的反制功能
(后来发现它实际上只是anti了 ildasm 2.0,严格的说只对ms官方的有效)
* 经测试,目前没有一种反编译工具可以完整的读取加密后的结构,更不用说加密后的代码了
(看说明文档介绍了ildasm,reflector,spices 无法读取,似乎没有介绍其它工具,尤其是Dis#。这三个不能 就算 没有一种 :P)

先就按maxtocode来治,试试用maxtocode 3.16的方式反射,似乎有一点效果,能得到一些方法属性,但还是没有IL代码。
看说明文档,里面提到 maxtocode 3.2企业版用了多核分段保护,会不会是在jit层中也有挂接服务呢?先扫了一面jit领域,没有发现异常。

那就应该是在mscorwks.dll领域了。
我在想它会不会是用的我在前一篇文章 "mscorwks.dll在.Net中的地位以及在.Net代码保护方面的应用" 中提到的 第三种方式或者类似方式?虽然那个方案已经被我否定掉了,这个壳也许就是这样的。
扫了一下A区,和B区,果然在这两个区都发现了异常。看起来反射的路是不太好走了。

直接拿jit层脱壳的方式试试,OK,可以正确获取到方法体代码。
因为是脱dll,所以可以先把jithook安装好后再载入加密的程序集,不会有方法从jit中漏掉,如果是exe可能需要hook全局的loadlibrary之类的函数,在mscorjit.dll加载时完成jithook。另外hook的位置也需要注意可灵活多变,防止壳有反hook机制。

进到Jit层里面方法的内容已经被转换成了几个类结构,好在在sscli中可以找到它们的定义,这就使方法体的重建简单很多了。
一直在做hvm,都是jit层的东西,所以对这部分非常熟悉。重建就只是sehtable稍麻烦一点。

朋友只需要几个关键函数的代码,这工作量就少很多了。上看雪下了一个修改版的 ildasm,因为ms官方版的被anti了。
打开程序集,查到所需方法的token值,记下来。通过反射找到方法并invoke,让它经过jit,jithook(根据token过虑)把获取的方法体dump出来。为了省事,首先拿反射脱壳dump一个空壳程序集下来。再手动把jithook取到的方法体填充回去(现在还没做自动回填的工具)。
如果要做成自动脱机,得在jithook里面把所有方法体按模块合计存起来,然后做个自动回填的工具填到程序集中。

看这个壳的特征很像maxtocode新版所描叙的,从运行库的导出表来看原始模块名称是 attick.dll,好像就是maxtocode运行库原始名称。而且导出函数包含了以往maxtocode运行库的导出函数,多出了Getcpuid,getdiskid,getmacid等函数。
另外在里面也看到了一些和DNGuard v1.0相似的结构混乱以及静态构造函数的处理方式。
元数据头也是和DNGuard v1.0处理后的相似,估计也用了framework api来处理。
这种方式能使加密速度提升很多。冒似maxtocode 3.16的更新记录也有说大幅提供加密速度。

虽然很像,暂且还是称之为未知壳吧。

posted on 2007-04-20 00:51 紫雨轩 .Net 阅读(4610) 评论(36)  编辑 收藏 所属分类: 破文

评论

#1楼  2007-04-20 02:04 Clark Zheng      

高人   回复  引用  查看    

#2楼  2007-04-20 02:59 Jeffrey Zhao      

牛,看不懂。:)   回复  引用  查看    

#3楼  2007-04-20 08:02 补丁      

MD...每个字我都认识...但是这篇文章没怎么看懂T_T   回复  引用  查看    

#4楼  2007-04-20 08:08 Phinecos(洞庭散人)      

看不懂。。。。   回复  引用  查看    

#5楼  2007-04-20 08:21 Wisdom-zh      

好啊, 技术在较量中提升...   回复  引用  查看    

#6楼  2007-04-20 08:43 Ame      

看不懂。。。:(   回复  引用  查看    

#7楼  2007-04-20 09:02 夜风      

MD...每个字我都认识...但是这篇文章没怎么看懂T_T   回复  引用  查看    

#8楼  2007-04-20 09:02 周星星 [未注册用户]

Dis#哪里有介绍或下载   回复  引用    

#9楼 [楼主] 2007-04-20 09:14 瑞克      

在看雪论坛,工具版有dis#   回复  引用  查看    

#10楼  2007-04-20 09:14 BoyLee      

MD...每个字我都认识...但是这篇文章没怎么看懂T_T   回复  引用  查看    

#11楼  2007-04-20 09:14 网魂小兵      

不明白!   回复  引用  查看    

#12楼  2007-04-20 09:41 aplo      

我对sscli也看过一些,
能不能把你的JIT层的程序分享出来看看?   回复  引用  查看    

#13楼 [楼主] 2007-04-20 09:52 瑞克      

jit层我是直接拿DNGuard 2.0的runtime挂进去的.所以不便分享。
如果只是脱壳目的,自己实现也很简单,就是 完成api hook的功能,
hook complieMethod函数,这个函数的原型以及各个参数的结构定义在
sscli中都有。
apihook习惯上都是hook函数入口,这样容易被anti,
hook也可以hook函数出口,或者函数中间。
  回复  引用  查看    

#14楼  2007-04-20 10:04 巫云      

终于知道啥叫“天书”了,一点都不懂啊~~
老大,先讲点基本的好不好,慢慢来啊~~~   回复  引用  查看    

#15楼 [楼主] 2007-04-20 11:14 瑞克      

下次介绍 mscorjit.dll 时会详细说明一下函数原型以及结构,和恢复的方法。   回复  引用  查看    

#16楼  2007-04-20 11:31 非我      

终于知道啥叫“天书”了   回复  引用  查看    

#17楼  2007-04-20 11:43 Aplo      

能不能把DNGuard 2.0的Demo分享一下啊?我们测试一下?   回复  引用  查看    

#18楼  2007-04-20 13:28 生米煮成稀饭      

流水账啊,lz   回复  引用  查看    

#19楼  2007-04-20 13:48 Aplo      

把DNGuard 2.0的Demo分享一下吧   回复  引用  查看    

#20楼  2007-04-20 13:53 David Fan      

天书呀!   回复  引用  查看    

#21楼  2007-04-20 13:59 Aplo      

DNGuard 2.0分享一下   回复  引用  查看    

#22楼  2007-04-20 17:18 U2U      

强啊   回复  引用  查看    

#23楼 [楼主] 2007-04-20 18:26 瑞克      

dnguard 2.0不会放出来。对它的强度还不满意。   回复  引用  查看    

#24楼  2007-04-20 21:12 深蓝      

大哥,强烈期待你写一个反编译的教程吧。这篇文章完全看不懂。   回复  引用  查看    

#25楼  2007-04-20 23:57 teana      

第一次遭遇。。基本上不是很明白。。   回复  引用  查看    

#26楼  2007-04-21 16:34 fannee [未注册用户]

可能就是hook complieMethod后通过调用mothedbody的getilbytes的反射方法取得il代码。   回复  引用    

#27楼  2007-04-22 22:03 曲滨      

呵呵,不是那种用VC 嵌入本机代码
的程序集吧   回复  引用  查看    

#28楼  2007-04-23 09:52 fannee [未注册用户]

在看雪论坛,工具版有dis#,我怎么找不到,是破解版的吗?能不能告诉详细分支或地址。   回复  引用    

#29楼  2007-04-23 10:28 aplo      

看来不做开源,和MaxToCode一样走商业模式。估计八成出了就会被破解!还是不发布的好。   回复  引用  查看    

#30楼 [楼主] 2007-04-23 10:43 瑞克      

google也应该能搜索到的。具体地址不记得了。

  回复  引用  查看    

#31楼  2007-04-24 11:43 妞妞 [未注册用户]

@瑞克
请教怎么查看经过XenoCode 2005混淆过的代码~   回复  引用    

#32楼  2007-04-25 16:14 overred      

下载dis #到他老家去:
http://www.netdecompiler.com/


请问各位"加密壳"这个壳在这里读"ke"还是"qiao"?   回复  引用  查看    

#33楼  2007-05-07 09:10 fannee [未注册用户]

maxtocode作者说:Rick 那篇只是内测时的程序,我连 Framework 检查都没加的,而且只是个人版的测试
那4月26号放上去的测试版可能加了Framework 检查,rick,有没有试过能不能通过jithook获得IL。26日的版本“调整了一个少数服务器会发生的异常情况. 此情况的表现形式为:无效的代码或无效的程序”,我想这样调整可能降低了anti强度。   回复  引用    

#34楼 [楼主] 2007-05-07 09:42 瑞克      

首先我的分析不是用的他网站上的测试版做的。
4月21号之前的企业版可以jithook获取il代码,21之后的企业版没有找到sample,看他的介绍,仍然需要使用到jit,所以只要调整hook的位置还是可以获取il代码的。
4月21号的个人版在网上找到了sample,用之前的方法不用修改可以直接获取到il代码,而且能够很容易的还原methodbody,强度似乎没有任何提高。
26号版的就更不用说了。。。
  回复  引用  查看    

#35楼  2007-05-07 11:21 fannee [未注册用户]

你说的用之前的方法不用修改可以直接获取到il代码,之前的方法是3.12-3.16的修复framework的方法还是对付3.20企业版的hookjit方法?   回复  引用    

#36楼 [楼主] 2007-05-07 17:48 瑞克      

用hookjit的方法   回复  引用  查看