写点什么

Unity3D 代码混淆方案详解

作者:雪奈椰子
  • 2024-01-18
    广东
  • 本文字数:1281 字

    阅读完需:约 4 分钟

背景

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 提供了级别选择,名称搜索,已选未选过滤来帮助配置混淆对象。


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



  1. 配置签名证书


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



  1. 混淆和测试运行


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

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


总结

  • Unity 项目的代码反编译较为容易,需要重视代码混淆工作。

  • 代码混淆方案实施限制较多,对项目的架构分层有强制性要求。

参考资料

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

用户头像

雪奈椰子

关注

还未添加个人签名 2022-07-22 加入

还未添加个人简介

评论

发布
暂无评论
Unity3D代码混淆方案详解_雪奈椰子_InfoQ写作社区