Theos越獄插件開發(fā)——VideoDownloaderCN

前言

學(xué)習(xí)逆向有一段時(shí)間了,想著寫個(gè)iOS Jailbreak Tweak練練手,平時(shí)比較喜歡看視頻,看到比較搞笑的視頻想保存下載發(fā)給好友,無奈無法下載,于是有了這個(gè)VideoDownloaderCN插件。

聲明 : 插件用于技術(shù)研究

插件

一、分析

最近分析幾個(gè)App上的視頻播放,基本上就是一個(gè)View上有個(gè)播放組件,而這個(gè)View或者它的若干個(gè)nextResponder持有這個(gè)視頻的url,于是有這樣的思路:

  • 動(dòng)態(tài)分析定位得到視頻的URL
  • 在View的構(gòu)造方法內(nèi)添加一個(gè)手勢(shì)彈出下載
  • 手勢(shì)對(duì)應(yīng)視頻下載的方法實(shí)現(xiàn),最后移動(dòng)到系統(tǒng)相冊(cè)

分析方法用到:Cycript動(dòng)態(tài)調(diào)試、Reveal界面分析、class-dump頭文件

分析過程不在這里描述,主要mark一下Tweak的構(gòu)建工程.

二、Theos

安裝配置

網(wǎng)絡(luò)上有非常多的教程,但是我推薦查看官方的.Theos installation

創(chuàng)建工程

nic.pl

創(chuàng)建工程

目錄介紹

目錄介紹

Makefile

Makefile

Tweak.xm

Tweak.xm

此處我使用了多個(gè)xm文件來區(qū)分每個(gè)App的注入代碼,具體查看github

*.plist

*.plist

編譯Tweak

做好了基礎(chǔ)配置以及編寫好xm之后,就可以通過make命令編譯,我遇到了一個(gè)錯(cuò)誤,如下:

make

修改Makefile再次編譯

Makefile
make again

make package生成deb

mack package

安裝Tweak

make install命令安裝到設(shè)備,安裝前需要配置一些必要參數(shù),將以下兩行參數(shù)配置到Makefile是一種方法,意思是通過本地USB方式,端口2222安裝到手機(jī),我的做法是配置好寫在.bash_profile.zshrc內(nèi),這樣不用每次在Makefile內(nèi)編寫(重要提示:出現(xiàn)Error請(qǐng)?jiān)敿?xì)檢查theos配置,手機(jī)IP、端口是否映射,ssh是否正常登陸)

export THEOS_DEVICE_IP=localhost

export THEOS_DEVICE_PORT=2222

當(dāng)然安裝deb方法不止一種,當(dāng)你打包出deb

  1. 可以使用CyDown這個(gè)插件開一個(gè)ftp,然后PC傳deb過去,接著手機(jī)端打開cydia找到那個(gè)deb安裝。
  2. 可以使用scp命令傳到手機(jī)端,接著手機(jī)終端dpkg -i安裝,具體做法請(qǐng)自行搜索詳細(xì)教程。

至此,一個(gè)Tweak在iOS越獄設(shè)備上

tweak

三、插件設(shè)置項(xiàng)Preference Bundle

一個(gè)tweak可能要設(shè)置一些選項(xiàng),就像App Store上App一樣,在設(shè)置應(yīng)用里面可以設(shè)置,在theos里,可以通過創(chuàng)建Preference Bundle來為插件提供設(shè)置界面,有點(diǎn)類似于Xcode里的Setting Bundle,Preference Bundle安裝到手機(jī)后會(huì)在/Library/PreferenceBundles/目錄生成一個(gè)對(duì)應(yīng)的bundle,此bundle會(huì)基于PreferenceLoader注入到設(shè)置應(yīng)用(Setting.app),而PreferenceLoader是由Dustin Howett開發(fā)的基于Mobile Substrate的工具,主要為插件在系統(tǒng)設(shè)置界面添加一個(gè)設(shè)置入口。

為插件創(chuàng)建Preference Bundle

一般的做法為:在原插件目錄使用theos創(chuàng)建

make preference bundle
new in Makefile

創(chuàng)建preference bundle后新生成目錄下的文件介紹如下:

文件 作用/含義
entry.plist 為插件在系統(tǒng)設(shè)置應(yīng)用界面添加一個(gè)入口,一般修改iconlabel即可
XXXRootListController XXXRootListController必須繼承PSListController或者PSViewController,且必須實(shí)現(xiàn)- (id)specifiers方法,因?yàn)镻SListController依賴_specifiers來獲得metadata和group
Makefile preference bundleMakefile,一般不用過多修改與操作,編譯Tweak的Makefile會(huì)跟隨著一起編譯
Resources文件夾下的文件如下
Info.plist 主要記錄這個(gè)preference bundle的配置信息,一般不用修改
Root.plist 重點(diǎn)編寫的文件,主要配置插件界面的UI元素,XML格式,好像還有一種類似JSON格式的

關(guān)于Preference Bundle的更多配置方法,參考:

PreferenceBundles

Preferences specifier plist

讓 iPhone 上顯示學(xué)期周數(shù)(五)?—?— 增加用戶配置界面

制作 Preference Bundle 插件菜單

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配置學(xué)習(xí),真的是花了不少時(shí)間~~~,具體的配置我不放上來了,可以去我的github看一下,我盡量注釋說明了配置的含義。

推薦一個(gè)開源插件Repo:Open-Source-Tweaks

四、遇到的坑

theos創(chuàng)建preference bundle后編譯不通過,原因是theos找不到對(duì)應(yīng)的庫

error when make

解決方法:
手動(dòng)下載theos需要的sdks,網(wǎng)上已經(jīng)有人Patch好了,將從theos sdks下載的sdks放到theos/sdks目錄下。

再次編譯還是錯(cuò)誤,原因是目前Xcode10.1已經(jīng)使用iOS12.1的sdks,搜了一番沒有找到theos用的,于是我將插件支持版本調(diào)低一點(diǎn),可以編譯通過,TweakMakefile添加:

export TARGET = iphone:clang:11.2:8.0

最低版本8.0,最高版本11.2,反正iOS12的越獄大神還沒release,why so serious?

參考:Xcode10.x theos doesn't work

五、總結(jié)

本次主要學(xué)習(xí)theos開發(fā)iPhone tweak的操作以及為tweak增加設(shè)置入口,因?yàn)樽约旱牟寮枰獙?duì)多個(gè)App注入,就想增加開關(guān)來控制插件是否生效,順便學(xué)習(xí)一下Preference Bundle.
整個(gè)開發(fā)過程回顧一下大概是:

  1. Cycript調(diào)試拿到視頻URL的成員變量
  2. 查看頭文件查看屬性與方法,hook初始化方法添加觸發(fā)手勢(shì)
  3. 編寫Tweak調(diào)試測(cè)試,適配多個(gè)視頻場(chǎng)景
  4. 編寫TweakPreference Bundle控制插件開關(guān)(花了不少時(shí)間)
  5. 整理

六、參考

Tweak開發(fā):給調(diào)音量增加震動(dòng)反饋

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容