.NET安全对抗 | 利用de4dot解密被混淆的.NET代码

0X01 背景

由dotNet安全矩阵星球圈友们组成的微信群里大家伙常常聊着.NET话题,这不今天有个群友下午1:06分抛出反编译后还是混淆的代码,那么肯定需要加密后获取正常的.NET代码,笔者1:35看到后快速响应私聊了这位师傅,拿到需要解密的DLL,大约45分钟后2:20左右解密成功,此文主要把中间的过程踩的坑和解密方法记录一下。

这位师傅用反编译工具打开后部分方法名显示为不规则的字符串,混淆代码的操作比较明显,此类混淆经过解密得知是.NET Reactor,笔者曾经也用过此工具混淆过代码,如下图

反混淆的工具有很多,其中de4dot是目前最主流的反混淆工具,它使用dnlib来读取和写入程序集可解密以下工具混淆过的.NET代码,如 Xenocode、.NET Reactor、MaxtoCode、Eazfuscator.NET、Agile.NET、CodeWall、Mpress .NET Packer、Rummage Obfuscator、Babel.NET、CodeFort、CryptoObfuscator、DeepSea Obfuscator、Dotfuscator、 Goliath.NET、ILProtector、SmartAssembly、Spices.Net,接下来跟随笔者一起了解这款神器特别之处

0X02 踩坑

截止目前2022.06.22,最新版本为 de4dot v3.1.41592.3405 ,项目地址:https://github.com/de4dot/de4dot,项目没有编译好的程序,需要下载后自行编译

CMD窗口下运行命令 de4dot-x64.exe -d Dx.OfficeView.dll 抛出异常,提示找不到加载程序集de4dot.cui,解决方法将项目目录下的 de4dot.cui.dll 复制到当前运行目录,再次运行后提示缺少 de4dot.code.dll 和 dnlib.dll ,同样的方法将缺少的这两个DLL文件复制到当前目录,总算可以正常运行显示了当前de4dot版本信息,但又抛出了新的异常信息 Hmmmm... something didn't work. Try the latest version 整个执行过程如下图

解决方法就是不用新版本,使用老版本3.0系列的de4dot,笔者用 de4dot-3.0.3,工具选对了之后就很简单了,介绍几个常用的命令

0X03 使用小记

3.1 检测混淆

de4dot 提供 -d选项检测混淆器类型,如下命令检测出混淆器是 .NET Reactor


de4dot.exe -d c:inputDx.OfficeView.dll

3.2 批量反混淆

de4dot 提供如下命令批量反混淆处置,将被反混淆的DLL文件放到input目录,解密后的程序集保存到output目录,-r表示递归 ,-ru表示忽略未知文件。-ro表示输出文件到目标文件夹


de4dot.exe -r c:input -ru -ro c:output

反混淆解密后用dnspy打开能看到正常C#代码,可以继续愉快的代码审计了,解密后把文件发给了这位师傅,师傅也非常客气的请喝奶茶,感谢哈!有感于圈内讨论.NET安全的学习氛围还是不错的。

0X04 结语

.NET下可以反混淆的工具还有很多,笔者打算日后再逐个介绍给大伙认识。文章涉及的工具和PDF已打包发布在星球,欢迎对.NET安全关注和关心的同学加入我们 [dotNet安全矩阵] ,在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事。

欢迎大伙持续关注,交流。

为了帮助研发大佬们熟悉和掌握.NET应用安全相关的漏洞介绍和修复解决方案,我们创建了一个.NET应用安全建设的星球,专门科普.NET领域相关的安全漏洞和提供漏洞修复方法,星球部分主题如下图所示。

感兴趣的研发大佬们可以加入我们一起学习交流。星球原价¥99,价格随着内容沉淀和成员数量增加还会适当提高,因此越早加入越好。我们为大家准备了星球门票代金券,大家可以自行领取,可立减20元。期待更多伙伴的加入!

另外如果对.NET安全攻防技术研究和渗透感兴趣的朋友们,可以扫下面的dot.Net安全矩阵星球二维码,加入我们。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>