当前位置: 首页 > news >正文

【Unity3D】Unity混淆工具Obfuscator使用

目录

一、导入工具

二、各种混淆形式介绍

2.1 程序集混淆

2.2 命名空间混淆

2.3 类混淆

2.4 函数混淆

2.5 参数混淆

2.6 字段混淆

2.7 属性混淆

2.8 事件混淆

三、安全混淆

四、兼容性处理

4.1 动画方法兼容

4.2 GUI方法兼容

4.3 协程方法兼容

五、选项

5.1 调试日志输出目录定义

5.2 标签属性设置

5.3 混淆映射文件


一、导入工具

收费版:Obfuscator Pro | Utilities Tools | Unity Asset Store 

免费版:Obfuscator Free | Utilities Tools | Unity Asset Store 

Unity 2019.4.0f1 使用免费版

注意AssetStore点击添加到的是5.0版本,实际可能会不兼容你所在的Unity版本,故需要重启Unity,再次打开My Assets找到Obfuscator Free再Import,若网络不正常请检查是否开启了代理,需关闭代理。

导入成功后会看到如下内容 

 

再导入一个NewtonsoftJson插件:com.unity.nuget.newtonsoft-json

准备一个查看dll的工具 ILSky(本次测试只看Window平台打包后的混淆代码)

https://sourceforge.net/projects/ilspy.mirror/files/v9.0/ILSpy_Installer_9.0.0.7889-x64.msi/download

注意这个ILSky也有版本区分,上面是是给window系统用的,其他系统对应找对应的版本下载。

创建Test.cs脚本添加如下常用代码,TestA是一个程序集文件

using Newtonsoft.Json;
using UnityEngine;
namespace TestA
{public class Space{public int width;public int height;public int depth;}public class Test : MonoBehaviour{string json = "{\"width\":666,\"height\":777,\"depth\":1000}";void Start(){Space space = JsonConvert.DeserializeObject<Space>(json);PrintSpace(space);}void PrintSpace(Space space){Debug.Log(space.width);Debug.Log(space.height);Debug.Log(space.depth);}}
}

二、各种混淆形式介绍

2.1 程序集混淆

 混淆后

屏蔽TestA.dll混淆

2.2 命名空间混淆

将Test.cs脚本的命名空间从Test改为TestA_NameSpace(方便观察区分)混淆后

 屏蔽TestA_NameSpace混淆

 尚不清楚有何作用的选项,不需要开启这个。

2.3 类混淆

可能由于是免费版,故有这种黄底颜色的混淆无法使用。

 屏蔽混淆泛型类,例如上面的Space_Generic<T>泛型类,其他类会正常混淆。

2.4 函数混淆

 屏蔽Public类型函数

2.5 参数混淆

正常混淆

屏蔽混淆函数参数后会如下

2.6 字段混淆

 

2.7 属性混淆

 屏蔽公共属性混淆

2.8 事件混淆

 屏蔽公共事件混淆

 

三、安全混淆

四、兼容性处理

4.1 动画方法兼容

动画帧调用的脚本方法不会被混淆

 

测试取消这个兼容,也一样会忽略混淆。

4.2 GUI方法兼容

4.3 协程方法兼容

关闭兼容后

其中CoroutineFunc2和CoroutineFunc3会找不到报错,所以需要开启兼容,即不会对协程方法进行混淆处理。

即使添加传参,也是没有对参数进行混淆的,不过有些局部参数名有混淆。

因此如果想对协程方法进行混淆,要保证全部调用协程方法的形式是

 StartCoroutine(CoroutineFunc1());

并关闭兼容协程方法处理

五、选项

5.1 调试日志输出目录定义

默认日志文件

5.2 标签属性设置

参考:Attributes | GuardingPearSoftware documentation

原有[DoNotRename]标签忽略混淆名称,现在可以自定义标签属性如下:name参数是非必要的

作为一个忽略混淆名称使用,例如忽略混淆这个方法名。

5.3 混淆映射文件

如上图我启动了映射文件,并设置了一个文本文件路径作为保存的文件路径,内容是保存各种映射关系。

测试映射文件作用,可以将错误日志反混淆显示;

案例:故意搞一个错误的代码,如下:

使用Log Viewer调试插件看打包后报错日志

Log Viewer | Integration | Unity Asset Store

导入后需要创建调试器物体在场景上

打包查看

打包运行 查看报错日志,发现是混淆名称

开启混淆映射文件

测试发现依旧没有变化,即并没有改动实际运行时的日志输出,只能通过这个工具查看反混淆后的日志

通过ILSpy查看ErrorStackEditor内容,可以通过如下方法动态执行上面这个过程来加速我们的反混淆日志文件速度。

public string Deobfuscate(string obfuscatorText)
{//OPS.Obfuscator.Editor.dll是ErrorStackWindow所在的程序集文件Assembly assembly1 = Assembly.LoadFile("Assets/OPS/Obfuscator/Editor/Plugins/OPS.Obfuscator.Editor.dll");Type type = assembly1.GetType("OPS.Obfuscator.Editor.Gui.ErrorStackWindow");var instance = EditorWindow.GetWindow(type);//1、填写 File Path 字符串对象,如果想了解可以打开ILSky查看 可能不同版本的混淆情况不同//1.1 从程序集找到232类型(相当于Text组件)Type type232 = assembly1.GetType("232");//1.2 找到232类型的1550属性(相当于Text.text属性)var property232_1550 = type232.GetProperty("1550", BindingFlags.Instance | BindingFlags.Public);//1.3 获取ErrorStackWindow类的名为1382的私有字段(相当于Text组件字段)var field1382Info = type.GetField("1382", BindingFlags.Instance | BindingFlags.NonPublic);//1.4 获取instance实例的1382字段(相当于获取ErrorStackWindow对象里的名为1382字段,它是一个Text组件对象)var v1382 = field1382Info.GetValue(instance);//1.5 将映射文件路径填充到v1382.text字段,v1382是一个Text对象property232_1550.SetValue(v1382, @"E:\UnityProject\UnityHunXiaoObfuscatorProDemo\Assets\Scripts\TestA\ObMapFile.json");//2 填写输入文本(混淆内容文本)//2.1 获取程序集的221类型(相当于Area组件)Type type221 = assembly1.GetType("221");//2.2 获取221类型的1550属性(相当于Area.text属性)var property221_1550 = type221.GetProperty("1550", BindingFlags.Instance | BindingFlags.Public);//2.3 获取ErrorStackWindow类的名为1383的私有字段(相当于Area组件类型名为1383的字段)var field1383Info = type.GetField("1383", BindingFlags.Instance | BindingFlags.NonPublic);//2.4 获取instance实例的1383字段var v1383 = field1383Info.GetValue(instance);//2.5 将混淆内容文本填充到v1383.text字段,v1383是一个Area对象property221_1550.SetValue(v1383, obfuscatorText);//3 执行ErrorStackWindow的662方法,会将ObMapFile.json文件反序列化 准备解析混淆内容文件var method662 = type.GetMethod("662", BindingFlags.Instance | BindingFlags.NonPublic);method662.Invoke(instance, null);//4 执行ErrorStackWindow的667方法,会将混淆内容文本解析完成输出到1384(Area组件)var method667 = type.GetMethod("667", BindingFlags.Instance | BindingFlags.NonPublic);method667.Invoke(instance, null);//5 将Area组件的文本获取并返回//获取1384(Area组件)的1550字段内容(Area.text) var field1384Info = type.GetField("1384", BindingFlags.Instance | BindingFlags.NonPublic);var v1384 = field1384Info.GetValue(instance);return (string)property221_1550.GetValue(v1384);
}

 使用方法:

Debug.LogError(Deobfuscate(@"NullReferenceException: Object reference not set to an instance of an object
at TestA_NameSpace.Test.cl (TestA_NameSpace.h`1[a] a) [0x00003] in <7a98e657ea8f45a0ac3ccc399b375f23>:0 
at TestA_NameSpace.Test.Start () [0x00026] in <7a98e657ea8f45a0ac3ccc399b375f23>:0 "));

若无法正常使用,说明你的Obfuscator Free版本和我不一样,它的混淆情况也不一样。

相关文章:

【Unity3D】Unity混淆工具Obfuscator使用

目录 一、导入工具 二、各种混淆形式介绍 2.1 程序集混淆 2.2 命名空间混淆 2.3 类混淆 2.4 函数混淆 2.5 参数混淆 2.6 字段混淆 2.7 属性混淆 2.8 事件混淆 三、安全混淆 四、兼容性处理 4.1 动画方法兼容 4.2 GUI方法兼容 4.3 协程方法兼容 五、选项 5.1 调…...

C语言语法基础学习—动态分配空间(new和malloc的用法及区别)

前言 在 C 语言中&#xff0c;动态内存分配主要是通过 malloc() 和 free() 函数来完成的。而在 C 中是使用new和delete关键字&#xff0c;来动态分配内存。 虽然 C 语言没有 new&#xff0c;但 malloc() 和 new 在内存分配上的作用是相似的。下面我们详细解释 malloc() 和 ne…...

QT:控件属性及常用控件(3)-----输入类控件(正则表达式)

输入类控件既可以进行显示&#xff0c;也能让用户输入一些内容&#xff01; 文章目录 1.Line Edit1.1 用户输入个人信息1.2 基于正则表达式的文本限制1.3 验证两次输入的密码是否一致1.4 让输入的密码可以被查看 2.Text Edit2.1 输入和显示同步2.1 其他信号出发情况 3.ComboBox…...

Hive SQL 执行计划解析

Hive SQL 执行计划解析 一、 explain用法 1. SQL 查询 EXPLAIN SELECT SUM(view_dsp) AS view_sum FROM ads.table_a WHERE p_day 2025-01-06;2. 执行计划 STAGE DEPENDENCIES:Stage-1 is a root stageStage-0 depends on stages: Stage-1STAGE PLANS:Stage: Stage-1Map …...

热更新杂乱记

热更新主要有一个文件的MD5值的比对过程&#xff0c;期间遇到2个问题&#xff0c;解决起来花费了一点时间 1. png 和 plist 生成zip的时候再生成MD5值会发生变动。 这个问题解决起来有2种方案&#xff1a; &#xff08;1&#xff09;.第一个方案是将 png和plist的文件时间改…...

博客搭建 — GitHub Pages 部署

关于 GitHub Pages GitHub Pages 是一项静态站点托管服务&#xff0c;它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件&#xff0c;通过构建过程运行文件&#xff0c;然后发布网站。 本文最终效果是搭建出一个域名为 https://<user>.github.io 的网站 创建…...

翻译:How do I reset my FPGA?

文章目录 背景翻译&#xff1a;How do I reset my FPGA?1、Understanding the flip-flop reset behavior2、Reset methodology3、Use appropriate resets to maximize utilization4、Many options5、About the author 背景 在写博客《复位信号的同步与释放&#xff08;同步复…...

Linux 进程环境变量:深入理解与实践指南

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; &#x1f6a9;用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 在 Linux 系统里…...

Linux探秘坊-------5.git

1.git介绍 1.版本控制器 为了能够更⽅便我们管理这些不同版本的⽂件&#xff0c;便有了版本控制器。所谓的版本控制器&#xff0c;就是能让你了解到⼀个⽂件的历史&#xff0c;以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统&am…...

Linux中的几个基本指令(二)

文章目录 1、cp指令例一&#xff1a;例二&#xff1a;例三&#xff1a;例四&#xff1a;例五&#xff1a; 2、mv 指令例一&#xff1a;例二&#xff1a; 3、cat指令例一&#xff1a; 4、tac指令5、which指令6、date指令时间戳&#xff1a;7、zip指令 今天我们继续学习Linux下的…...

Java入门笔记(1)

引言 在计算机编程的广袤宇宙中&#xff0c;Java无疑是一颗格外耀眼的恒星。那么&#xff0c;Java究竟是什么呢&#xff1f; Java是美国Sun公司&#xff08;Stanford University Network&#xff09;在1995年推出的一门计算机高级编程语言。曾经辉煌的Sun公司在2009年被Oracle&…...

设计模式的艺术-开闭原则

原则使用频率图&#xff08;仅供参考&#xff09; 1.如何理解开闭原则 简单来说&#xff0c;开闭原则指的是 “对扩展开放&#xff0c;对修改关闭”。 当软件系统需要增加新的功能时&#xff0c;应该通过扩展现有代码的方式来实现&#xff0c;而不是去修改已有的代码。 例如我…...

【C语言系列】深入理解指针(3)

深入理解指针&#xff08;3&#xff09; 一、字符指针变量二、数组指针变量2.1数组指针变量是什么&#xff1f;2.2数组指针变量怎么初始化&#xff1f; 三、二维数组传参的本质四、函数指针变量4.1函数指针变量的创建4.2函数指针变量的使用4.3两段有趣的代码4.4 typedef关键字 …...

three.js+WebGL踩坑经验合集:写在前面的话

笔者从2023年初开始参与一个基于three.js引擎的web项目的开发工作。本打算2024年春节就把期间踩过的坑写到博客上分享给大家&#xff0c;然而哪怕本专栏的各种构思和内容已经在笔者的脑海里翻滚了一年&#xff0c;得了严重拖延症患者的我还是一直拖到了现在&#xff0c;实在惭愧…...

利用Linux的工作队列(Workqueue)实现中断下半部的处理

本文代码在哪个基础上修改而成&#xff1f; 本文是在博文 https://blog.csdn.net/wenhao_ir/article/details/145228617 的代码基础上修改而成。 关于工作队列(Workqueue)的概念 工作队列(Workqueue)可以用于实现Linux的中断下半部的&#xff0c;之前在博文 https://blog.cs…...

LabVIEW处理复杂系统和数据处理

LabVIEW 是一个图形化编程平台&#xff0c;广泛应用于自动化控制、数据采集、信号处理、仪器控制等复杂系统的开发。它的图形化界面使得开发人员能够直观地设计系统和算法&#xff0c;尤其适合处理需要实时数据分析、高精度控制和复杂硬件集成的应用场景。LabVIEW 提供丰富的库…...

spring-springboot -springcloud

目录 spring: 动态代理: spring的生命周期(bean的生命周期): SpringMvc的生命周期: SpringBoot: 自动装配: 自动装配流程: Spring中常用的注解&#xff1a; Spring Boot中常用的注解&#xff1a; SpringCloud: 1. 注册中心: 2. gateway(网关): 3. Ribbon(负载均…...

DRG/DIP 2.0时代下基于PostgreSQL的成本管理实践与探索(下)

五、数据处理与 ETL 流程编程实现 5.1 数据抽取与转换(ETL) 在 DRG/DIP 2.0 时代的医院成本管理中,数据抽取与转换(ETL)是将医院各个业务系统中的原始数据转化为可供成本管理分析使用的关键环节。这一过程涉及从医院 HIS 系统中抽取患者诊疗数据,并对其进行格式转换、字…...

打造本地音乐库

文章目录 存储介质硬盘&#xff08;NAS&#xff09;媒体播放器&#xff08;可视MP3、MP4&#xff09;实体介质&#xff08;CD光盘、黑胶片&#xff09;注意事项为什么不使用在线音乐&#xff08;App&#xff09;和网盘打造一套HiFi系统的成本非常高 获取音乐正版音乐途径免费音…...

【2024 - 年终总结】叶子增长,期待花开

写在前面&#xff1a;本博客仅作记录学习之用&#xff0c;部分图片来自网络&#xff0c;如需引用请注明出处&#xff0c;同时如有侵犯您的权益&#xff0c;请联系删除&#xff01; 文章目录 前言论博客创作保持2024的记录清单博客科研开源工作生活 总结与展望互动致谢参考 前言…...

Win10家庭版别再卡了!保姆级教程:手动修复gpedit.msc路径,彻底关闭Antimalware Service

Win10家庭版性能优化实战&#xff1a;精准修复组策略路径与系统服务调优每次游戏激战正酣时突然卡顿&#xff0c;或是视频渲染到关键时刻系统响应迟缓&#xff0c;很多Win10家庭版用户都遭遇过这类困扰。任务管理器里那个名为"Antimalware Service Executable"的进程…...

软阴影:那个让虚拟世界“温柔起来“的光影小秘密

一、从一只小猫的影子说起 前几天我在朋友家做客&#xff0c;他家养了一只胖乎乎的橘猫&#xff0c;正趴在阳台的窗边晒太阳。我无意间瞥了一眼那只猫脚边的影子&#xff0c;突然被一个细节震撼了—— 那只猫的影子——并不是一片均匀的黑。 仔细看——猫肚子紧贴地板的地方——…...

雪球网md5__1038参数逆向解析与Node.js复现

1. 这不是“破解”&#xff0c;而是对前端加密逻辑的常规逆向还原你打开雪球网任意一只股票详情页&#xff0c;F12 打开开发者工具&#xff0c;切到 Network 面板&#xff0c;刷新页面——很快就能在 XHR 请求里捕获到类似这样的接口&#xff1a;https://xueqiu.com/stock/cube…...

告别浪费!SolidWorks企业级共享方案,实现降本增效全攻略

还在为 SolidWorks 高昂的硬件投入和混乱的图纸管理头疼&#xff1f;告别“一人一机”的浪费模式&#xff0c;企业级共享方案才是降本增效的正解。这套攻略基于“1 台高性能服务器 云飞云共享云桌面”架构&#xff0c;帮你把硬件成本砍掉 60%&#xff0c;把软件利用率翻倍。一…...

在线文档协作工具选型必看:14款产品对比(2026版)

一、在线文档协作工具的概念解析及其核心功能 在线文档协作工具是基于云端的文档创建、编辑、共享与协同沟通平台&#xff0c;核心目标是让团队在同一份资料上“实时共同工作”&#xff0c;减少反复传文件、版本混乱与沟通成本。 企业常见的核心能力包括&#xff1a; 多人实…...

Windows开机自动全屏打开指定网页?一个快捷方式参数就搞定(Chrome/Edge/Firefox教程)

Windows开机自动全屏展示网页的终极方案每次开机都要手动打开浏览器、输入网址、切换全屏模式&#xff1f;这种重复操作不仅浪费时间&#xff0c;还容易在重要演示时手忙脚乱。想象一下&#xff1a;电脑启动后自动全屏显示你的仪表盘、会议日程或是监控大屏&#xff0c;整个过程…...

统信UOS浏览器书签同步难题?一招搞定所有新用户默认书签配置

统信UOS浏览器书签批量配置&#xff1a;系统管理员的高效部署指南在企业或教育机构的IT运维工作中&#xff0c;统信UOS作为国产操作系统的代表&#xff0c;其浏览器书签的统一管理常常成为系统管理员面临的挑战。想象一下&#xff0c;每当有新员工入职或学生入学&#xff0c;都…...

PrivacyGuard实战:基于实证差分隐私的机器学习模型隐私审计框架

1. 项目概述与核心价值在过去的几年里&#xff0c;我亲眼见证了机器学习模型从实验室走向银行、医疗、社交网络等各个敏感领域的全过程。模型性能的每一次飞跃都令人兴奋&#xff0c;但随之而来的隐私泄露事件也一次次为我们敲响警钟。一个在医疗数据上训练出的诊断模型&#x…...

构建智能音乐档案:SoundCloud Downloader 的技术架构与实现哲学

构建智能音乐档案&#xff1a;SoundCloud Downloader 的技术架构与实现哲学 【免费下载链接】scdl Soundcloud Music Downloader 项目地址: https://gitcode.com/gh_mirrors/sc/scdl 在流媒体音乐主导的时代&#xff0c;音乐爱好者面临着一种矛盾&#xff1a;我们享受着…...

WMPFDebugger与微信开发者工具对比:哪个更适合你的调试需求?

WMPFDebugger与微信开发者工具对比&#xff1a;哪个更适合你的调试需求&#xff1f; 【免费下载链接】WMPFDebugger Yet another WeChat miniapp debugger on Windows 项目地址: https://gitcode.com/gh_mirrors/wm/WMPFDebugger 在Windows平台的微信小程序开发中&#…...