unity iOS工程混淆(解决iOS 4.3重复应用)

前言:对iOS重复应用相关解决途径可参考下
马甲包指南及应对苹果审核的非技术因素.

我这里就技术因素做些相关操作说明。

最近为了解决公司重复应用问题,做了些代码混淆,并写了xcode工程代码混淆Mac工具。目前实现了以下功能:
1:生成新的混淆代码类,
2:在原有的类的方法中插入随机的方法。
3.修改工程名
4.修改Assets资源
只支持iOS,不支持swift。
由于我们untiy iOS游戏工程,不能随意修改已有的类的类名,没有加入修改类名和工程名等操作。再加上我之前没有怎么弄个Mac开发,对cocoa框架不是很熟。先简单实现了部分混淆功能。记录下,后续看怎么优化

1.xcode工程混淆

一个报错记录:

UserInfo={NSFilePath=/Users/fitfun/Documents/9.彭磊自建组件/confusionFile, 
NSUnderlyingError=0x60000025c860 {Error Domain=NSPOSIXErrorDomain Code=1 
"Operation not permitted"}

原因:把 Project 里面的 Capabilities 选项中App Sandbox是打开了,关掉后创建文件夹功能运行正常。如果软件是需要上传到 App Store 中,那么会采用 Sandbox 沙盒模式,程序只允许在自己的目录中运行,在 IOS 里面影响不大,但是到了 MacOS 里面如果进行文件夹操作,那么就这阻止了软件的运行。


unity iOS工程混淆(解决iOS 4.3重复应用)_第1张图片
截图

或者这样改


unity iOS工程混淆(解决iOS 4.3重复应用)_第2张图片

Mac版本工具实现的思路

  • iOS文件解析和写入用了一个比较完善的三方:MGTemplateEngine
    之后本地建立模板:
    unity iOS工程混淆(解决iOS 4.3重复应用)_第3张图片
    模板

然后通过模板生成混淆代码。

编写好的MAC版iOS代码混淆工具具体效果:


unity iOS工程混淆(解决iOS 4.3重复应用)_第4张图片
iOS混淆工具

运行之后:
生成混淆代码类:


unity iOS工程混淆(解决iOS 4.3重复应用)_第5张图片
混淆代码

unity iOS工程混淆(解决iOS 4.3重复应用)_第6张图片
根据模板生成的随机类

生成混淆代码,我通过依赖 CocoaPods的ruby工具Xcodeproj,
编写了ruby脚本,通过终端调用ruby 脚本可以将生成的混淆文件自动依赖到工程中,但是我用cocoa代码调用ruby脚本,

NSString *ruString =   [[NSBundle mainBundle] pathForResource:@"run" ofType:@"sh"];
 //run.sh里面就直接是调用ruby文件
    NSTask *copyFileTask = [[NSTask alloc] init];
    //调用路径
    [copyFileTask setLaunchPath:@"/bin/sh"];
    copyFileTask.arguments =  @[ruString];
    [copyFileTask launch];

这样写提示找不到Xcodeproj这个依赖,暂时还没找到解决方法,也就是说我目前的混淆工具生成混淆代码需要手动依赖到xcode工程中。有知道的也请指教下。这个ruby脚本我也放在我的工程里。可以看下。

给原有的类里面添加混淆代码:


unity iOS工程混淆(解决iOS 4.3重复应用)_第7张图片
效果图

这里面会在原有类方法里面添加随机变量和if判断语句,
并在类末尾添加了新的随机类

有兴趣的话,可以具体看我的DEMO实现
(我是用xcode10.1编写的低版本的xcode直接打不开Demo工程)

2 对unity工程的C#代码进行混淆

  • 主要生成随机的C#垃圾代码
  • 对原有C#代码进行混淆
    使用的时候在unity面板上点击相关功能即可:


    C#代码混淆

    具体效果:


    unity iOS工程混淆(解决iOS 4.3重复应用)_第8张图片
    生成的垃圾C#代码

由于我对C#不是很熟,也是学习参考别人思路,具体实现也不是很难。有需要可看具体C#混淆实现代码

后记

如果对CocoaPods的ruby工具Xcodeproj感兴趣,可参考懒人福利:用脚本来修改Xcode工程.
如果需要修改工程名和原有类名操作,可参考KLGenerateSpamCode

更新记录:根据看官要求,已经加入对生成的iOS垃圾代码进行了调用。

你可能感兴趣的:(unity iOS工程混淆(解决iOS 4.3重复应用))