包含托管代码的软件程序集(例如 .NET 应用程序使用的程序集)可以使用免费的反编译工具轻松反编译成可读的源代码。
这可能会给那些希望防止由于版权或潜在安全问题而查看或更改其代码的应用程序供应商带来挑战。
对于部署到客户端设备的任何应用程序,无法保证完全防止查看或篡改代码。但是,通过使用混淆工具,例如 ConfuserEx,您可以显着提高反编译应用程序的难度。
在本文中,我将介绍如何使用 ConfuserEx 为部署到客户端的 .NET 程序集添加一层保护。
混淆设施我不会深入研究混淆的优缺点,而是假设您已经决定要对一个或多个 .NET 程序集进行混淆。
通过混淆程序集,您可以帮助保护它们免于使用免费工具(例如IlSpy和JetBrains dotPeek )进行反编译、查看和操作。
ConfuserEx 是一个开源混淆工具,可以为 .NET 程序集添加多种不同的保护。在本文中,我使用的是ConfuserEx 2,它是原始Confuser和ConfuserEx项目的继承者。
ConfuserEx 2 提供以下混淆功能。
- 支持 .NET Framework 2.0/3.0/3.5/4.0/4.5/4.6/4.7/4.8
- 符号重命名(支持 WPF/BAML)
- 防止调试器/分析器
- 防止内存转储
- 防篡改保护(方法加密)
- 控制流混淆
- 常量/资源加密
- 参考隐藏代理
- 禁用反编译器
- 嵌入依赖
- 压缩输出
- 可扩展的插件 API
来源:https ://github.com/mkaring/ConfuserEx
免费工具一点也不差!
当然,还有许多其他的混淆工具,有些是免费的,有些不是。
本文重点介绍 ConfuserEx 2 以及如何使用其 GUI 和 CLI 工具。
请注意,在本文的其余部分中,为简单起见,我将“ConfuserEx 2”称为“ConfuserEx”。
使用图形用户界面ConfuserEx GUI(图形用户界面)非常适合开始使用 ConfuserEx 混淆,如果您不需要经常混淆程序集,它可能是您前进的好选择。
请注意,本文假定您正在使用 Windows 工作站进行操作。
ConfuserEx 下载要开始使用,请前往ConfuserEx 发布页面。
向下滚动到最新版本的“资产”部分,然后单击“ConfuserEx.zip”文件进行下载。此文件在单个包中包含 GUI 和 CLI 组件。
下载 zip 文件后,我建议通过右键单击该文件来取消阻止该文件,然后选择“属性”->“取消阻止”->“应用”->“确定”。
然后,我建议在您的 Program Files 目录中创建一个名为“ConfuserEx”的目录,并将 ConfuserEx zip 文件解压缩到其中。这应该会导致 ConfuserEx 安装在以下位置(假设系统驱动器号为 C)。
C:\Program Files\ConfuserEx
请注意,您可能需要考虑将上述内容添加到系统路径中,以便以后能够更方便地从命令行访问 ConfuserEx。
启动图形用户界面要启动 ConfuserEx GUI,请在安装目录中双击“ConfuserEx.exe”文件(考虑创建 EXE 的快捷方式以使其更易于访问)。
GUI 应该与下面的屏幕截图非常相似。
ConfuserEx 图形用户界面
ConfuserEx GUI 显示了许多不同的选项卡和按钮,用于访问其功能的各个方面。
在接下来的小节中,我将专注于您需要了解的主要功能,以便使用通用设置来混淆一个或多个程序集。
项目输入模块我们需要做的第一件事是指定我们想要混淆的输入模块。
我们可以通过将所需的程序集拖放到用户界面的“将输入模块拖放到此处”区域中来做到这一点。或者,按加号 (+) 按钮以使用“打开文件”对话框选择程序集。
ConfuserEx 项目输出模块
从上面的屏幕截图中可以看出,添加程序集后,会自动填充基本目录和输出目录字段。输出目录字段设置为与基本目录相同的路径,但附加了一个“Confuser”目录。如果需要,您可以修改输出目录,但基本目录需要保持不变,以防止以后在应用保护时出现 IO 错误。
指定输入模块后,单击“设置”选项卡以继续进行混淆过程的下一步。
设置在“设置”选项卡中,按用户界面“规则”区域右侧的加号 (+) 按钮。
这将添加一个带有文本“true”的规则,如下所示。
ConfuserEx 设置
这看起来有点不寻常,但 GUI 本质上是在显示规则的模式,即“真”以表明应该始终应用该规则。在继续之前,我们需要编辑此规则的详细信息。
选择新规则后,按编辑(铅笔图标)按钮打开“编辑规则...”对话框。
编辑规则用于编辑规则的对话框允许通过按“保护”区域右侧的加号 (+) 图标来指定单个保护。
或者,可以通过从“预设”下拉控件中选择一个选项来应用一组预配置的保护,如下所示。
ConfuserEx 编辑规则对话框
从“预设”下拉控件中,选择“最大”选项,然后选择“完成”按钮。这将应用最大的可用保护集。
随意根据您的要求调整选定的预设/保护。
请注意,某些保护功能(例如“重命名”)可能会影响某些 .NET 功能,例如反射。确保在应用混淆后彻底测试您的应用程序。
话虽如此,点击“保护!” 选项卡以继续进行混淆过程的最后一步。
保护保护!选项卡显示允许启动或取消应用保护过程的按钮,如下所示。
ConfuserEx 保护
在'保护!选项卡按“保护!” 按钮应用保护。
用户界面的日志区域将显示有关保护过程进度的信息。
如果一切顺利,您将收到一条绿色状态消息,表明该过程已成功完成。
使用命令行界面如果您需要从命令行处理混淆,ConfuserEx 为此提供了一个 CLI(命令行界面)工具。
当前版本的 ConfuserEx CLI 提供了以下使用文档。
Confuser.CLI -n|noPause Confuser.CLI -n|noPause -o|out= -n|noPause : 完成保护后没有暂停。 -o|out :指定输出目录。 -probe :指定探测目录。 -plugin :指定插件路径。 -debug :指定调试符号生成。
开始使用 CLI 的最简单方法是首先使用 GUI 创建一个 ConfuserEx 项目 (.crproj) 文件。为此,请遵循 GUI 部分中记录的相同步骤,但不是完成最后的保护步骤,而是使用“保存项目”按钮保存项目文件。
请注意,ConfuserEx 项目文件也可以在任何文本编辑器中手动创建为符合文档格式指南的 XML 文档。
准备好项目文件后,发出类似于以下内容的命令。
Confuser.CLI.exe C:\Users\Jonathan\Documents\myproject.crproj
请注意,如果您尚未将 ConfuserEx 安装目录添加到系统路径,则需要指定 Confuser.CLI.exe 文件的完整路径。
执行上述命令后,您将看到日志消息输出到控制台。这些消息与 ConfuserEx GUI 的日志区域中显示的消息相同。在该过程结束时,如果该过程已成功完成,将显示一条绿色状态消息。
ConfuserEx CLI 命令可以作为自动化过程的一部分执行,例如构建后步骤。下面是一个 ConfuserEx 构建后命令的示例。
if "$(ConfigurationName)" == "Release" C:\Program Files\ConfuserEx\Confuser.CLI.exe $(ProjectDir)Confuser.crproj
如果项目正在“发布”模式下构建,上述命令将使用指定 ConfuserEx 项目文件中的设置应用混淆。
或者,您可以使用MSBuild 集成功能将 ConfuserEx 混淆更紧密地集成到您的构建过程中。
测试在结束之前,最好通过反编译工具检查您的程序集是否已正确混淆。
要对此进行测试,请下载并安装JetBrains dotPeek;免费的 .NET 反编译器。
安装并启动 dotPeek 后,浏览到您的项目 bin 文件夹(文件 -> 打开)并尝试查看程序集的清晰版本和混淆版本以查看差异。
JetBrains dotPeek
当您尝试查看任何混淆程序集的源代码时,您应该会看到上面屏幕截图中显示的注释。
IE// ISSUE: unable to decompile the method.
请注意,在旧版本的 dotPeek 中,尝试反编译混淆程序集可能会显示错误消息,甚至会导致程序崩溃。
现在,您可以确信已正确应用保护措施。
概括在本文中,我提供了如何使用 ConfuserEx 混淆 .NET 程序集的演练。这可以提供一定程度的保护,防止查看或篡改源代码。
我首先列出了 ConfuserEx 提供的保护功能,并提供了有关混淆的优缺点的讨论链接,以及许多其他可用混淆工具的链接。
在此之后,我演示了如何使用 ConfuserEx GUI 和 CLI 工具对程序集应用混淆。
最后,我研究了如何使用 dotPeek .NET 反编译器测试保护是否已正确应用。