.NET反混淆工具de4dot使用介绍
最近在逛看雪时,发现一个帖子,https://bbs.kanxue.com/thread-274562.htm。里面介绍 了常见语言基础逆向方法合集。关于.net程序逆向这块,介绍了三个工具。
.NET Reflector https://www.red-gate.com/products/dotnet-development/reflector/ (反编译任何 .NET 代码,即使没有源代码)
dnspy https://github.com/dnSpy/dnSpy (.NET 程序集调试器和资源编辑器)
de4dot (.NET 反混淆和脱壳工具) 目前.NET程序加壳这一块我还没涉及到,所以本文只介绍反混淆相关的功能。
在经过初次尝试以后,发现这个工具确实强大,虽然被混淆后的代码不能完成恢复成原来的样子(像变量名这种已经丢失了),但基本不影响阅读源码了。
de4dot最后更新是在3年前,不继续更新了,有点可惜。技术影响力太大了,有时候也不是什么好事,就挺无奈的。
1、下载源码编译
项目地址:https://github.com/de4dot/de4dot
这里有两个解决方案文件,一个是基于.NET Core的(de4dot.netcore.sln),一个是基于.NET Framework的(de4dot.netframework.sln)
如果使用.net core版本,需要安装netcoreapp3.1和netcoreapp2.1
如果使用.net framework版本,需要安装net 35和net45
我这里直接编译的.net framework版本,没有编译.net core版本了。
注意:
如果选择.net framework版本建议使用Visual Studio 2019及以下版本编译,因为Visual Studio 2022不带.NET Framework 4.5的包,直接编译会报错,还得折腾在Visual Studio 2022下安装NET45的开发包。(同理,新版本vs也没带.net core 2.1)
不过这里还是整理了在Visual Studio 2022下安装NET 45的解决方案,可以参考以下链接:
https://ldqk.xyz/73?t=vl40kuee4phc
https://blog.walterlv.com/post/how-to-support-net45-on-vs2022-or-later.html
具体我也没有去尝试,因为我用另外一台机器上的Visual Studio 2019编译通过了
不用修改任何设置,直接可以编译通过,输出路径为解决方案路径下的Debug目录
2、如何反混淆.NET 程序集
最简单粗暴的方式,
1、将文件拖入到de4dot.exe运行即可
2、命令行下输入
1 de4dot.exe "D:\xxx.exe"
运行后文件在程序集的目录下生成一个带-cleaned的新程序集。
也可以通过 -f 和-o 参数,指定输出 路径
-f : 指定.NET 程序集文件
-o : 指定输出 文件
1 de4dot.exe file1 -f "D:\xxx.exe" -o "D:\output\xxx_cleaned.exe"
这里我准备了一个程序集测试,我先用某混淆工具进行混淆,使用.NET Reflector反编译显示如下:
使用de4dot反混淆后
3、反混淆整个文件夹
-r xxx : 指定输入文件夹,包括子文件夹
-ru : 跳过不支持的混淆工具混淆过的文件
-ro : 指定输出文件夹
1 de4dot -r "D:\input" -ru -ro "D:\output"
4、检测混淆工具名称
可以通过 -d 参数查看
1 de4dot.exe -f "D:\a\xxx.exe" -d
输出为:
1 de4dot v3.1.41592.3405 2 3 Detected Dotfuscator (D:\a\xxx.exe)
如果使用 -r ,则输出 整个文件夹里全部文件使用的混淆工具名称
5、指定混淆工具名称
de4dot可能检测不准确混淆工具的名称,可以通过 -p 参数指定
1 de4dot file1.dll -p sa
de4dot中支持的完整的混淆工具简写可以在不带参数运行时的界面上看到
6、其它用法
可以在不带参数运行时,看到全部参数及说明,或者通过项目主页上的README.md了解更详细的使用说明。我这里基本已经能满足使用需求,所以也就不再进行深一步的探讨了。