使用命令行, 对C#的dll和exe文件进行混淆加密
C#作为托管语言编译生成的IL中间代码极易被反编译工具还原源码。据统计,超过83%的商业软件曾遭遇过代码逆向风险,导致核心算法泄露、授权被跳过. 因此对于C#语言开发的程序来说, 在发布前进行混淆和加密非常有必要.
本文主要介绍如何使用恒盾C#混淆加密大师1.3.0版本, 通过命令行的方式, 对C#进行混淆加密, 可以方便的集成到自己的程序发布流程中, 无需手动操作软件进行加密.
(如果你想了解如何通过软件界面进行操作, 可以查看我们之前的文章: 使用C#混淆加密大师保护你的代码 (代码混淆加壳工具,支持dll/exe混淆加密)
快速命令行加密混淆C#程序流程
1. 首先下载安装恒盾C#混淆加密卫士最新版本, 可以通过下面的链接下载
2. 下载安装完成后, 我们打开软件, 选择想要加密的C# 程序, 并选择想要的混淆选项
3. 在软件界面右上角, 选择文件->导出配置, 把导出的配置文件存放到的你的电脑中, 例如C:\app\config.csop
4. 在软件安装目录, 可以找到CLI.exe文件, 该文件就是命令行处理C#的命令行程序, 例如我的CLI.exe文件位于C:\app\CSharpObfuscator1.3.0\CLI.exe
5. 此时我们便可以通过命令行直接进行混淆加密处理了, 打开系统中的cmd程序, 输入下面的命令行
C:\app\CSharpObfuscator1.3.0\CLI.exe --config C:\app\config.csop
混淆处理信息如下:
6. 处理完成后, 混淆加密的程序会被存放在相应的位置
混淆配置文件详细说明
混淆配置文件config.csop是一个jsonc文件, 内部有详细的注释和介绍, 你可以根据需求进行修改, 一个完整的配置文件如下
{ // 需要加密的dll或者exe的路径 "ModulePath": "C:/app/Dummy.exe", // 输出文件路径 "OutputPath": "C:/app/Dummy_obf.exe", // 防调试, true为开启, false为关闭 "AntiDebug": false, // 防ILDsm, true为开启, false为关闭 "AntiILDasm": true, // 防DnSpy, true为开启, false为关闭 "AntiDnSpy": false, // 防篡改, true为开启, false为关闭 "AntiModify": false, // 加壳, true为开启, false为关闭 "AddShell": false, // 引用列表混淆, true为开启, false为关闭 "DupTypeRef": false, // 防de4dot, true为开启, false为关闭 "AntiDe4dot": false, // 防断点, true为开启, false为关闭 "AntiBreakPoint": false, // 防虚拟机, true为开启, false为关闭 "AntiVM": true, // 加密资源文件, true为开启, false为关闭 "ResourceProtect": false, // 防ILSpy, true为开启, false为关闭 "AntiILSpy": false, // 原生化EXE, true为开启, false为关闭 "Nativefier": false, // 防内存提取, true为开启, false为关闭 "AntiDump": false, // 垃圾域, true为开启, false为关闭 "JunkField": false, // 垃圾空指令, true为开启, false为关闭 "JunkNop": true, // 垃圾函数, true为开启, false为关闭 "JunkMethod": false, // 垃圾类型, true为开启, false为关闭 "JunkType": false, // 垃圾字符串, true为开启, false为关闭 "JunkString": false, // 文件信息混淆, true为开启, false为关闭 "AssemblyConfusor": true, // 布尔混淆, true为开启, false为关闭 "BooleanConfusor": true, // 文件时间混淆, true为开启, false为关闭 "TimeConfusor": false, // 流程混淆, true为开启, false为关闭 "ControlFlowConfusor": false, // 字符串加密, true为开启, false为关闭 "StringConfusor": false, // DOS头混淆, true为开启, false为关闭 "DosHeaderConfusor": false, // 字符串拆分, true为开启, false为关闭 "StringSplitConfusor": true, // 整数混淆, true为开启, false为关闭 "IntConfusor": false, // 小数混淆, true为开启, false为关闭 "DecimalConfusor": false, // 函数调用混淆, true为开启, false为关闭 "CalliConfusor": false, // 字符串隐藏, true为开启, false为关闭 "HideStringConfusor": false, // 数字隐藏, true为开启, false为关闭 "HideIntConfusor": false, // 函数体隐藏, true为开启, false为关闭 "HideMethodBodyConfusor": false, // 异步混淆, true为开启, false为关闭 "AwaitConfusor": false, // 链式函数混淆, true为开启, false为关闭 "ProxyRefConfusor": false, // 错误函数体混淆, true为开启, false为关闭 "InvalidILConfusor": false, // 重命名模式, 1为字母数字模式, 2为UUID模式, 3为特殊字符模式, 4为Base64模式, 5为英文单词模式 "RenameMode": 1, // Module重命名, true为开启, false为关闭 "ModuleRename": false, // 域重命名, true为开启, false为关闭 "FieldRename": false, // 函数重命名, true为开启, false为关闭 "MethodRename": false, // 命名空间重命名, true为开启, false为关闭 "NamespaceRename": false, // 参数重命名, true为开启, false为关闭 "ParamRename": false, // 类型重命名, true为开启, false为关闭 "TypeRename": false, // 忽略函数列表 "FuncIgnoreList": "TestFunc, NewClass.TestFunc, NameSpace.NewClass.TestFunc" }
配置文件的字段, 和软件界面里的配置一致, 详细的混淆选项的说明可以查看这个文档: 混淆选项详解
如果您不太会写配置文件, 可以直接在软件内选择好想要的配置, 然后在软件右上角菜单里面选择 文件 -> 导出配置, 让程序帮您自动生成配置文件.
以上便是命令行配置的详细说明, 如果在使用中遇到任何问题, 可以留言反馈.