安裝 Theos
在右側(cè)選擇操作系統(tǒng)后進(jìn)行安裝:
https://github.com/theos/theos/wiki/Installation-Linux
安裝完成后記得添加 bin 目錄到 $PATH 中靶剑。
連接 iPhone
安裝 OpenSSH
Cydia 中安裝好 OpenSSH松却。
修改 root 密碼
為了安全,記得修改 iPhone 的 root 密碼:
$ ssh root@192.168.x.x # iPhone 與電腦連接同一個(gè) wifi 后捷枯,查看 iPhone 的 ip
提示輸入密碼,默認(rèn)為alpine专执。
$ passwd root # 輸入新密碼進(jìn)入修改
免密碼登錄
將電腦中的 ssh 公鑰 拷貝到 iPhone 的 ~/.ssh 目錄下:
# 電腦上執(zhí)行
$ cat ~/.ssh/id_rsa.pub
復(fù)制輸出的密鑰內(nèi)容淮捆。
# iPhone 上粘貼
$ ssh root@192.168.x.x # 登入 iPhone
$ echo "xxx" >> ~/.ssh/authorized_keys # xxx 為復(fù)制的公鑰內(nèi)容
第一個(gè) Tweak
# nic.pl 為 theos 的 bin 下的工具(確保已經(jīng)添加 bin 目錄到 $PATH 中)
finn@thinkpad:/tmp
9:32:48$ nic.pl
NIC 2.0 - New Instance Creator
------------------------------
[1.] iphone/activator_event
[2.] iphone/application_modern
[3.] iphone/application_swift
[4.] iphone/flipswitch_switch
[5.] iphone/framework
[6.] iphone/library
[7.] iphone/preference_bundle_modern
[8.] iphone/tool
[9.] iphone/tool_swift
[10.] iphone/tweak
[11.] iphone/xpc_service
Choose a Template (required): 10
Project Name (required): mytweak
Package Name [com.yourcompany.mytweak]:
Author/Maintainer Name [finn]:
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]: com.xx.kk # *[1]
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none) [SpringBoard]:
Instantiating iphone/tweak in mytweak/...
Done.
*[1] 這里很重要,需要輸入,你要 hook 的 app 的 bundle id攀痊。查看程序的 bundle id 有很多方法桐腌,我是直接通過(guò) ReProvision 查看的。一般安裝完 unc0ver 后苟径,我會(huì)安裝 ReProvision 進(jìn)行應(yīng)用的自動(dòng)重新簽名案站,它會(huì)顯示應(yīng)用的 id。
修改 makefile棘街,添加 iPhone 的 IP蟆盐,可以免 usb 調(diào)試
$ cd mytweak
$ vi Makefile
添加 IP,以及安裝完成后自動(dòng)重啟手機(jī)桌面使插件生效:
# the IP of iPhone
THEOS_DEVICE_IP = 192.168.x.x
# restart springboard after install
after-install::
install.exec "killall -9 SpringBoard"
注意: Makefile 中需要使用 tab 進(jìn)行縮進(jìn)遭殉,不要使用空格石挂。
編寫(xiě) Tweak.x,隨便 hook 一個(gè)程序险污。
如何查看程序的 ui 布局:
在 Cydia 中安裝 FLEXible(作者 Shmoopi)痹愚,在系統(tǒng)設(shè)置中找到它,并對(duì)要調(diào)試的程序進(jìn)行開(kāi)啟罗心。重啟要調(diào)試的程序里伯,審查界面元素即可,找到布局導(dǎo)致渤闷,以及 Controller/Method 等信息疾瓮。
用丑陋的 Object-C 隨意寫(xiě)點(diǎn)東西:
- (void)startCountDown {
%orig;
// 初始化
if(!inited) {
inited = true;
// 點(diǎn)擊復(fù)制動(dòng)態(tài)碼
UILabel *label = self.subviews[1];
label.userInteractionEnabled = true;
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc]
initWithTarget:self
action:@selector(copyCodeToClipboard)];
[label addGestureRecognizer:tapGesture];
// 注入復(fù)制按鈕
[self injectCopyButton];
}
}
編譯安裝:
$ make package install
打包給未越獄用戶(hù)使用
通過(guò) theos 打包后為 deb 包,僅能在越獄機(jī)器使用飒箭。而我們需要在未越獄機(jī)上面使用狼电,就需要將我們寫(xiě)的代碼編譯為動(dòng)態(tài)鏈接庫(kù),并注入到原app中弦蹂。
theos 除了打包成 deb 外肩碟,還會(huì)在工程根目錄下生成動(dòng)態(tài)鏈接庫(kù):
finn@thinkpad:/tmp/mytweak
9:51:07$ tree .theos
.theos
├── _
│ ├── DEBIAN
│ │ └── control
│ └── Library
│ └── MobileSubstrate
│ └── DynamicLibraries
│ ├── mytweak.dylib
│ └── mytweak.plist
├── build_session
├── fakeroot
├── last_package
├── obj
│ └── debug
│ ├── arm64
│ │ ├── mytweak.dylib # 這里
│ │ ├── Tweak.x.ac12b8c9.o
│ │ └── Tweak.x.ac12b8c9.Td
│ ├── armv7
│ │ ├── mytweak.dylib # 這里
│ │ ├── Tweak.x.32257dda.o
│ │ └── Tweak.x.32257dda.Td
│ └── mytweak.dylib # 這里(我一般使用最外層這個(gè))
└── packages
└── com.yourcompany.mytweak-0.0.1
10 directories, 14 files
具體請(qǐng)參考:http://www.reibang.com/p/cd1f8ae46a3c ,按照 該文章詳細(xì)進(jìn)入即可凸椿。