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 里面如果进行文件夹操作,那么就这阻止了软件的运行。
截图
或者这样改
Mac版本工具实现的思路:
- iOS文件解析和写入用了一个比较完善的三方:MGTemplateEngine
之后本地建立模板: 模板
然后通过模板生成混淆代码。
编写好的MAC版iOS代码混淆工具具体效果:
iOS混淆工具
运行之后:
生成混淆代码类:
混淆代码
根据模板生成的随机类
生成混淆代码,我通过依赖 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
脚本我也放在我的工程里。可以看下。
给原有的类里面添加混淆代码:
效果图
这里面会在原有类方法里面添加随机变量和if判断语句,
并在类末尾添加了新的随机类。
有兴趣的话,可以具体看我的DEMO实现
(我是用xcode10.1编写的低版本的xcode直接打不开Demo工程)
2 对unity工程的C#
代码进行混淆
- 主要生成随机的C#垃圾代码
-
对原有C#代码进行混淆
使用的时候在unity面板上点击相关功能即可:
C#代码混淆
具体效果:
生成的垃圾C#代码
由于我对C#
不是很熟,也是学习参考别人思路,具体实现也不是很难。有需要可看具体C#混淆实现代码
后记
如果对CocoaPods的ruby工具Xcodeproj感兴趣,可参考懒人福利:用脚本来修改Xcode工程.
如果需要修改工程名和原有类名操作,可参考KLGenerateSpamCode
更新记录:根据看着要求,已经加入对生成的iOS垃圾代码进行了调用。