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

0x01 背景

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

1d04708054b5e553e79ed7ca6e898981.png

9b62c619fdf14d8f66bf06c985b5d80a.png

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

657ee2f97a30bf11202d3a7bd461ecf5.png

反混淆的工具有很多,其中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,项目没有编译好的程序,需要下载后自行编译

c08865f5d70e8baf9062f456d464705d.png

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 整个执行过程如下图

e79d02ac332be5e2d3d4612b84b6c2c3.png

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

0x03 用法

1. 检测混淆

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

de4dot.exe -d c:\input\Dx.OfficeView.dll

dbb900075e7f221307d63ef3b3f34c90.png

2. 批量反混淆

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

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

8f28e111bb10b5857a5a457dd6c18799.png

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

2662d254a1ce52617a9ee936a750f948.png

0x04 结语

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值