吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 72289|回复: 167
收起左侧

[.NET逆向] 【.NET】UnpackMe!Shielden+DNGuard,双层变异壳 - 脱壳详解

    [复制链接]
brezeer 发表于 2015-11-28 00:15
本帖最后由 brezeer 于 2015-11-28 19:34 编辑

【.NET】UnpackMe!Shielden+DNGuard,双层变异壳 - 脱壳详解

前言:自从脱壳神器de4dot横空出世以来,我们可以看到几乎所有的.net破文中的第一部分就是不管三七二十一把程序丢进去脱壳以及反混淆。可是你真的明白de4dot背后做了些什么吗?你对.net文件格式真的了解吗?如果这么好的开源工具大家都不去研究代码,实在是令人惋惜,以至于还在有人在论坛询问 Reactor最新版怎么脱的问题,也有的在论坛上断言MaxtoCode可以难倒99%的人……我想善于从基础学起,善于研究大神源码,真正搞懂de4dot背后所做的工作,那么这些问题都不算什么问题。这篇文章有点长,希望你能细心读下去,而且我相信你一定会有很大的收获,请不要纠结于为什么照着我的教程做也不能脱掉类似的其他壳,你应该扪心自问,教程的每一步你都理解了吗?你能否利用这些知识进行变通?希望你不要做一个伸手党,而是去真正去理解工具背后的工作。
虽然de4dot很牛,但总有些壳它也是无论为力的,比如我们今天要讨论的这个。由于我很长时间都没有上论坛,因此错过了很多精彩的.net内容,还好希望现在还不晚。

---------------------------------分割线,以下部分为原贴内容-------------------------------
【.NET】UnPackMe!Shielden+DNGuard,双层变异壳 By:凉游浅笔深画眉
http://www.52pojie.cn/thread-340591-1-1.html
脱壳目的:
1.脱掉Shielden   难度系数分 ★
2.修复脱掉Shielden之后一系列问题(如区段错乱,PE入口,乱码,程序体积过大等),使程序正常运行, 难度系数分 ★★★
3.脱掉Dnguard Hvm,并修复其各种问题使之能正常运行,难度系数分★★★★★
4.反编译能正常看到源码(仅限Reflector,别的反编译工具纠错能力较强,不适合练手....),难度系数分★★★
注:If you got it ! Welcome to Join Matrix !
-------------------------------------------分割线---------------------------------------------------

这个壳的难度系数非常高,以至于画眉大侠对其寄予厚望,看介绍说:谁能脱掉的,就可以加入Matrix? 那么加入了这个Matrix,能否获得画眉大侠的Dnguard HVM企业版的使用权? 想想还是有点小激动呢。但是由于的难度极高,修复难度极大,以至于在原帖中没有人能及时提供一个明确的解决方案。那么现在请大家跟我一起来解密。

老办法,运行程序,用先在内存中抓。为什么要从内存中抓?因为有些加密的东西,总归会在内存中解密出来,这样可以最大限度的获得解密后的数据。
很不幸,刚打开程序就报了一个这样错误:
1.jpg

原来是DNGuard HVM试用版过期了,难道我们真的要像原帖中ghostfish描述的一样放弃了吗?
2.jpg

其实吧,我们还有系统自带的“月光宝盒”可以用。看看发帖时间是2015年3月17日,那么我们只需要把系统时间修改为3月17日,就可以顺利打开了。让程序跑起来后,我们准备在内存抓,其实这样的工具有很多,使用起来都大同小异,比如上一篇文章中我说的Task Explorer,还有WinHex也是可以的。今天我再推荐一款DOTNET专用的工具,因为我发现这个工具自带一定的修复功能。那就是DOTNET Dumper,其实吾爱论坛上也有http://www.52pojie.cn/thread-67257-1-1.html, 但是这个版本脱壳时会报错,其版本号是1.0.3936.41928。 我手上的是版本1.0.3938.31576,可以顺利脱壳,可以在附件中下载。其实用什么工具都是一样的,不过如果用Task Explorer需要自己再多修复些东西。
3.jpg

找到进程,然后点击右键Dump。
4.jpg

Dump了7个文件,我们来看看。
5.jpg
那个2.0.50727.42的描述字眼实在太显眼了,明显是系统的DLL文件,那么我们只保留dump1.exe 其他的全部删掉。然后记得把DNGuard的原始HVMRuntm.dll文件放到dump后的目录中。我们用CFF打开看看这个dump1.exe。

6.jpg
打开Section Headers[x]发现了.HVMRunt 这种奇怪的东西。记住了:.net一般就三个默认的 .text, . IDAta 和 .rsrc 以后发现不是这三个全部删掉!在相应的Section上点击右键使用 “Delete Section (Header And Data)“

再看看Import Directory
7.jpg
记住了,.net默认就导入一个mscoree.dll,其他的全部删掉。如果换种场景,一个导入函数都没有怎么办?那么可以使用Universal Fixer勾选fix import修复。
将上面的删除后,保存。直接运行程序看看。啊哈哈哈,程序居然可以直接运行了!!!!

8.jpg


可是,不要高兴的太早。为什么是乱码??????不错,我可以确信90%的人会卡在这里,走不下去了。请参考原帖, 我惊奇的发现连二楼Falcon_2015这样的.net高手也卡在了这里……

9.jpg
根据我对于DNGuard 的多年研究,出现上图右边所示的错误:“试图使用链地址信息(有2个以上的节或有一个TLS节的IAT)加载无法验证执行文件”,多半是由于入口点位置不正确引起的。而乱码则是由于dump过程中,没有处理好字符串解密函数导致的。因此上图中Falcon_2015在第3步解释的不准确,真实情况是:DNGuard脱壳和乱码没有任何关联,也就是说,就算是乱码,DNGuard也是可以被脱壳的。一个是字符串解密函数的问题,一个是入口点不正确的问题,这分别是两个问题,且没有关联。


我们来用CFF打开脱壳后的程序再次观察一下:
10.jpg

再研究研究字符串怎么解密。看原帖第三楼,画眉的回复:
11.jpg

画眉原文:“你需要Hook Jit 解码”。
我等菜鸟,被Hook Jit的字样已经吓尿…….是的,在dump过程中,由于没有考虑到字符串解密函数的原因导致dump后出现乱码。这也是DNGuard加载双壳的一大特征,根据我最近分析各种画眉大侠的unpackme的经验,他比较喜欢的做法就是先用DNGuard加一层强壳,且在此壳中使用字符串加密。然后外面再加一层壳,当你脱去外面这层壳的时候,打开程序后字符串就会变成乱码。不相信的人,你们自己去用DNGuard加两层壳试一试。
说句实话,我在这里也卡了很久。但是我不甘心,我想做剩下10%的人可以继续解密,我是一个工具党,但是我找遍网络也没有找到合适的工具来解决这个问题。每次当我找不到工具的时候,我就会决定自己写个工具,便把de4dot的源代码重温了一遍,终于基于de4dot源码开发出一个小工具。为了方便大家今后遇到同样的问题,我直接把工具奉上。
这个工具除了可以解决DNGuard的乱码问题外,还可以修复入口点,是的,可以修复任意.net程序被破坏的掉的入口点。我已经考虑到4种被破坏入口点的情况,所以通用性应该还是不错的。原理嘛,画眉也说了: http://www.52pojie.cn/thread-383915-1-1.html 你没看懂也没关系,用了我这个工具你再也不用为无法修复.net入口点而苦恼了。


如下图,把两个勾都选上,注意在修复乱码过程中,需要选择未脱壳的原始文件。
12.jpg

点击开始修复,修复完成后,再用CFF打开看看。
13.jpg

但是注意,打开Data Directories[x]项看看,此处还有一处错误:
14.jpg

请按照上图所示,将Debug Directory RVA的值直接修改为0,然后保存。
运行再次修复的程序看看。
15.jpg

乱码问题解决了,入口点问题也解决了。但是,别忘了,我们才刚刚把第一层壳脱完。好在这个程序是DNGuard的试用版,因此直接用已有的工具脱壳DNGuard HVM Unpacker。http://www.52pojie.cn/thread-320711-1-2.html
啊,脱壳失败了,报错。一个新的错误,但是已经不是“试图使用链地址信息(有2个以上的节或有一个TLS节的IAT)加载无法验证执行文件”的错误了。
16.jpg

这个问题比较好修复,直接用Universal Fixer,只修复.net那块的:
17.jpg


再拿出DNGuard HVM Unpacke来脱再次修复的文件。
18.jpg

成功了!!!!!!!赶紧拿出ILSpy来看看,源码出现了!!!
19.jpg
激动!!!!!太激动了!!!

运行程序看看:
20.jpg

出错了!!!!What’s the Fuck!!!!!!!对不起,我骂人了,因为被折腾的受不了!!!!

经常搞.net开发的人应该知道,这个问题多半是由于配置文件或者资源不正确引起的。用CFF看看资源情况:
21.jpg

脱壳工具将部分资源弄丢了,导致无法运行。修复这里的资源很麻烦,还需要重新定位RVA地址。本文将介绍一种快捷的办法,那就利用微软自带的ILDASM和ILASM,先进行反编译,再编译回去。
但是我们发现在编译回去的过程中,遇到了如下错误。

xxx.il(553) : error : syntax error at token '[' in:     IL_0002:  newobj      [ERROR: INVALID TOKEN 0x0A80003A]

于是代开il文件,找到553行。因为已经脱壳,因此直接把这些非法的地址全部在代码中注释掉,不会对程序有影响:
22.jpg

继续用ilasm编译,发现新的错误
xxx.il(605) : warning : Non-nested class has nested visibility (0x001035A7), changed to non-nested (0x001035A0)
xxx.il(606) : error : Base class in interface

于是找到第606行
把下面整个这段代码删掉:
.class interface abstract import serializable sealed nested famorassem beforefieldinit specialname rtspecialname $TD$7
       extends [mscorlib]System.Object
{
} // end of class $TD$7

保存后再用ilasm编译,就可以编译成功了。
运行,完美,没有错误!!至此脱壳完成。
脱壳前大小:793KB,需要HVMRuntm.dll运行库。脱壳后8K,不需要运行库。
好了,看完本教程的人都可以拿着脱壳后的文件去找画眉加入Matrix了。

文中所有工具列表:
1. CFF: http://www.ntcore.com/exsuite.php
2. Universal Fixer :http://www.52pojie.cn/thread-82492-1-1.html
3. DNGuard HVM Unpacker。http://www.52pojie.cn/thread-320711-1-2.html
4. ILDASM/ILASM 微软VS2010以上版本自带 DOTNET4.0的反编译/编译工具。
5. Donet Dumper, 乱码及入口点修复工具(本人作品),脱壳后的文件: Tools.rar (1006.26 KB, 下载次数: 2708) (有bug会再更新,最后更新时间2015-11-28 19:34)
6. unpackme原文件: UnpackMe.rar (1023.97 KB, 下载次数: 737) (注意,原始unpackme杀毒软件报毒,为安全起见,请在虚拟机下运行。非本人软件,不能保证其安全性)








点评

很好的.net一篇脱壳文章,多层壳已然是现在一种惯用手法  发表于 2015-11-29 12:56
小小一篇文章,背后或许是无数个通宵的结果,为楼主的钻研精神致敬!补充一下:文字乱码的原因的罪魁祸首是SE壳导致的,他会修改我们原先程序的入口点,别问我为什么,因为这都是我编的!  发表于 2015-11-28 01:58

免费评分

参与人数 73吾爱币 +7 热心值 +73 收起 理由
610100 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
yimozi + 1 + 1 感谢您的宝贵建议,我们会努力争取做得更好!
yaont + 1 + 1 鼓励转贴优秀软件安全工具和文档!
iamcjsyr + 1 + 1 用心讨论,共获提升!
浩秦 + 1 + 1 这个帖子不错哟,干货很多,谢谢楼主
guan0124 + 1 用心讨论,共获提升!
vigers + 1 已答复!
依然在飞翔 + 1 好棒的技术贴,膜拜一下
悟空不悟 + 1 热心回复!.NET 学习+1!
小学生 + 1 看来是高手啊哥哥,能辛苦分享一个鹏飞新版.
lajfox + 1 这是我等的学习对象
Owner_Cracker + 1 谢谢@Thanks!
txwhg + 1 膜拜
tomoyii + 1 很精彩,收藏了
纳兰小寒 + 1 我很赞同!
implywhen + 1 菜鸟膜拜。
雨天 + 1 已经处理,感谢您对吾爱破解论坛的支持!
1485573943 + 1 热心回复!
stta800 + 1 我很赞同!
cr7890 + 1 谢谢@Thanks!
心之所在 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
ghostfish + 1 大牛果然厉害。牛牛牛
阿妞~潮鞋 + 1 牛逼
jer9y + 1 膜拜大牛
蚯蚓翔龙 + 1 详细
rflinker + 1 我很赞同!
jacky520510 + 1 已答复!
linzi + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
海盗小K + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
梁萧 + 1 谢谢@Thanks!
梁小凉 + 1 我很赞同!
灰太狼大王 + 1 我很赞同!
77413036 + 1 收下我的膝盖
speedboy + 1 谢谢@Thanks!
ximendongkai + 1 谢谢@Thanks!
小小小青年 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
来自星星的我 + 1 膜拜,这才是菜牛!!受教了
Dlan + 1 谢谢@Thanks!
evido + 1 谢谢@Thanks!
mcevilrock + 1 终于有人开始认真研究net了..
March + 1 我很赞同!
noblesport + 1 我很赞同!
zouxm2008 + 1 热心回复!
风动鸣 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
Syer + 1 牛逼不解释什么
137310853 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
cm79140862 + 1 大牛~!
wengjinbao + 1 谢谢@Thanks!
朱朱你堕落了 + 1 膜拜大牛!
红绡枫叶 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
lies2014 + 1 鼓励转贴优秀软件安全工具和文档!
tzxinqing + 1 膜拜下大牛~
hufo99 + 1 谢谢分享~~作为90%的人我感觉惭愧!!!
Tortoise + 1 谢谢@Thanks!
逍遥枷锁 + 1 谢谢@Thanks!
netle8 + 1 鼓励转贴优秀软件安全工具和文档!
Angel_紫月 + 1 已答复!
catty870807 + 1 关于.net脱壳的好文章!
烟尘沐雨丶 + 1 我很赞同!
duanjia0912 + 1 2015最值得拥有的文章和工具,没有之一
这只猪 + 1 已经处理,感谢您对吾爱破解论坛的支持!
ljrlove2008 + 1 膜拜下大牛~
yypE + 1 必须膜拜
w470236189 + 1 谢谢@Thanks!
pxhb + 1
邪恶博士 + 1 大牛,求带
peter_king + 1 谢谢@Thanks!
Jzh + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
bigharvest + 1 谢谢@Thanks!
Emil + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩.
山顶的一棵草 + 1 膜拜下大牛~
苏紫方璇 + 1 膜拜会玩画眉UM的大牛
Sound + 1 已经处理,感谢您对吾爱破解论坛的支持!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

山顶的一棵草 发表于 2015-11-28 13:19
又一个BOSS诞生,看来以后写CM要加入大牛名字了

免费评分

参与人数 2热心值 +2 收起 理由
Crazy青涩 + 1 竟然看到草大了
brezeer + 1 有问题,找画眉!我等小菜就算了。

查看全部评分

 楼主| brezeer 发表于 2015-12-3 22:17
本帖最后由 brezeer 于 2015-12-3 22:22 编辑
85924416 发表于 2015-12-3 21:43
楼主你好,我是一个刚起步的新手,看了你教程,我在 ILDASM2  编译成IL 修改后不能译回 EXE 文件,怎么办!

你看,我在最后编译的时候,也遇到了很多错误,也是逐步去除错误和修复的IL代码的。文中的unpackme毕竟很小,所以错误不多,修复起来比较简单。 真正的程序肯定会遇到更多的错误,所以需要你有一定IL代码功底去修复错误。当然有时间的话,我会再想办法写个工具直接来修复这个问题。还有另外一种解决思路:当unpack成功后,虽然程序运行不起来,但是可以看到源码了,通过静态分析相信也可以找到如何破解的地方。那么只需要在没有unpack之前可以运行起来的文件中手动还原这一个需要破解的method就可以了。可以参考这篇文章,绝对值得一读:http://www.52pojie.cn/forum.php? ... peid%26typeid%3D256
Sound 发表于 2015-11-28 00:21

鑒於樓主第壹次發佈技術文章主題,

因達到精華標準 特採取 高亮 威望 精华 以茲鼓勵 ,希望堅持自己的愛好、多多發佈技術文獻與作品 並且早壹日成為大牛。

同時也希望他人學習樓主分享精神、技術菜,文章門檻低,不好意思發佈,這都不要緊.還有很多很多人正在破解大門前久久不能入門,也許正在苦惱。也許妳的壹個文章能讓他找到自信。而挽救壹個準備放棄的人
苏紫方璇 发表于 2015-11-28 00:31
感谢楼主分享分析过程,我对于.net的东西一点都不懂。。
Emil 发表于 2015-11-28 00:54
非常好的文章,感谢楼主的分享,受教了!~
小楠 发表于 2015-11-28 01:02
其实看来上面那么多东西 我就知道这个是脱壳的,其他的都不懂。因为不会.Net
liangwx717 发表于 2015-11-28 01:06
支持支持,就是想多学习一下手动脱壳NET的文章,感谢brezeer,以后能不能多发下这种文章,真的很想深入学习,感谢感谢!
铅笔刀 发表于 2015-11-28 06:30
支持一下
snwfnh 发表于 2015-11-28 08:11 来自手机
楼主分析的很好 学习了 谢谢
w470236189 发表于 2015-11-28 09:29
卧槽 楼主 牛逼啊  收藏!!!!!
yypE 发表于 2015-11-28 09:31
很厉害,感谢分享=。=
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-3-29 06:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表