购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

18.3 反混淆与脱壳

18.3.1 DIE查壳工具

DIE(Detect It Easy)是一款跨平台的分析工具,它可兼容Windows、Linux以及macOS等多个操作系统,为用户在多样化环境中分析.NET程序提供极大的便利。通过其直观、易用的图形界面,用户可以轻松查看程序的指令序列和壳的类型,从而更好地理解.NET程序结构、识别潜在安全威胁或进行软件逆向工程。DIE工具界面如图18-49所示。

图18-49 DIE查壳工具界面

从图18-49可以清楚地看到,当前可执行文件ConsoleNewtonsoft.exe使用的保护器是Confuser,另外还可以看到更多的基础信息,比如该程序基于.NET 4.0版本开发。

18.3.2 de4dot反混淆

在国内的商业环境中,许多基于.NET框架开发的产品为了增强自身安全性与保护知识产权,往往会在对外销售、安装部署的过程中进行混淆处理及加壳保护。当我们尝试使用dnSpy这类反编译工具来打开并分析这些经过处理的产品时,所面对的往往是经过混淆的代码,其原有的逻辑结构和命名信息已被替换为难以理解的字符或模式,而这增加了理解和分析代码的难度,如图18-50所示。

图18-50 被混淆的程序集文件

在.NET反混淆领域,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等。

接下来,让我们深入探索de4dot这款反混淆神器。该工具使用简单且便捷,对于反混淆技术不太熟悉的用户也能快速上手。

1.基本用法

在使用de4dot-3.0.3版本进行.NET程序混淆分析时,可以利用该工具提供的-d(或--detect)选项识别出目标程序集所使用的混淆器类型。比如,通过执行命令de4dot.exe-d c:\input\Dx.OfficeView.dll,de4dot准确地检测出Dx.OfficeView.dll这个文件是经由.NET Reactor混淆器加密处理过的,如图18-51所示。

图18-51 使用de4dot识别出混淆器

de4dot工具展现出强大的灵活性,不限于单个文件的处理,还提供了高效的批量反混淆功能。用户只需将待处理的混淆.dll文件放置在指定的input目录下,de4dot便能自动遍历这些文件,并对它们进行反混淆处理。处理完成后,生成的新的程序集文件将被保存到指定的output目录下。为了实现这一批量处理流程,可以运行下面的命令:

其中,-r选项用于指示de4dot递归地处理input目录下的所有文件及子目录下的文件;-ru选项则告诉de4dot在遇到无法识别的文件或混淆器时忽略它们,避免中断整个处理流程;而-ro选项后跟目标目录路径,用于指定反混淆后文件的保存位置。该命令执行后的结果如图18-52所示。

利用de4dot完成反混淆解密后,通过dnSpy这款强大的.NET反编译工具,我们能够清晰地看到恢复成正常状态的C#代码,仿佛揭开了层层迷雾,让原本晦涩难懂的代码变得一目了然,如图18-53所示。这不仅极大地提升了代码审计的效率,也让审计过程变得更加愉快和顺畅。

2.版本编译

截至2023年06月25日,de4dot的最新版本为de4dot v3.1.41592.3405。它的下载地址为https://github.com/de4dot/de4dot。下载该工具后找到并编译de4dot.netframework.sln文件,如图18-54所示。

使用Visual Studio打开该.sln项目文件,选择de4dot-x64为启动项,在属性页面的“编译条件”选择Release模式进行编译,如图18-55所示。

图18-52 de4dot反混淆后的输出结果

图18-53 使用dnSpy能正常识别反混淆后的代码

图18-54 de4dot.netframework.sln项目文件

图18-55 选择Release模式进行编译

编译成功后在de4dot-master\Release目录下会生成两个版本的文件夹,每个文件夹分别包含不同.NET环境下运行的基础依赖,如图18-56所示。

图18-56 生成两个版本的de4dot

比如,在执行de4dot.exe C:\input\OracleAccess.dll这条命令时,该工具能够迅速而准确地反混淆解密出OracleAccess.dll文件,并在输出目录下生成一个OracleAccess-cleaned.dll文件,如图18-57所示。

3.使用de4dot-cex反混淆ConfuserEx

de4dot-cex作为de4dot的一个专门分支,其独特之处在于专为反混淆由ConfuserEx及Confuser算法加密的应用而精心打造。de4dot-cex不仅能够解密被保护的资源文件,还能有效修复被扰乱的控制流,并还原内联常量。下面是一个解密前的代码示例。

图18-57 使用编译后的de4dot

使用de4dot-cex进行反混淆解密,发现代码明显被缩短了控制流,如下所示。

该工具当前的最新版本为v4.0.0,研究人员可以使用下列命令将该工具源码克隆到本地:git clone https://github.com/ViRb3/de4dot-cex.git。解压缩后得到de4dot.exe和de4dot-x64.exe这两个适用于不同Windows版本的反混淆程序,如图18-58所示。

图18-58 解压缩de4dot-cex的结果

下面以反混淆main.dll文件为例进行讲解。因为当前环境为Windows 10 x64,所以将该文件直接拖入de4dot-x64.exe,运行后生成一个main-cleaned.dll文件,如图18-59所示。

图18-59 使用de4dot-cex反混淆.dll文件

经过反混淆后使用dnSpy查看main-cleaned.dll,发现方法名和控制流代码可以正确解析,效果如图18-60所示。

图18-60 反混淆后的.dll文件 fD6Z86vYChtiJoB+TsOwO+TlIZRnEvOtA3+N4/5VGqatu+x+DRNO8IRwlaoPxrCQ

点击中间区域
呼出菜单
上一章
目录
下一章
×