原帖發(fā)布于2021-7-21
基本常識(shí)
為什么進(jìn)行越獄開發(fā)蠢涝,以及越獄開發(fā)能做什么?
??實(shí)現(xiàn)一些AppStore上的app無法實(shí)現(xiàn)的功能,在越獄機(jī)器上,可以精細(xì)化控制iOS系統(tǒng)和App做批量自動(dòng)化操作禾蚕,增刪改系統(tǒng)功能等什么是Theos以及Theos用來干什么?
??是目前最流行的跨平臺(tái)iOS越獄開發(fā)工具包药薯,包含越獄開發(fā)所有需要的sdk和工具鏈我該怎樣選擇開發(fā)環(huán)境?
??為了達(dá)到最快的開發(fā)速度和生產(chǎn)速度绑洛,建議PC使用環(huán)境MacOS + XCode + Theos + VSCode
,手機(jī)端使用openssh + debugsever + frida
進(jìn)行相關(guān)開發(fā)童本,逆向真屯,調(diào)試,跟蹤巾陕,測(cè)試讨跟。本系列教程均基于該環(huán)境開發(fā)纪他。為此你需要準(zhǔn)備的編程技能至少包括objective-c + c + python + javascript + logos
推薦學(xué)習(xí)資源?
??論壇: iOSRE, 看雪, 52pojie, ....
常見的越獄軟件/插件都有哪些文件類型?
- 資源文件
- Daemon, 可執(zhí)行程序鄙煤,為常駐于系統(tǒng)的守護(hù)進(jìn)程,用于執(zhí)行一些需要系統(tǒng)權(quán)限的操作或者實(shí)現(xiàn)底層服務(wù)
- Tool, 可執(zhí)行程序茶袒,用于實(shí)現(xiàn)簡(jiǎn)單功能梯刚,比如lsof,wget
- Tweak, 動(dòng)態(tài)庫薪寓,隨App啟動(dòng)自動(dòng)注入亡资,用作控制進(jìn)程
- App, 這里開發(fā)的是Root權(quán)限執(zhí)行的App,在桌面存在圖標(biāo)
準(zhǔn)備工作
確保系統(tǒng)安裝homebrew, xcode
安裝Theos依賴
brew install ldid xz
- 下載TheOS
mkdir /opt # theos將下載到/opt/theos
git clone --recursive [url]https://github.com/theos/theos.git[/url] /opt/theos
*** 小技巧: 如果git下載比較慢又不想用vpn向叉,可以用gitee的'導(dǎo)入Github倉庫'功能锥腻,借助gitee下載***
- 增加iOS私有函數(shù)庫
curl -LO [url]https://github.com/theos/sdks/archive/master.zip[/url]
TMP=$(mktemp -d)
unzip master.zip -d $TMP
mv $TMP/sdks-master/*.sdk /opt/theos/sdks
rm -r master.zip $TMP
簡(jiǎn)單實(shí)例
創(chuàng)建工程
執(zhí)行/opt/theos/bin/nic.pl
得到如下結(jié)果
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/activator_event
[2.] iphone/activator_listener
[3.] iphone/application_modern
[4.] iphone/application_swift
[5.] iphone/control_center_module-11up
[6.] iphone/cydget
[7.] iphone/flipswitch_switch
[8.] iphone/framework
[9.] iphone/library
[10.] iphone/notification_center_widget
[11.] iphone/notification_center_widget-7up
[12.] iphone/preference_bundle_modern
[13.] iphone/theme
[14.] iphone/tool
[15.] iphone/tool_swift
[16.] iphone/tweak
[17.] iphone/tweak_with_simple_preferences
[18.] iphone/xpc_service
[19.] iphone/xpc_service_modern
Choose a Template (required):
??這里每行都是一種工程類型,其中[14]用于生成iOS無界面的可執(zhí)行程序母谎,[16]用于生成注入App的動(dòng)態(tài)庫瘦黑。這兩個(gè)是最常用的項(xiàng)目。如果打算開發(fā)完整越獄App奇唤,仍然要借助XCode幸斥。這里按如下操作,會(huì)產(chǎn)生helloworld目錄:
Choose a Template (required): 16
Project Name (required): helloworld
Package Name [com.yourcompany.helloworld]: helloworld
Author/Maintainer Name [apple]: helloworld
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.apple.springboard
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]: SpringBoard
配置手機(jī)環(huán)境
安裝tcprelay
??tcprelay將usb連接的手機(jī)端口映射到本地端口咬扇,這樣登錄手機(jī)將非常方便甲葬,同時(shí)傳文件速度非常快懈贺。遠(yuǎn)程ssh登陸到手機(jī)经窖,將會(huì)面臨網(wǎng)絡(luò)不穩(wěn)定的問題,操作比較痛苦
- iPhone Cydia商店中安裝openssh
brew install libusbmuxd
- 從
[url]https://gitee.com/lich0/jailbroken_programming_lesson/tree/master/tools
[/url]獲取tcprelay.py和usbmux.py - 執(zhí)行
sudo python3 tcprelay.py -t 22:22
(注意因?yàn)槎丝谔?hào)小于1024所以必須root權(quán)限執(zhí)行)
期間可能遇到的問題:
- 如果首次連接手機(jī)梭灿,會(huì)如下提示钠至,按yes即可
The authenticity of host '127.0.0.1 (127.0.0.1)' can't be established.
RSA key fingerprint is SHA256:z5N37rPCpeTKcIcm1tx3x3DnkTfeaESagZWuTYnmD3E.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
- 如果對(duì)多臺(tái)iPhone采用上述操作,那么會(huì)產(chǎn)生knownhost沖突胎源,如下所示
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
SHA256:z5N37rPCpeTKcIcm1tx3x3DnkTfeaESagZWuTYnmD3E.
Please contact your system administrator.
Add correct host key in /Users/apple/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/apple/.ssh/known_hosts:2
RSA host key for 127.0.0.1 has changed and you have requested strict checking.
Host key verification failed.
此時(shí)需要將設(shè)備公鑰加入到本機(jī)棉钧,按如下方式操作:
ssh-keyscan 127.0.0.1 >> ~/.ssh/known_hosts
- 為避免每次登陸手機(jī)輸入密碼,按如下操作
ssh-copy-id [email]root@127.0.0.1[/email] # 密碼默認(rèn)為alpine
部署日志查看工具
git clone [url]https://github.com/rpetrich/deviceconsole.git[/url]
使用XCode編譯出deviceconsole并放到$PATH下涕蚤,這樣每次USB連接iPhone后執(zhí)行deviceconsole就能看到日志(支持iOS12及以下系統(tǒng))
開發(fā)hellowolrd
??我們的helloworld是在SpringBoard啟動(dòng)時(shí)做個(gè)彈窗宪卿。SpringBoard可以理解為桌面進(jìn)程的诵。效果為每次殺死SpringBoard進(jìn)程時(shí)會(huì)在桌面彈窗。使用VSCode打開helloworld目錄佑钾,可以看到存在4個(gè)文件:
- control 指定生成的deb的基本信息西疤,包括包名,版本休溶,安裝依賴及作者信息
- helloworld.plist 用于指定自動(dòng)注入的進(jìn)程代赁,這里可以看到指定為springboard
- Makefile
- Tweak.x 代碼
工程在[url]https://gitee.com/lich0/jailbroken_programming_lesson/tree/master/junior1_helloworld
[/url]
執(zhí)行make package install
到手機(jī)后,得到最終效果如圖