类似链家网站建设方案,集团网站目标,发帖网站有哪些,wordpress电子书插件Unity_Obfuscator Pro代码混淆工具_学习日志
切勿将密码或 API 密钥存储在您附带的应用程序内。 混淆后的热更新暂时没有想到怎么办
Obfuscator 文档
https://docs.guardingpearsoftware.com/manual/Obfuscator/Description.html商店链接Obfuscator Pro#xff08;大约$70大约$70
https://assetstore.unity.com/packages/tools/utilities/obfuscator-pro-89589
商店链接Obfuscator Free免费版本
https://assetstore.unity.com/packages/tools/utilities/obfuscator-free-89420在github上开源的另外一个混淆工具
https://github.com/DrFlower/Unity-Obfuscator反编译工具
https://github.com/icsharpcode/ILSpy
生成
https://github.com/icsharpcode/ILSpy/releases插件版本v5.3.0警告
如果有代码热更新使用使用混淆的时候请进行详细的测试避免找不到方法名
启用/禁用string类型混淆 启用之后的代码 if (num 666935005){_gameObject base.gameObject.transform.Find(PrivateImplementationDetails{E1D950B9-0A02-402B-8227-E55CD61234BF}.a.h()).gameObject;num -138089121;}禁用之后的代码 if (num -844616100){_gameObject base.gameObject.transform.Find(hello12311).gameObject;num -81965731;}源码 void Start(){GameObject _gameObject gameObject.transform.Find(hello12311).gameObject;Debug.Log(_gameObjectnull);}如果有地方依赖于string类型可以考虑把string类型混淆关掉
json数据读取
序列化为json需要添加[System.Serializable] [DoNotRename] 这两个特性一个是序列化的特性一个是禁止混淆的特性。 向https://jsonplaceholder.typicode.com/todos/1 发送请求会获取到json{ userId: 1, id: 1, title: delectus aut autem, completed: false } 然后继续序列化的时候序列化为 TodoItem 进行字段匹配的时候因为TodoItem 已经被混淆了 json中的字段和TodoItem 中的字段就不匹配了就找不到了就会报错
添加了
没有添加
看起来一样插件会自己添加特性但是插件添加的不能运行运行就崩溃了。 private IEnumerator SendRequest(){UnityWebRequest webre UnityWebRequest.Get(https://jsonplaceholder.typicode.com/todos/1);yield return webre.SendWebRequest();if (webre.result ! UnityWebRequest.Result.Success){Debug.LogError(webre.error);}else{Debug.Log(webre.downloadHandler.text);var tmp_data JsonUtility.FromJsonTodoItem(webre.downloadHandler.text);Debug.Log(tmp_data.id);}}[System.Serializable]
[DoNotRename]
public class TodoItem
{public int userId;public int id;public string title;public bool completed;
}协程方法名混淆
其中IeCreateLanch1 IeCreateLanch3 IeCreateLanch4 不会被混淆方法名 IeCreateLanch2 会被混淆方法名称 void Start(){StartCoroutine(nameof(IeCreateLanch1));StartCoroutine(IeCreateLanch2());StartCoroutine(IeCreateLanch3);StartCoroutine(IeCreateLanch4);}private IEnumerator IeCreateLanch1(){GameObject.CreatePrimitive(PrimitiveType.Cube);Debug.Log( StartCoroutine(nameof(IeCreateLanch1)););yield return null;}private IEnumerator IeCreateLanch2(){GameObject.CreatePrimitive(PrimitiveType.Capsule);Debug.Log( StartCoroutine(IeCreateLanch2()););yield return null;}private IEnumerator IeCreateLanch3(){GameObject.CreatePrimitive(PrimitiveType.Cylinder);Debug.Log( StartCoroutine(\IeCreateLanch3\););yield return null;}[DoNotRename]private IEnumerator IeCreateLanch4(){GameObject.CreatePrimitive(PrimitiveType.Sphere);Debug.Log(StartCoroutine(\IeCreateLanch4\););yield return null;} 在动画组件上使用公开的方法
动画事件在这里被调用的方法建议加上[DoNotRenameAttribute] 放置被混淆
快速上手
启动插件 发布即可 详细教程
混淆器是一种软件工具旨在将游戏、应用程序或程序的源代码转换为人类更难理解的版本同时仍保持其原始功能。它通过将变量、方法和类重命名为无意义或误导性的名称并以掩盖其逻辑和流程的方式更改代码结构来实现这一点。
使用 Obfuscator 的主要目的是保护软件的知识产权。通过使代码更难阅读和分析未经授权的个人对软件进行逆向工程、复制或修改变得更具挑战性。这一额外的安全层有助于防止软件盗版、知识产权盗窃和未经授权的篡改从而保护开发人员的工作和投资。
混淆_Obfuscation代码混淆的常规设置。这包括要对哪些程序集进行模糊处理的规范以及对它们各自的类和成员进行模糊处理的详细说明。 安全性_Security包含高级安全设置如“字符串混淆”、“随机代码生成”等。 兼容性_Compatibility由于 Unity 的独特运行方式某些第三方资源需要特定配置以确保与混淆兼容。 选项_Optional包含可选的集成设置。例如‘Custom Obfuscation Pattern’、‘Logging’、‘Name Mapping’ 等。
省流
下面是https://docs.guardingpearsoftware.com/manual/Obfuscator/Description.html 的电子翻译版本。 如果插件不能正确序列化修改Obfuscation 里的Assembly-Settings 的依赖项。 添加随机代码安全性_Security 下找 Add Random Code - Settings 关闭即可。 不混淆字符串安全性_Security 下找 String - Settings 关闭即可。
混淆_Obfuscation Assembly-Settings
管理需要混淆的程序集
混淆 Assembly-CSharp混淆默认的 Unity 程序集 Assembly-CSharp.dll。该程序集包含未通过 Assembly Definition File 添加到子程序集中的代码。混淆 Assembly-CSharp-firstpass混淆默认的 Unity 插件程序集 Assembly-CSharp-firstpass.dll。该程序集包含未通过 Assembly Definition File 添加到子程序集中的代码并且可以在 Plugins 目录中找到。混淆位于‘Assets’目录中的 Assembly Definition File混淆通过 Assembly Definition File 在 [Root]/Assets 目录及其子目录中定义的子程序集中的代码。混淆位于‘Packages’目录中的 Assembly Definition File混淆通过 Assembly Definition File 在 [Root]/Packages 目录及其子目录中定义的子程序集中的代码。混淆外部程序集如果只想混淆特定程序集或第三方程序集请在此处添加。依赖项如果混淆器无法解析第三方依赖则需在这里添加其完整路径。
NameSpace-Settings
管理命名空间及其类的混淆
混淆命名空间混淆类的命名空间。此选项必须启用才能混淆 MonoBehaviour 类。跳过以下命名空间在此处添加希望忽略混淆的命名空间。这将跳过这些命名空间内所有类及其成员的混淆。输入的命名空间被视为前缀因此输入 GoogleSdk 也会跳过 GoogleSdk.Lib。反转命名空间忽略反转命名空间忽略。启用后只有那些指定命名空间内的类和它们的成员会被混淆。
Class - Settings 管理类的混淆
基于访问级别混淆内部/私有/受保护/公共根据访问级别混淆类名。混淆抽象类混淆抽象类的名字。混淆泛型类混淆泛型类的名字。混淆可序列化类混淆可序列化类的名字及字段。仅建议在数据在运行时序列化并在混淆之后使用时使用。否则序列化类内的名称将不匹配并导致错误。混淆 MonoBehaviour 子类混淆 MonoBehaviour 类的名字。需要混淆命名空间。混淆外部程序集中 MonoBehaviour 子类混淆第三方或预编译程序集中的 MonoBehaviour 类的名字。需要混淆命名空间。混淆 ScriptableObject 子类混淆 ScriptableObject 类的名字及其字段。仅建议不在序列化 ScriptableObject 到 .assets 文件或通过 Unity 检查器赋值的情况下使用。否则保存的已混淆数据名称将不匹配并产生错误。混淆 Playable 子类混淆 Playable 类的名字。
Method - Settings 管理方法的混淆
基于访问级别混淆内部/私有/受保护/公共根据访问级别混淆方法名。
Parameter - Settings 管理参数的混淆
混淆方法参数混淆通用方法参数。普通参数在构建代码中没有“名称”只有 ID所以不需要或不可能混淆。混淆类参数混淆通用类参数。
Field - Settings 管理字段的混淆
基于访问级别混淆内部/私有/受保护/公共根据访问级别混淆字段名。混淆序列化字段混淆 MonoBehaviour/ScriptableObject 类中序列化字段的名称。这些字段带有 SerializeField 属性。仅推荐在数据在运行时序列化并在混淆后使用并且不通过 Unity 检查器分配的情况下使用。否则序列化类中的名称将不匹配并产生错误。混淆 Unity 公开字段混淆 MonoBehaviour/ScriptableObject 类中公开字段的名称。同样仅推荐在数据在运行时序列化并在混淆后使用并且不通过 Unity 检查器分配的情况下使用。混淆枚举值混淆枚举中的字段名称。
Property - Settings
管理属性的混淆
基于访问级别混淆内部/私有/受保护/公共根据访问级别混淆属性名。
Event - Settings Event - Settings
管理事件的混淆
基于访问级别混淆内部/私有/受保护/公共根据访问级别混淆事件名。
安全性_Security Add Random Code - Settings 随机代码 - 设置
添加随机代码: 激活 以根据现有和新生成的方法注入随机代码。
Method Control Flow - Settings 方法控制流程 - 设置
方法中的控制流是指执行单个语句、指令或函数调用的顺序。控制流的混淆会导致分布式顺序而不是默认的自上而下的顺序因此很难理解该方法的实际作用。
String - Settings 字符串 - 设置
Supress ILDasm - Settings Supress ILDasm - 设置
将 SuppressILDasmAttribute 添加到程序集中。阻止 Visual Studio 等 IDE 调试代码。
Anti Tampering - Settings 防篡改 - 设置
在运行时执行微检查以防止程序集操作。一旦检测到篡改应用程序将中止并出现 BadImageFormatException。
兼容性_Compatibility 建议自己看看一般不需要处理如果插件不能正常工作则在Addressable 添加插件的地址unity插件的地址
https://docs.guardingpearsoftware.com/manual/Obfuscator/Settings/Compatibility.html#common---settings选项_Optional 日志记录 (Logging)
Obfuscator 包含一个内部的日志系统来记录其所有操作。默认情况下日志将存储在 Assets/OPS/Obfuscator/Log/{BuildTarget}.txt 路径下。如果遇到任何问题请将日志文件连同问题描述一起发送给Obfuscator团队以帮助诊断和解决问题。
设置选项
使用自定义日志文件 (Use a custom log file): 激活此设置以定义自定义日志文件位置。自定义日志文件路径 (Custom log file path): 自定义日志文件的路径。
属性管理 (Attributes)
Obfuscator 提供了一系列属性来微调源代码级别的混淆过程。在此部分可以管理和自定义这些附加属性。
设置选项
自定义 ‘DoNotRename’ 属性 (Custom ‘DoNotRename’ Attributes): DoNotRename 属性可以跳过类或成员的混淆。有时使用具有相同行为的自定义属性会更方便。在此处添加名称。
名称重命名 (Renaming)
您可以在此处自定义Obfuscator用于混淆源代码的字符集。还可以启用混淆映射文件的保存和加载功能。该文件记录了类、方法、字段等的原始名称及其对应的混淆名称。
设置选项
活动重命名模式 (Active renaming pattern): 使用预定义的字符集进行混淆或定义自己的字符集。根据构建目标并非所有字符都受支持但默认模式始终适用。自定义重命名模式 (Custom renaming pattern): 如果选择使用自定义字符集则在这里添加您想要使用的字符无需任何分隔符。加载混淆映射文件 (Load an obfuscation mapping file): 激活此设置以加载混淆映射文件。加载映射文件路径 (Load mapping file path): 输入加载混淆映射文件的路径。保存混淆映射文件 (Save an obfuscation mapping file): 激活此设置以保存混淆映射文件。保存映射文件路径 (Save mapping file path): 输入保存混淆映射文件的路径。
映射文件的好处
一致的混淆: 确保相同的元素总是用相同的名称混淆保持不同构建之间的一致性。错误调试: 通过提供混淆元素的原始名称来帮助解析错误堆栈跟踪使识别和解决问题更加容易。
特性
特性文档
https://docs.guardingpearsoftware.com/manual/Obfuscator/Attributes.htmlDoNotRenameAttribute 作用于类、字段、方法或其他成员防止它们的名字被重命名即不混淆名字。示例代码[DoNotRenameAttribute]
public class MyClass
{[DoNotRenameAttribute]public void MyMethod();
}DoNotObfuscateClassAttribute 应用于类上防止整个类及其中的所有成员被混淆除了方法体。示例代码[DoNotObfuscateClassAttribute]
public class MyClass
{public void MyMethod();
}DoNotObfuscateMethodBodyAttribute 应用于类或具体的方法上防止方法体内的内容被混淆。示例代码[DoNotObfuscateMethodBodyAttribute]
public class MyClass
{[DoNotObfuscateMethodBodyAttribute]public void MyMethod(){var someString This string will not be obfuscated;}
}DoNotUseClassForFakeCodeAttribute 防止在类中添加假代码或随机代码也禁止基于此类生成新的假类。示例代码[DoNotUseClassForFakeCodeAttribute]
public class MyClass
{public void MyMethod();
}ObfuscateAnywayAttribute 强制混淆指定的类成员即使其他设置阻止混淆。示例代码[ObfuscateAnywayAttribute(CustomClassName)]
public class MyClass
{[ObfuscateAnywayAttribute(CustomMethodName)]public void MyMethod();
}ObfuscationAttribute 支持.NET框架内置的System.Diagnostics.ObfuscationAttribute用于指定是否应将程序集、类型或成员排除在混淆之外。示例代码[ObfuscationAttribute(Exclude true, ApplyToMembers false)]
public class MyClass
{[ObfuscationAttribute(Exclude true, ApplyToMembers false)]public void MyMethod();
}通过这些属性开发者可以根据需要选择性地保护代码的部分不受混淆影响或者强制某些部分必须混淆。这样既能保证代码的安全性也能保持必要的可读性和功能性。
错误堆栈查找
我试了几下没有找到办法让显示混淆后的代码的错误堆栈
https://docs.guardingpearsoftware.com/manual/Obfuscator/Faq.html恢复设置没有找到
是的要么是没有要么是没有找到。