文章目录一、前言二、使用ConfuserEx三、新建一个项目做测试四、使用Obfuscar4.1项目根目录添加 obfuscar.xml4.2 修改项目配置五、异常处理(exe生成)测试六、其他文件也复制过来方便测试6.1 改配置 到 project七、混淆后EXE打不开7.1 规则禁用7.2 排除窗体总结一、前言对一个项目代码混淆。因为是NET的所以异常坎坷。记录一下二、使用ConfuserExConfuserEx:官方GitHubhttps://github.com/mkaring/ConfuserEx/releases下载最新的1.6打包失败 然后看它说明是不支持.NET三、新建一个项目做测试四、使用ObfuscarNUGET Obfuscar 最新稳定版2.2.504.1项目根目录添加 obfuscar.xml?xmlversion1.0encodingutf-8?!--根标签严格按你版本报错要求写Obfuscator--ObfuscatorVarnameInPathvalueD:\WorkSpace\VS\Other\test\bin\Release\net8.0-windows/VarnameOutPathvalue$(InPath)\Confused/VarnameLogFilevalueD:\WorkSpace\VS\Other\test\obfuscar.log/!--Module--Modulefile$(InPath)\test.exe/!--保留公共API不修改公共类/方法/属性名称保证兼容性--VarnameKeepPublicApivaluefalse/!--资源文件加密加密程序集内嵌资源文件--VarnameResourceEncryptionvaluefalse/!--重命名开启混淆私有/内部成员名称--VarnameRenamingvaluetrue/!--字符串加密关闭不加密代码中的字符串常量--VarnameHideStringsvaluetrue/!--控制流混淆开启打乱代码执行流程增加反编译难度--VarnameControlFlowObfuscationvaluetrue/!--防反编译开启禁止ILDasm工具反编译程序集--VarnameSuppressIldasmvaluetrue/!--隐藏私有API开启强制混淆私有成员提升安全性--VarnameHidePrivateApivaluetrue//Obfuscator4.2 修改项目配置TargetNameObfuscateAfterTargetsBuildCondition$(Configuration) Release!--执行 Obfuscar 混淆--ExecCommandquot;D:\Nuget\obfuscar\2.2.50\tools\Obfuscar.Console.exequot; quot;$(ProjectDir)obfuscar.xmlquot;//TargetNUGET Obfuscar.Console.exe 路径要对上就是了。五、异常处理(exe生成)按上一步配置好了以后出现了异常查询\Obfuscar官方文档 https://docs.lextudio.com/obfuscar/它的说法是只需要 混淆dlldll相当于web里的bin,混淆exe没用。逻辑都在dll里混淆dll就行。测试六、其他文件也复制过来方便测试对了不能用debug ,只能用Relase ,它的说法是影响之后测试Debug调试。想把.net8.0的其他文件拷贝过来6.1 改配置 到 projectTargetNameObfuscateAfterTargetsBuildCondition$(Configuration) Release!--1.执行 Obfuscar 混淆--ExecCommandquot;D:\Nuget\obfuscar\2.2.50\tools\Obfuscar.Console.exequot; quot;$(ProjectDir)obfuscar.xmlquot;/!--下面是新加的--!--2.定义需要复制的运行文件排除已被混淆的DLL、Confused文件夹--ItemGroupRunFilesInclude$(OutputPath)**\*.*Exclude$(OutputPath)Confused\**\*;$(OutputPath)test.dll;//ItemGroup!--3.递归复制所有文件子文件夹到 Confused 目录保留目录结构--CopySourceFiles(RunFiles)DestinationFolder$(OutputPath)Confused\%(RecursiveDir)OverwriteReadOnlyFilestrueSkipUnchangedFilestrue//Target都过来了七、混淆后EXE打不开7.1 规则禁用VarnameKeepPublicApivaluetrue/VarnameResourceEncryptionvaluefalse/VarnameRenamingvaluetrue/!--HideStringsfalse能解决打不开EXE的问题--VarnameHideStringsvaluefalse/VarnameControlFlowObfuscationvaluetrue/VarnameSuppressIldasmvaluetrue/!--HidePrivateApifalse能解决EXE运行出错的问题--VarnameHidePrivateApivaluefalse/7.2 排除窗体?xmlversion1.0encodingutf-8?!--根标签严格按你版本报错要求写Obfuscator--ObfuscatorVarnameInPathvalueD:\WorkSpace\VS\Other\test\bin\Release\net8.0-windows/VarnameOutPathvalue$(InPath)\Confused/VarnameLogFilevalueD:\WorkSpace\VS\Other\test\obfuscar.log/!--Module--Modulefile$(InPath)\test.dll!--强制保留所有窗体类不做任何修改--SkipTypenametest.Form1skipRenamingtrueskipStringHidingtrueskipResourceEncryptiontrue//Module!--保留公共API不修改公共类/方法/属性名称保证兼容性--VarnameKeepPublicApivaluefalse/!--资源文件加密加密程序集内嵌资源文件--VarnameResourceEncryptionvaluetrue/!--重命名开启混淆私有/内部成员名称--VarnameRenamingvaluetrue/!--字符串加密关闭不加密代码中的字符串常量--VarnameHideStringsvaluetrue/!--控制流混淆开启打乱代码执行流程增加反编译难度--VarnameControlFlowObfuscationvaluetrue/!--防反编译开启禁止ILDasm工具反编译程序集--VarnameSuppressIldasmvaluetrue/!--隐藏私有API开启强制混淆私有成员提升安全性--VarnameHidePrivateApivaluetrue//Obfuscator总结很明显规则禁用才是正确的。我甚至可以把混淆规则全部打开。