前言
學習逆向有一段時間了扯躺,想著寫個iOS Jailbreak Tweak練練手讯柔,平時比較喜歡看視頻悲靴,看到比較搞笑的視頻想保存下載發(fā)給好友臭胜,無奈無法下載,于是有了這個VideoDownloaderCN插件癞尚。
聲明 : 插件用于技術(shù)研究
一耸三、分析
最近分析幾個App上的視頻播放,基本上就是一個View上有個播放組件浇揩,而這個View或者它的若干個nextResponder持有這個視頻的url仪壮,于是有這樣的思路:
- 動態(tài)分析定位得到視頻的URL
- 在View的構(gòu)造方法內(nèi)添加一個手勢彈出下載
- 手勢對應(yīng)視頻下載的方法實現(xiàn),最后移動到系統(tǒng)相冊
分析方法用到:Cycript動態(tài)調(diào)試胳徽、Reveal界面分析积锅、class-dump頭文件
分析過程不在這里描述爽彤,主要mark一下Tweak的構(gòu)建工程.
二、Theos
安裝配置
網(wǎng)絡(luò)上有非常多的教程缚陷,但是我推薦查看官方的.Theos installation
創(chuàng)建工程
nic.pl
目錄介紹
Makefile
Tweak.xm
此處我使用了多個xm文件來區(qū)分每個App的注入代碼适篙,具體查看github
*.plist
編譯Tweak
做好了基礎(chǔ)配置以及編寫好xm之后,就可以通過make
命令編譯箫爷,我遇到了一個錯誤嚷节,如下:
修改Makefile
再次編譯
make package
生成deb
安裝Tweak
make install
命令安裝到設(shè)備,安裝前需要配置一些必要參數(shù),將以下兩行參數(shù)配置到Makefile
是一種方法,意思是通過本地USB方式虎锚,端口2222安裝到手機硫痰,我的做法是配置好寫在.bash_profile
或.zshrc
內(nèi),這樣不用每次在Makefile
內(nèi)編寫(重要提示:出現(xiàn)Error請詳細檢查theos配置窜护,手機IP效斑、端口是否映射,ssh是否正常登陸)
export THEOS_DEVICE_IP=localhost
export THEOS_DEVICE_PORT=2222
當然安裝deb方法不止一種柱徙,當你打包出deb
后
- 可以使用
CyDown
這個插件開一個ftp
缓屠,然后PC傳deb
過去,接著手機端打開cydia
找到那個deb安裝坐搔。 - 可以使用
scp
命令傳到手機端藏研,接著手機終端dpkg -i
安裝,具體做法請自行搜索詳細教程。
至此概行,一個Tweak在iOS越獄設(shè)備上
三蠢挡、插件設(shè)置項Preference Bundle
一個tweak
可能要設(shè)置一些選項,就像App Store上
的App
一樣凳忙,在設(shè)置應(yīng)用里面可以設(shè)置业踏,在theos
里,可以通過創(chuàng)建Preference Bundle
來為插件提供設(shè)置界面,有點類似于Xcode
里的Setting Bundle
,Preference Bundle
安裝到手機后會在/Library/PreferenceBundles/
目錄生成一個對應(yīng)的bundle
,此bundle
會基于PreferenceLoader
注入到設(shè)置應(yīng)用(Setting.app
)涧卵,而PreferenceLoader
是由Dustin Howett開發(fā)的基于Mobile Substrate
的工具勤家,主要為插件在系統(tǒng)設(shè)置界面添加一個設(shè)置入口。
為插件創(chuàng)建Preference Bundle
一般的做法為:在原插件目錄使用theos
創(chuàng)建
創(chuàng)建preference bundle
后新生成目錄下的文件介紹如下:
文件 | 作用/含義 |
---|---|
entry.plist | 為插件在系統(tǒng)設(shè)置應(yīng)用界面添加一個入口柳恐,一般修改icon 與label 即可 |
XXXRootListController | XXXRootListController必須繼承PSListController或者PSViewController伐脖,且必須實現(xiàn)- (id)specifiers方法,因為PSListController依賴_specifiers來獲得metadata和group |
Makefile |
preference bundle 的Makefile 乐设,一般不用過多修改與操作讼庇,編譯Tweak的Makefile會跟隨著一起編譯 |
Resources文件夾下的文件如下 | |
Info.plist | 主要記錄這個preference bundle 的配置信息,一般不用修改 |
Root.plist | 重點編寫的文件近尚,主要配置插件界面的UI元素蠕啄,XML格式,好像還有一種類似JSON格式的 |
關(guān)于Preference Bundle
的更多配置方法,參考:
讓 iPhone 上顯示學期周數(shù)(五)?—?— 增加用戶配置界面
Part 6: Preferences, Preferences, a little Tweak, and Heaps of More Preferences
Theos - Preference Bundle Tutorial iOS 8 - iPhone, iPad
網(wǎng)上關(guān)于Preference Bundle
的用法中文介紹很少歼跟,我是結(jié)合iPhonewiki
和媳、視頻以及一些開源插件的Preference Bundle
配置學習,真的是花了不少時間~~~,具體的配置我不放上來了哈街,可以去我的github看一下留瞳,我盡量注釋說明了配置的含義。
推薦一個開源插件Repo:Open-Source-Tweaks
四叹卷、遇到的坑
theos
創(chuàng)建preference bundle
后編譯不通過,原因是theos
找不到對應(yīng)的庫
解決方法:
手動下載theos
需要的sdks
撼港,網(wǎng)上已經(jīng)有人Patch
好了,將從theos sdks下載的sdks
放到theos
的/sdks
目錄下骤竹。
再次編譯還是錯誤,原因是目前Xcode10.1已經(jīng)使用iOS12.1的sdks,搜了一番沒有找到theos
用的往毡,于是我將插件支持版本調(diào)低一點,可以編譯通過,Tweak
的Makefile
添加:
export TARGET = iphone:clang:11.2:8.0
最低版本8.0蒙揣,最高版本11.2,反正iOS12的越獄大神還沒release
,why so serious?
參考:Xcode10.x theos doesn't work
五开瞭、總結(jié)
本次主要學習theos
開發(fā)iPhone tweak
的操作以及為tweak
增加設(shè)置入口懒震,因為自己的插件需要對多個App注入,就想增加開關(guān)來控制插件是否生效嗤详,順便學習一下Preference
Bundle
.
整個開發(fā)過程回顧一下大概是:
-
Cycript
調(diào)試拿到視頻URL
的成員變量 - 查看頭文件查看屬性與方法个扰,
hook
初始化方法添加觸發(fā)手勢 - 編寫
Tweak
調(diào)試測試,適配多個視頻場景 - 編寫
Tweak
的Preference Bundle
控制插件開關(guān)(花了不少時間) - 整理