Unity3D代码混淆方案详解-程序员宅基地

技术标签: ios  

背景

Unity引擎使用Mono运行时,而C#语言易受反编译影响,存在代码泄露风险。本文通过《QQ乐团》项目实践,提出一种适用于Unity引擎的代码混淆方案,以保护代码逻辑。
在这里插入图片描述

引言

在Unity引擎下,为了防止代码被轻易反编译,需要采取相应的保护措施。本文将分享一种基于实践经验的可行方案,希望能对关注Unity引擎的开发者提供一些参考价值。

正文

Unity引擎下代码混淆的特殊性

  • 代码被资源引用:Unity中资源的可视化编辑特性导致代码以组件形式附加到资源实例上,需要注意不破坏资源与代码的对应关系。
  • 发布到Web的项目:Unity项目的编译和打包过程捆绑在一起,无法像普通.NET程序那样对编译出的程序集进行混淆后再打包。
  • UnityEngine按函数名进行调用:MonoBehaviour上的方法如Awake、Start等通过方法名称访问,重命名会导致调用失败。

思路

由于官方未提供独立的接口进行混淆,作者尝试将代码编译成DLL,混淆后再添加到Unity项目中。然而,遇到了Unity引擎处理DLL中模版类型的缺陷,使得之前的尝试受挫。

实际混淆步骤

最终,作者将项目进行分层,独立出敏感的“逻辑层”并编译成DLL进行混淆,加上利用ipaguard加固混淆方案将程序加密处理。
Ipa Guard是一款功能强大的ipa混淆工具,不需要ios app源码,直接对ipa文件进行混淆加密。可对IOS ipa 文件的代码,代码库,资源文件等进行混淆保护。 可以根据设置对函数名、变量名、类名等关键代码进行重命名和混淆处理,降低代码的可读性,增加ipa破解反编译难度。可以对图片,资源,配置等进行修改名称,修改md5。只要是ipa都可以,不限制OC,Swift,Flutter,React Native,H5类app。
代码混淆步骤

  1. 选择要混淆保护的ipa文件

在这里插入图片描述

  1. 选择要混淆的类名称
    选择左侧的代码模块中的OC类名称或者Swift类名称,选择IPA种要混淆的二进制文件,然后勾选可执行文件代码里面的类名称。如果类太多可以使用搜索查看功能,ipaguard提供了级别选择,名称搜索,已选未选过滤来帮助配置混淆对象。
    在这里插入图片描述

  2. 选择要混淆保护的函数,方法
    选择左侧代码模块下的oc方法或者swift方法,点击右侧的选择文件选取一个可执行二进制文件,勾选需要混淆保护的方法和函数。ipaguard提供了风险等级过滤,名称搜索过滤,根据类名称过滤条件来辅助配置混淆目标

在这里插入图片描述

  1. 配置签名证书
    点击左侧的签名配置,设置ios签名证书,描述文件等信息。测试阶段用开发证书,这样可以方便安装到测试机子上检验是否测试后的app运行正常;最终配置测试ok,发布的时候再改成发布证书,混淆配置完后可以提交上架。

在这里插入图片描述

  1. 混淆和测试运行
    点击开始处理按钮,ipaguard将对ipa中选中的内容进行混淆保护,并安装混淆好的ipa到手机上,运行如果ok,点击保存配置,下次直接加载配置即可,无需每次配置要混淆的内容。

ipaguard在做混淆这块还是做的很人性化的,混淆目标可控,强度可控,极大地简化了配置混淆内容的过程,可视化的操作也非常的方便。
在这里插入图片描述

总结

  • Unity项目的代码反编译较为容易,需要重视代码混淆工作。
  • 代码混淆方案实施限制较多,对项目的架构分层有强制性要求。

参考资料

以上是根据提供的资料,对英文技术博客进行了改写,添加了更加丰富的内容,并结合MD语法进行了排版。希望对您有所帮助。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kyfujghjnghj/article/details/137595458

智能推荐

Linux查看服务器硬件网卡cpu型号内存BIOS、主板型号信息_linux查看主板型号-程序员宅基地

文章浏览阅读1.4w次,点赞6次,收藏43次。Linux查看服务器硬件网卡cpu型号内存BIOS、主板型号信息,查看服务器硬件信息CPU,内存等_linux查看主板型号

easyUI的datebox赋值以及取值,赋值不生效问题_easyui datebox取值-程序员宅基地

文章浏览阅读2.7k次。easyUI的datebox设定值以及取值1、时间戳格式化2、把格式化后的时间放入datebox中1、时间戳格式化时间格式处理按照下面时间框图片中显示的格式进行处理function parsedate(value) { var date = new Date(value).format("yyyy-MM-dd"); return date;..._easyui datebox取值

集成学习总结(二)_论文复现temporal attention-gated model for robust sequ-程序员宅基地

文章浏览阅读218次。1:Baggig方法:思想:给定一个大小为n的训练集 D,Bagging算法从中均匀、有放回地选出 m个大小为 n' 的子集Di,作为新的训练集。在这 m个训练集上使用分类、回归等算法,则可得到 m个模型,再通过取平均值、取多数票等方法综合产生预测结果,即可得到Bagging的结果。2:Stacking方法:思想:将训练好的所有基模型对整个训练集进行预测,第j个基模型对第i个训练样本的预测值将作为..._论文复现temporal attention-gated model for robust sequence classification

MAC下SSL通讯问题、解决办法_mac:60ee5cf723b4-程序员宅基地

文章浏览阅读2.5k次。问题:请求https出现ssl通讯错误解决方法:1、创建cacert.pem文件,可直接拷贝以下代码段内容到cacert.pem中2、将文件放入指定文件夹中(文件夹可自定义,小编的默认目录为:/usr/local/etc/)3、修改php.ini文件,curl.cainfo = "/usr/local/etc/cacert.pem"4、重启PHP即可#### Bundle of CA Root Certificates#### Certificate data from Mo_mac:60ee5cf723b4

[BUUCTF]PWN——wustctf2020_getshell1/2_ctf 有system无bin/sh-程序员宅基地

文章浏览阅读1k次,点赞2次,收藏3次。wustctf2020_getshell附件步骤:例行检查,32位程序,开启了NX保护本地试运行一下程序,看看大概的情况32位ida载入,习惯性的检索程序里的字符串,发现了后门函数shell_addr=0x804851Bmain函数开始看程序vulnerable函数buf参数存在溢出漏洞,正好溢出8位,让我们覆盖到retexp:from pwn import*r=remote('node3.buuoj.cn',29690)shell_addr=0x804851B_ctf 有system无bin/sh

PHP7安装pdo_mysql扩展-程序员宅基地

文章浏览阅读2.9k次。因为自己在编译安装php7.2.7的时候,没有留意pdo_mysql失败。但是重新编译安装php7.2.7需要和长时间。百度了下,linux 有个 autoconfyum install autoconf -y 打开php安装包路径找到pdo_mysql进入文件夹检查扩展包是否问题/datas/soft/php72/bin/phpize设置..._php7 安装 pdo_mysql error: unknown type name ‘my_bool’ my_bool *in_null;

随便推点

java中getinputstream_Java Connection.getInputStream方法代码示例-程序员宅基地

文章浏览阅读1.1k次。import sun.rmi.transport.Connection; //导入方法依赖的package包/类/*** handleMessages decodes transport operations and handles messages* appropriately. If an exception occurs during message handling,* the sock..._conn.getinputstream()

深入理解Android中的Drawable类_自定义的png图片为什么要放到drawable中android-程序员宅基地

文章浏览阅读1.5k次。Drawable对于Android开发工程师来说非常熟悉,最常用的用法是在drawable目录里放入png或其他格式的图片,然后在代码里就可以用resources访问到如:// 访问test图片资源getResources().getDrawable(R.drwable.test);这里不是要讲Drawable资源怎么使用,而是来看一下这个类实现的一些原理以及它相关的一些子类的实现原理。..._自定义的png图片为什么要放到drawable中android

【网格生成】Gmsh快速入门教程 --3.Gmsh API_gmsh的api配置-程序员宅基地

文章浏览阅读4.4k次。在前面两篇文章1、2中我们分别介绍了图形化界面和内置解析器geo脚本的使用方式。今天来介绍下Gmsh的第三种使用方式:使用Gmsh API将其集成到其他软件中。意义将网格生成器与求解器等软件对接形成整体框架。获取Gmsh API几种方式通过官网下载SDK http://www.gmsh.info/bin/Windows/gmsh-git-Windows64-sdk.zippip install --upgrade gmsh (Python)在编译时加上 cmake -DENABLE_BUILD_gmsh的api配置

Ubuntu的复制粘贴操作及常用快捷键_ubuntu copy kuai jie jian-程序员宅基地

文章浏览阅读9w次,点赞22次,收藏107次。Ubuntu的复制粘贴操作 1.最为简单,最为常用的应该是鼠标右键操作了,可以选中文件,字符等,右键鼠标,复制,到目的地右键鼠标,粘贴就结束了。2.快捷键。一般通用的是Ctrl+C与Ctrl+V。不过通用也是有限制的,一般的程序下是没有问题,遇到终端就不行了。其实终端下默认的是 Ctrl+Shift+C,Ctrl+Shift+V,可以自己在编辑项下面自己设置为常用的。3.文件_ubuntu copy kuai jie jian

基于Springboot的宠物医院管理系统-JAVA【毕业设计、论文、源码、开题报告】_基于springboot的宠物医院管理系统国内外研究现状-程序员宅基地

文章浏览阅读5.8k次,点赞8次,收藏92次。1 绪论1.1 课题背景在信息技术高速发展的今天,新知识、新技术层出不穷,计算机技术早已广泛的应用于各行各业之中,利用计算机的强大数据处理能力和辅助决策能力叫,实现行业管理的规范化、标准化、效率化。管理信息系统(Management Information System,简称MIS〉是一个以人为主导,利用计算机软硬件技术以及网络通信技术,实现对信息的收集、传输、储存、更新。目前,管理信息系统广泛采用WEB技术作为开发的主要技术。在经过多年的技术积累与更新,WEB技术已经从一种简单的信息浏览和信息交互平台发展_基于springboot的宠物医院管理系统国内外研究现状

C++多线程:condition_variable_c++ condition_variable-程序员宅基地

文章浏览阅读2.6k次,点赞5次,收藏26次。官方定义在多线程编程中,有一种十分常见的行为:线程同步。线程同步是指线程间需要按照预定的先后次序顺序进行的行为。C++11对这种行为也提供了有力的支持,这就是条件变量(condition_variable和condition_variable_any)。条件变量位于头文件condition_variable下。condition_variable/condition_variable_any类是一个synchronization primitive,可用于阻止一个线程或同时阻止多个线程,直到另一个线程修改共_c++ condition_variable

推荐文章

热门文章

相关标签