一、前言
隨着iOS系統的逐漸開放,iOS越獄需求的人越來越少,那么在非越獄系統上面開發越獄插件那將是一個不錯的選擇,在github上面發現一個開源的Xcode工程模板。
整合了越獄開發的工具、重簽名工具、以及常用的庫,方便在非越獄模式下面進行代碼的修改和插件的開發。
這個工具有重要的意義,降低了app重新打包重簽名的門檻。讓越獄開發和普通開發一樣方便
https://github.com/AloneMonkey/MonkeyDev
二、嘗試
1)安裝
在安裝中最方便的是直接在機器上面連接VPN,掛上外網的環境,那么安裝應該是很順暢的。
我的環境是公司代理之下的環境,需要修改安裝腳本中的代碼
修改方式我已經提交到:
https://github.com/AloneMonkey/MonkeyDev/issues/120
2)重啟Xcode之后,檢查工程模板中是否包含Monkey Dev的開發環境
那么表示安裝成功。
3)選擇Monkey Dev環境,建立一個空的工程,編譯到手機上。
一般是OK的,下一步是要放入一個空的IPA到目標文件夾中,一直沒找到空的ipa,只找到一個在這里。
App貌似是一個微博,已經不能用了。但是只要能安裝到手機上就可以
編譯安裝到手機運行報錯:
Reveal Are you trying to load dynamic library with Reveal Framework already linked?
應該是App本身鏈接了一份Reveal,在工程目標的Other Link中刪掉這個庫的鏈接。
繼續跑,出現異常導致Crash,下異常斷點。
說明valueForKey中存在沒有定義的key,寫一個擴展將這個方法覆蓋掉,避免原來的方法拋出異常。
直接返回空,跳過這個錯誤。可以看到App成功啟動了,然后控制台輸出了log。
2018-09-17 19:30:50.932143+0800 Weibo[522:98774] [DYMTLInitPlatform] platform initialization successful 2018-09-17 19:30:50.957942+0800 Weibo[522:98683] [MethodTrace] Method Trace is disabled 2018-09-17 19:30:50.958010+0800 Weibo[522:98683] 🎉!!!congratulations!!!🎉 👍----------------insert dylib success----------------👍 2018-09-17 19:30:50.958134+0800 Weibo[522:98683] [AntiAntiDebug Init] 2018-09-17 19:30:51.024275+0800 Weibo[522:98683] +[CATransaction synchronize] called within transaction 2018-09-17 19:30:51.029109+0800 Weibo[522:98683] You've implemented -[<UIApplicationDelegate> application:didReceiveRemoteNotification:fetchCompletionHandler:], but you still need to add "remote-notification" to the list of your supported UIBackgroundModes in your Info.plist.
4)可以看到hook的代碼正常執行了
接下來的事情就看想象了。
三、分析總結
這個框架有幾個主要的功能
1、一個完整的Xcode工程,包含一個App的主工程、一個dylib的動態鏈接庫工程。
2、在App編譯完成之后,可以將目標App完成與編譯App之間的替換,這樣完成移花接木的功能。
3、鏈接庫功能中使用了theOS中的庫,實現對OC方法的hook和C方法的hook。
4、實現ipa中簽名文件替換,動態庫的注入
5、可調式
注意:
注入鏈接庫之后的App,bundleID隨之改變,對於微信來說,校驗了bundleID可能會提示非法客戶端導致封號,但這個也可以通過hook解決。