由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,接下来跟随笔者一起了解这款神器特别之处吧!
由截止目前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,工具选对了之后就很简单了,介绍几个常用的命令
de4dot 提供 -d
选项检测混淆器类型,如下命令检测出混淆器是 .NET Reactor
de4dot.exe -d c:\input\Dx.OfficeView.dll
dde4dot 提供如下命令批量反混淆处置,将被反混淆的DLL文件放到input目录,解密后的程序集保存到output目录,-r
表示递归 ,-ru
表示忽略未知文件。-ro
表示输出文件到目标文件夹
de4dot.exe -r c:\input -ru -ro c:\output
反混淆解密后用dnspy打开能看到正常C#代码,可以继续愉快的代码审计了,解密后把文件发给了这位师傅,师傅也非常客气的请喝奶茶,感谢哈!有感于圈内讨论.NET安全的学习氛围还是不错的。
.NET下可以反混淆的工具还有很多,笔者打算日后再逐个介绍给大伙认识。文章涉及的工具和PDF已打包发布在星球,欢迎对.NET安全关注和关心的同学加入我们 [dotNet安全矩阵] ,在这里能遇到有情有义的小伙伴,大家聚在一起做一件有意义的事