使用[.NET Reflector]对dll进行反编译时,可能会遇到这样的情况

这是由于dll结果了混淆,通常的反编译不能正确解析一些字段
(更正,上图所示并不是混淆)
这时候需要使用[de4dot]工具先对dll进行反混淆,然后再用[.NET Reflector]进行反编译
de4dot的构建
[de4dot]需要下载源码然后进行构建才能使用
下载地址:[https://github.com/brianhama/de4dot]
用git获取项目而不是下载zip,这是因为这个项目还包含了一个git项目[https://github.com/0xd4d/dnlib],这个项目构建的dnlib.dll是[de4dot]的核心dll
按照[dnlib]项目的环境:需要VS2017(C#7.3)或更高版本来构建它。还需要.NET Core SDK 2.1或更高版本
使用Visual Studio installer对VS2019进行拓展



安装完成后,打开[de4dot]项目
构建解决方案
在""…\de4dot\de4dot\obj\x86\Debug"路径下可以看到

cmd运行 “de4dot.exe -r f:\input -ro f:\output”
"f:\input"为dll所在目录
"f:\output"为dll反混淆后的目录
得到结果:
F:\GitHub\de4dot\de4dot-x64\obj\x86\Debug>de4dot-x64.exe -r f:\input -ro f:\output
未处理的异常: System.IO.FileNotFoundException: 未能加载文件或程序集“de4dot.cui, Version=3.1.41592.3405, Culture=neutral, PublicKeyToken=d3f3ed1e47f67fc6”或它的某一个依赖项。系统找不到指定的文件。
文件名:“de4dot.cui, Version=3.1.41592.3405, Culture=neutral, PublicKeyToken=d3f3ed1e47f67fc6”
在 de4dot_x64.Program.Main(String[] args)
警告: 程序集绑定日志记录被关闭。
要启用程序集绑定失败日志记录,请将注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD)设置为 1。
注意: 会有一些与程序集绑定失败日志记录关联的性能损失。
要关闭此功能,请移除注册表值 [HKLM\Software\Microsoft\Fusion!EnableLog]。
启用程序集绑定失败日志记录
[HKLM\Software\Microsoft\Fusion!EnableLog]
第一个英文是代码,首先找到HK开头的,
HK代表的是:HKEY
L代表的是:LOCAL
M代表的是:MACHINE

一路找到Fusion文件下,并没有看到EnableLog
在右边-右键-新建-DWORD(32位)值

十进制的方式将值设为1
开启完成
再次cmd运行 “de4dot.exe -r f:\input -ro f:\output”,得到结果:
F:\GitHub\de4dot\de4dot\obj\x86\Debug>de4dot.exe -r f:\input -ro f:\output
未处理的异常: System.IO.FileNotFoundException: 未能加载文件或程序集“de4dot.cui, Version=3.1.41592.3405, Culture=neutral, PublicKeyToken=d3f3ed1e47f67fc6”或它的某一个依赖项。系统找不到指定的文件。
文件名:“de4dot.cui, Version=3.1.41592.3405, Culture=neutral, PublicKeyToken=d3f3ed1e47f67fc6”
在 de4dot_x86.Program.Main(String[] args)
=== 预绑定状态信息 ===
日志: 用户 = ChinoChan\chino
日志: DisplayName = de4dot.cui, Version=3.1.41592.3405, Culture=neutral, PublicKeyToken=d3f3ed1e47f67fc6
(Fully-specified)
日志: Appbase = file:///F:/GitHub/de4dot/de4dot/obj/x86/Debug/
日志: 初始 PrivatePath = NULL
调用程序集: de4dot, Version=3.1.41592.3405, Culture=neutral, PublicKeyToken=d3f3ed1e47f67fc6。
===
日志: 此绑定从 default 加载上下文开始。
日志: 未找到应用程序配置文件。
日志: 使用 C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config 的计算机配置文件。
日志: 策略后引用: de4dot.cui, Version=3.1.41592.3405, Culture=neutral, PublicKeyToken=d3f3ed1e47f67fc6
日志: 试图下载新的 URL file:///F:/GitHub/de4dot/de4dot/obj/x86/Debug/de4dot.cui.DLL。
日志: 试图下载新的 URL file:///F:/GitHub/de4dot/de4dot/obj/x86/Debug/de4dot.cui/de4dot.cui.DLL。
日志: 试图下载新的 URL file:///F:/GitHub/de4dot/de4dot/obj/x86/Debug/de4dot.cui.EXE。
日志: 试图下载新的 URL file:///F:/GitHub/de4dot/de4dot/obj/x86/Debug/de4dot.cui/de4dot.cui.EXE。
从这里看出[de4dot.exe]缺少de4dot.cui.DLL,de4dot.cui.DLL在"…\de4dot\de4dot.cui\obj\Debug\de4dot.cui.dll",复制到[de4dot.exe]所在目录下
再次运行,依然会提示缺少相关dll,将所有缺少的dll都复制后,则能正确运行
再次cmd运行 “de4dot.exe -r f:\input -ro f:\output”,得到结果:
F:\GitHub\de4dot\de4dot\obj\x86\Debug>de4dot.exe -r f:\input -ro f:\output
de4dot v3.1.41592.3405 Copyright (C) 2011-2015 de4dot@gmail.com
Latest version and source code: https://github.com/0xd4d/de4dot
没有其他反馈,但"f:\output"目录下没有任何东西
尝试将目标dll直接拖到[de4dot.exe]下,得到:

在反混淆由Xenocode四级加密的exe文件时,弹出 "WARNING: The file isn’t a .NET PE file"这样的提示而终止,反混淆失败
妈的
本文介绍了如何使用de4dot对混淆的dll进行反混淆,以及de4dot的构建过程。首先,从GitHub下载de4dot源码,需要VS2017及以上版本和.NET Core SDK 2.1+来构建。构建后,在指定目录运行de4dot.exe进行反混淆操作。在遇到程序集绑定失败日志记录问题时,通过修改注册表启用日志。然而,运行时可能因缺少依赖dll导致错误,需手动复制缺失dll到相应目录。在尝试反混淆某些加密文件时,可能会遇到无法处理的文件类型。


被折叠的 条评论
为什么被折叠?



