最近公司让负责项目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请求加密,更换新的域名
- 过审有概率查看应用存储目录,保证没有大量相同的存储文件,如压缩包解压后的资源文件