前言:對iOS重復應用相關解決途徑可參考下
馬甲包指南及應對蘋果審核的非技術因素.
我這里就技術因素做些相關操作說明。
最近為了解決公司重復應用問題描函,做了些代碼混淆锨并,并寫了xcode工程代碼混淆Mac工具聪蘸。目前實現(xiàn)了以下功能:
1:生成新的混淆代碼類数焊,
2:在原有的類的方法中插入隨機的方法。
3.修改工程名
4.修改Assets資源
只支持iOS膨处,不支持swift见秤。
由于我們untiy iOS游戲工程,不能隨意修改已有的類的類名真椿,沒有加入修改類名和工程名等操作鹃答。再加上我之前沒有怎么弄個Mac開發(fā),對cocoa框架不是很熟突硝。先簡單實現(xiàn)了部分混淆功能测摔。記錄下,后續(xù)看怎么優(yōu)化
1.xcode工程混淆
一個報錯記錄:
UserInfo={NSFilePath=/Users/fitfun/Documents/9.彭磊自建組件/confusionFile,
NSUnderlyingError=0x60000025c860 {Error Domain=NSPOSIXErrorDomain Code=1
"Operation not permitted"}
原因:把 Project 里面的 Capabilities 選項中App Sandbox是打開了,關掉后創(chuàng)建文件夾功能運行正常解恰。如果軟件是需要上傳到 App Store 中避咆,那么會采用 Sandbox 沙盒模式,程序只允許在自己的目錄中運行修噪,在 IOS 里面影響不大,但是到了 MacOS 里面如果進行文件夾操作路媚,那么就這阻止了軟件的運行黄琼。
或者這樣改
Mac版本工具實現(xiàn)的思路:
- iOS文件解析和寫入用了一個比較完善的三方:MGTemplateEngine
之后本地建立模板:
然后通過模板生成混淆代碼。
編寫好的MAC版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實現(xiàn)
(我是用xcode10.1編寫的低版本的xcode直接打不開Demo工程)
2 對unity工程的C#
代碼進行混淆
- 主要生成隨機的C#垃圾代碼
-
對原有C#代碼進行混淆
使用的時候在unity面板上點擊相關功能即可:
具體效果:
由于我對C#
不是很熟烦周,也是學習參考別人思路尽爆,具體實現(xiàn)也不是很難怎顾。有需要可看具體C#混淆實現(xiàn)代碼
后記
如果對CocoaPods的ruby工具Xcodeproj感興趣,可參考懶人福利:用腳本來修改Xcode工程.
如果需要修改工程名和原有類名操作漱贱,可參考KLGenerateSpamCode
更新記錄:根據(jù)看官要求槐雾,已經(jīng)加入對生成的iOS垃圾代碼進行了調用。