de4dot构建过程

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

使用[.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"这样的提示而终止,反混淆失败

妈的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值