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

前言

學習逆向有一段時間了扯躺,想著寫個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

創(chuàng)建工程

目錄介紹

目錄介紹

Makefile

Makefile

Tweak.xm

Tweak.xm

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

*.plist

*.plist

編譯Tweak

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

make

修改Makefile再次編譯

Makefile
make again

make package生成deb

mack package

安裝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

  1. 可以使用CyDown這個插件開一個ftp缓屠,然后PC傳deb過去,接著手機端打開cydia找到那個deb安裝坐搔。
  2. 可以使用scp命令傳到手機端藏研,接著手機終端dpkg -i安裝,具體做法請自行搜索詳細教程。

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

tweak

三蠢挡、插件設(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)建

make preference bundle
new in Makefile

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

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

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

PreferenceBundles

Preferences specifier plist

讓 iPhone 上顯示學期周數(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配置學習,真的是花了不少時間~~~,具體的配置我不放上來了哈街,可以去我的github看一下留瞳,我盡量注釋說明了配置的含義。

推薦一個開源插件Repo:Open-Source-Tweaks

四叹卷、遇到的坑

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

error when make

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

再次編譯還是錯誤,原因是目前Xcode10.1已經(jīng)使用iOS12.1的sdks,搜了一番沒有找到theos用的往毡,于是我將插件支持版本調(diào)低一點,可以編譯通過,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é)

本次主要學習theos開發(fā)iPhone tweak的操作以及為tweak增加設(shè)置入口懒震,因為自己的插件需要對多個App注入,就想增加開關(guān)來控制插件是否生效嗤详,順便學習一下Preference Bundle.
整個開發(fā)過程回顧一下大概是:

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

六葱色、參考

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末递宅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子苍狰,更是在濱河造成了極大的恐慌办龄,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件淋昭,死亡現(xiàn)場離奇詭異俐填,居然都是意外死亡,警方通過查閱死者的電腦和手機翔忽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門英融,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人歇式,你說我怎么就攤上這事驶悟。” “怎么了贬丛?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵撩银,是天一觀的道長。 經(jīng)常有香客問我豺憔,道長额获,這世上最難降的妖魔是什么够庙? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮抄邀,結(jié)果婚禮上耘眨,老公的妹妹穿的比我還像新娘。我一直安慰自己境肾,他們只是感情好剔难,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奥喻,像睡著了一般偶宫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上环鲤,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天纯趋,我揣著相機與錄音,去河邊找鬼冷离。 笑死吵冒,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的西剥。 我是一名探鬼主播痹栖,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼瞭空!你這毒婦竟也來了揪阿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤匙铡,失蹤者是張志新(化名)和其女友劉穎图甜,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體鳖眼,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡黑毅,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了钦讳。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矿瘦。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡刹衫,死狀恐怖予借,靈堂內(nèi)的尸體忽然破棺而出霍比,到底是詐尸還是另有隱情瓦灶,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布紊服,位于F島的核電站枚抵,受9級特大地震影響瓢宦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜搞动,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一躏精、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鹦肿,春花似錦矗烛、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至涣旨,卻和暖如春歪架,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背开泽。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工牡拇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人穆律。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像导俘,于是被迫代替她去往敵國和親峦耘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345