http://www.52pojie.cn/thread-439154-1-1.html?t=1451911355271

前言:自从脱壳神器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企业版的使用权? 想想还是有点小激动呢。但是由于的难度极高,修复难度极大,以至于在原帖中 没有人 能及时提供一个明确的解决方案。那么现在请大家跟我一起来解密。

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

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

其实吧,我们还有系统自带的“月光宝盒”可以用。看看发帖时间是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需要自己再多修复些东西。

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

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

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

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

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

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

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

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

画眉原文:“你需要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入口点而苦恼了。

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

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

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

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

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

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

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

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

运行程序看看:

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

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

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

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

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

继续用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, 下载次数: 1237)  (有bug会再更新,最后更新时间2015-11-28 19:34)
6. unpackme原文件:    UnpackMe.rar (1023.97 KB, 下载次数: 359)  (注意,原始unpackme杀毒软件报毒,为安全起见,请在虚拟机下运行。非本人软件,不能保证其安全性)

[.NET逆向] 【.NET】UnpackMe!Shielden+DNGuard,双层变异壳 - 脱壳详解 [复制链接]相关推荐

  1. 【胖虎的逆向之路】03——Android一代壳脱壳办法罗列实操

    [胖虎的逆向之路]03--Android脱壳办法罗列&脱壳原理详解 [胖虎的逆向之路]01--动态加载和类加载机制详解 [胖虎的逆向之路]02--Android整体加壳原理详解&实现 ...

  2. 【胖虎的逆向之路】02——Android整体加壳原理详解实现

    [胖虎的逆向之路](02)--Android整体加壳原理详解&实现 Android Apk的加壳原理流程及详解 文章目录 [胖虎的逆向之路](02)--Android整体加壳原理详解& ...

  3. [网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)

    本系列虽然叫"网络安全自学篇",但由于系统安全.软件安全与网络安全息息相关,作者同样会分享一些系统安全案例及基础工具用法,也是记录自己的成长史,希望大家喜欢,一起进步.前文讲解了i ...

  4. VCF变异结果文件详解

    看懂变异记录结果文件(VCF) VCF文件介绍: 做过DNA重测序,群体遗传进化,BSA,GWAS等项目的人都会遇到VCF文件,这个文件记录了所有样品全基因组中所有位置变异(主要包括SNP和InDel ...

  5. 【胖虎的逆向之路】04——脱壳(一代壳)原理脱壳相关概念详解

    [胖虎的逆向之路]04--脱壳(一代壳)原理&脱壳相关概念详解 [胖虎的逆向之路]01--动态加载和类加载机制详解 [胖虎的逆向之路]02--Android整体加壳原理详解&实现 [胖 ...

  6. Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解

    一.前言 在之前已经介绍过了Android中一款hook神器Xposed,那个框架使用非常简单,方法也就那几个,其实最主要的是我们如何找到一个想要hook的应用的那个突破点.需要逆向分析app即可.不 ...

  7. 人类遗传变异神库 | ClinVar数据库详解

    ClinVar是一个免费访问的公共数据库,记录了人类变异和表型之间的关系,并提供了支持性证据(supporting evidence).ClinVar提供的变异临床意义(clinical signif ...

  8. List逆向遍历、反向遍历--Iterator详解

    List逆向遍历.反向遍历–Iterator详解 概述 在使用java集合的时候,都需要使用Iterator.但是java集合中还有一个迭代器ListIterator,在使用List.ArrayLis ...

  9. Android逆向之旅—Hook神器Cydia Substrate使用详解

    一.前言 在之前已经介绍过了Android中一款hook神器Xposed,那个框架使用非常简单,方法也就那几个,其实最主要的是我们如何找到一个想要hook的应用的那个突破点.需要逆向分析app即可.不 ...

最新文章

  1. PHP里switch用法举例,PHP Switch语句的功能实例
  2. 使用python操作hdfs,并grep想要的数据
  3. Android system server之WatchDog看门狗分析
  4. html5 新增属性了解
  5. CISCO网络故障排错命令总结分享
  6. js请求结果拦截机器_CefSharp请求资源拦截及自定义处理
  7. 使用命令重定向操作符 (Redirection Operators)
  8. 12-6路径的其他操作
  9. linux中mysql不显示中文_linux中解决mysql中文乱码方法
  10. VScode插件C/C++ Project Generator产生的Makefile模板
  11. Arduino UNO驱动液晶屏TFT_LCD_ST7789v
  12. ADS1115(测量ADC)的使用教程(IIC)
  13. 静态页面和动态页面中的静态和动态到底指的是什么
  14. latex大斜杠, 除号
  15. Vue+Gojs实现流程图demo
  16. IDEA代码规约插件灵狐安装
  17. Pygame实战:利用Python实现智能五子棋,实现之后发现我玩不赢它。
  18. Problem-A 老衲的嘱托
  19. 结构化数据、非结构化数据、数据清洗等概念
  20. STM32使用模拟I2C读取NPA700B015A绝压传感器

热门文章

  1. HBase应该知道的
  2. ACPI相关(3)- PCI枚举
  3. Qt项目打包发布超详细教程
  4. 智源社区AI周刊No.98:Adept发布行为预训练模型ACT-1;首个扩散模型领域综述发布;PyTorch加入Linux基金会...
  5. LibreOffice office转pdf
  6. MT6575驱动调试笔记
  7. HyperMesh 使用指南
  8. Blender图解教程:如何删除顶点所属的低权重顶点组
  9. 【SQL开发实战技巧】系列(四十五):Oracle12C常用新特性☞VARCHAR2/NVARCHAR2类型最大长度由4000字节扩展到32767字节
  10. 关于 The RPC server is unavailable