iOS APP加固保护

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

2018-12-19  本文已影响264人  临川慕容吹雪

前言:对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版本工具实现的思路

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

编写好的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#混淆实现代码

后记

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

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

上一篇下一篇

猜你喜欢

热点阅读