.NET4.7.2 WPF桌面软件 免费无报毒高难度反编译防护全套方案
.NET4.7.2 WPF桌面软件 免费无报毒高难度反编译防护全套方案
一、核心总原则
全程使用:
-
免费工具
-
原生代码防护
-
无底层危险行为
彻底避免:
-
反虚拟机
-
内存拦截
-
驱动级调试
-
外层加壳
实现:
-
零报毒
-
高反编译难度
-
免费商用级保护
适配:
-
Windows Defender
-
360
-
火绒
-
主流安全软件
二、VS 编译优化(必须)
1、打开项目配置
进入:
项目属性 → 生成2、关闭调试信息
取消:
定义 DEBUG 常量定义 TRACE 常量3、开启优化
勾选:
优化代码作用:
-
删除冗余逻辑
-
提高反编译难度
-
降低可读性
4、关闭 PDB 调试信息
调试信息选择:
无效果:
删除 PDB无法变量追踪无法源码定位5、固定 CPU 架构
推荐:
x64或:
x86禁止:
Any CPU作用:
-
降低误报
-
减少程序集特征
6、关闭 XML 注释
取消:
生成 XML 注释文件7、高级设置
关闭:
JIT 调试托管调试代码跟踪三、ConfuserEx 混淆配置(核心)
1、下载工具
GitHub:
https://github.com/yck1509/ConfuserEx2、导入程序集
导入:
主程序 EXE所有 DLL统一混淆。
3、必须开启
以下功能安全且不报毒:
名称混淆控制流混淆字符串加密常量混淆资源混淆引用隐藏死代码删除4、必须关闭
以下功能容易误报:
AntiVMAntiDebug硬件断点检测内存保护进程 HookPE 压缩UPXNtAPI 劫持运行时自修复5、混淆后效果
使用:
dnSpyILSpydotPeek查看时:
变量乱码代码逻辑错乱字符串不可见方法名全部混淆四、WPF 专属加固
1、禁止松散 XAML
WPF 默认:
XAML → 编译成 BAML发布后:
无法直接读取界面源码2、核心逻辑不要写 XAML
禁止:
<Button Visibility="{Binding IsVip}" />核心逻辑放:
后台 C#3、授权逻辑拆散
不要集中在:
一个类一个窗口一个方法建议分散:
程序启动页面加载按钮点击功能调用五、原生无毒防护代码
1、轻量反调试
using System.Diagnostics;public static bool IsBeingDebugged(){ return Debugger.IsAttached;}if (IsBeingDebugged()){ Environment.Exit(0);}特点:
纯 .NET API无危险行为不会报毒2、完整性校验
程序启动时:
校验 EXE Hash如果:
被 dnSpy 修改被补丁篡改则:
直接退出3、敏感字符串拆分
错误写法:
string key = "123456789";推荐写法:
char[] k1 = { '1', '2', '3' };char[] k2 = { '7', '8', '9' };string realKey = new string(k1) + "456" + new string(k2);作用:
避免字符串搜索破解六、标准化发布配置
1、填写程序集信息
进入:
项目属性 → 程序集信息填写:
公司名称产品名称版本号版权2、禁止外层加壳
不要使用:
UPXAspack免费压缩壳原因:
误报率极高3、推荐发布模式
选择:
依赖框架部署优点:
体积小误报低特征干净4、更换正规图标
不要:
默认空白图标建议:
正规 ICO 图标七、整体防护效果
小白破解者
基本直接放弃普通逆向人员
需要数小时分析专业逆向人员
仍可能破解。
但:
成本高维护难收益低八、核心避坑总结
免费方案最佳组合
VS 编译优化+ConfuserEx+轻量原生校验零报毒核心逻辑
只做:
静态代码混淆不要做:
内存拦截驱动行为底层 Hook严禁使用
VMProtect 试用版Themida各种小众免费壳原因:
误报严重九、与 Python 对比
.NET WPF:
免费方案防护强度远高于 PythonPython:
几乎无法真正防反编译