Unity马甲包过审方案

最近公司让负责项目IOS方面的功能,从零开始折腾了几个月,终于把IOS包推上架了五六个,第一个包上架还算简单,最麻烦的是后续的马甲包如何成功上架,这里记录下马甲包的过审方案

C#混淆方案

命名混淆

重命名命名空间、类名、函数名

实现方式

导入Unity插件Obfuscator,即可在出包时自动混淆相关名称

注意点

  • 为保证lua正常运行,不能直接混淆所有C#代码

    由于lua代码中直接通过字符串查找C#类名、函数名,所以混淆时需要注意lua中用到的相关名称不允许混淆,或者lua定义一个管理类,管理混淆名称与真实类名函数名的映射,最简单的方式是将Obfuscator设置为命名空间、公开类名函数名、xlua生成的warp文件均不混淆,配置如图:


添加垃圾代码

添加无用处的C#类及函数,让C#检查主体变大,在C#代码越少的项目中收益越大

实现方式

自写工具批量生成C#代码

注意点

  • 名称需要是具体含义的单词

资源混淆方案

更换游戏资源

替换游戏相关素材,提高人工过审环节通过概率,后期可通过热更恢复成线上资源

实现方式

美术制作新的游戏素材,工程内替换后出新的资源文件

注意点

  • 登录页、选角页、加载页、游戏新手期,均需换新

资源压缩包方式

减少工程资源数量,降低机审抽样检查概率

实现方式

游戏启动执行解压逻辑,XCode工程只放置压缩包文件

注意点

  • 初次安装包需要解压,但不影响强更逻辑
  • 有概率抽查解压后的文件,尽量对压缩包内资源进行二次混淆
  • 解压界面文案不要出现解压字样,可写为检查资源

命名混淆

更改资源名称及路径名,可有效提高机审通过概率

实现方式

在打包工具或者外部工具中改变资源名称及目录路径,记录映射关系,并修改项目的热更、加载模块,通过映射关系查找真实文件路径

注意点

  • 映射命名需要是具体含义的单词
  • 不影响到正常的热更、加载、强更逻辑

内容混淆

混淆资源文件内容,以改变资源文件Hash值

实现方式

在打包工具或者外部工具中加密资源,记录加密Key,并修改项目的热更、加载模块,通过解密获得正确的资源字节集

注意点

  • 加密算法需保证解密效率,防止包体解密资源的时间损耗过大
  • 不影响到正常的热更、加载、强更逻辑

其他注意点

  • 马甲包需要动态切换资源版本、区服、版署信息、开关某些游戏功能,一般通过HTTP读取云端配置文件实现
  • 过审时不允许出现热更逻辑
  • 过审时不允许出现648以上的大档充值档位
  • 过审时游戏一级就需要出现所有充值档位
  • 过审有概率查看HTTP请求,减少不必要的HTTP请求逻辑,对HTTP请求加密,更换新的域名
  • 过审有概率查看应用存储目录,保证没有大量相同的存储文件,如压缩包解压后的资源文件