官方仓库
学习日期:2023-07-13(防止后续仓库特性或功能更新无对比时间)
目标:本文介绍使用此github库,混淆unity项目的代码,在ILSpy中无法正确反编译。
一、说明
官方说明
配置界面
Features:
- ControlFlow:控制流程加密。对程序函数方法进行流程混淆,不改变执行流程,但是打乱编译流程以及IL码顺序,干扰破解。
- NumObfus:整数预设混淆。加密程序集中所有int预设常量。
- LocalVariables2Field:局部变量混淆为字段。程序函数的局部变量进行混淆加密,进一步降低代码可读性。
- StringCrypt:字符串加密。 每个字符串对应一个单独的密码和解密函数。
- ObfusFunc:类&方法&字段混淆(支持MOnoBehaviour)。采用Unity函数名堆积作为字典,此方法混淆的函数难以被反混淆器识别为Obfuscated或JunkFunc。
- Anti De4dot:使反混淆器失效。加固程序集,使de4dot无法对齐完成还原及反混淆。
- Anti Anti-ILDASM:使反汇编器失效(不支持IL2CPP)。通过MS提供的SuppresslldasmAttribute使反编译器无法正常工作。
- PEPacker:去除NET标志,使ILSpy,DnSpy等软件无法正确识别NET程序集(不支持IL2CPP)。
- ErrorMethod:加固方法使DnSpy等反编译器无法还原代码。
Notice:
- Native层直接调用C#或Unity内置API发送事件到C#的类和方法不可混淆(大多在移动平台)
- 特殊插件的脚本不可混淆,如:xLua和与之绑定的C#脚本
- 插件会自动忽略Custom_Ingore_List中的类名
- PEPacker仅支持Windows平台的Mono编译提供自动加固,Android需要先解压apk,对Assmebly-CSharp.dll手动加固,再二次打包apk并签名
FAQ:
- ControlFlow可能存在bug,如果unity抛出异常,可以尝试关闭ControlFlow功能
- 构建IL2CPP个别方法抛出异常,可将HandleShoot函数添加到ignore_ControlFlow_Method中
二、实测
正常build项目即可。有如下打印:
混淆之后用ILSpy:
取消所有混淆功能重新打包,用ILSpy查看: