使用theos hook第一個越獄ios系統的app 轉至元數據結尾

今天使用theos 進行了一個簡單的hook。下面介紹具體過程,和踩過的一些坑。

一:物理環境

mac os x: 10.11.5

xcode:xcode7.3.1

xcode sdk:ios9.3

越獄手機:iphone4,ios7

有幾點需要注意的地方:

1;mac系統的升級和xcode的安裝頗費周折 具體解決的過程見Xcode編譯器安裝過程說明

2;mac os x系統和越獄手機一定要保證在同一局域網內

3;ios手機上要已經越獄并安裝過openssh。


如上截圖 則安裝了本次試驗的兩個重要的源:Cydia Substrate和openssh。

其中Cydia Substrate則是包含了theos工具,而openssh則使得計算機可以遠程操控ios設備。

openssh默認登錄密碼是:alpine。通常為了設備安全都建議更改密碼。

ssh-keygen?-R?伺服器端的IP或網址 清除舊的ssh登錄證書

二:theos 安裝使用流程

手動下載配置theos十分麻煩,這里有大神做好了準備:去https://github.com/DaSens/Theos-Script下載腳本。

1:將腳本放置在桌面 文件夾內容是


進入文件夾 運行TheosScript.sh腳本文件 一路跑下去 theos安裝配置完成

發現多了個文件opt


在opt里則是我們需要的工具 theos。同時這也是我們工具的路徑,后文中會講到。


2:在創建theos工程之前,我們先來創建目標hook app。


介紹下這個app

a;這個app即是在viewController界面上創建一個紅色button,點擊這個button,這個button上即會出現you are ok的字樣。

b;這個app的bundle ID是com.antiy.chendan

c;這個app的名字叫做test1

之所以沒有hook app的私有函數發短信這個接口,是因為測試機iphone sim卡失效

下面是運行這個app的結果


目標app已有,現在要做的事情就是hook 它的- (void)buttonClick:(id)sender函數,使得按鈕按下去顯示you are under control。

3:創建theos工程

a:在桌面上創建test_hook的文件夾,這個文件夾作為工程文件夾

b:cd 進入這個文件夾 終端執行/opt/theos/bin/nic.pl

將會啟動theos工程的創建過程,這過程中會一一配置工程參數

首先會出現


選擇11

然后會要求輸入Project Name:(輸入創建的theos工程的名字,本例 test1)

再要求輸入Package Name:(輸入hook app的bundle ID,本例com.antiy.chendan)

再要求輸入Author/Maintainer Name:(輸入作者的名字,這個跟工程關系不大,但最后在Cydia源中會顯示這些信息,本例chendan)

再要求輸入hook app的bundle ID:(本例com.antiy.chendan)

最后輸入SpringBoard啟動項:為空(不填,直接回車)

經過這個過程theos的工程就創建完畢 如下圖


下面分別來介紹一下這個四個文件的意義

control:控制文件,本demo不會用到。

test1.plist:目標hook app的bundle ID存儲在這里,可隨時更改

Makefile:重新打包配置文件

Tweak.xm:hook的具體細節在這里編碼,主要采用logos標識符來hook操作

下面給出Makefile的最終文件形式



Makefile文件最開始的時候 這里大部分項都沒有 都是需要配置的

export THEOS=/opt/theos:配置文件執行路徑(如果沒有這個,是找不到tweak.mk文件的,終端會報錯)

THEOS_DEVICE_IP = 192.168.202.232:hook的越獄設備的IP地址,上文提過,必須mac電腦和越獄設備在同一局域網內,不然無法用openssh登錄進行操作

ARCHS = armv7 arm64:不同的iphone機型配置不同的,本例iphone4,使用的是armv7,如不放心,可把armv7,armv7s,arm64全帶上

TARGET = iphone:latest:9.3:xcode使用的sdk

TWEAK_NAME = test1:teak工程的名字,這個在工程創建的時候就已經有配置過,不能更改

test1_FILES = Tweak.xm:目標hook文件,就在那四個文件之一

test1_FRAMEWORKS = UIKit:hook操作中使用到的ios框架,如使用了私有函數則還需要添加test1_PRIVATE_FRAMEWORKS =

剩下的就不用介紹了,安裝完成,終止進程,重新啟動SpringBoard。

接下來給出Tweak.xm的hook細節


接下來諸事準備完畢,可以開始hook。

利用終端cd進入你創建的tweak項目目錄,然后執行make package install,然后輸入兩次ssh的連接密碼(ssh 默認密碼alpine),

然后設備就會重啟SpringBoard,然后我們再次打開HOOK的APP發現按鈕的點擊方法已經被替換了。


三:Cydia源

在Cydia源里查看如下


可知這個app被順利的hook住了。此后無論xcode運行多少次,這個函數仍然是被hook住的,原來的此處代碼無效。

要想恢復之前的app,可進入這個test1


然后卸載即可。

而且我發現 通過theos創建application然后給iphone安裝的應用是具有最高權限的,刪不掉。不得不說越獄開發真的有點變態。

這也就是那些基于系統的定制化開發,安卓上比比皆是,蘋果上只有越獄了應用才能取得這種權限,一旦系統更新,不再越獄,則IOS對這個應用收回這個權限。

四:原理淺探

1,Cydia Substrate 和 Mobile Substrate

Cydia Substrate 原名為 Mobile Substrate 已經正式更名為 Cydia Substrate。

它是越獄后cydia插件/軟件運行的一個基礎依賴包。提供軟件運行的公共庫,可以用來動態替換

內存中的代碼、數據等所以iOS系統越獄環境下安裝絕大部分插件,必須首先安裝Cydia Substrate。

Cydia Substrate主要由3部分組成:MobileHooker,MobileLoader 和 safe mode。

2,MobileHooker、Logos

MobileHooker用于替換覆蓋系統的方法,這個過程被稱為Hooking(掛鉤)它主要包含兩個函數:voidMSHookMessageEx(Classclass, SEL selector, IMP replacement, IMP *result);voidMSHookFunction(void*function,void* replacement,void** p_original);MSHookMessageEx 主要作用于Objective-C函數MSHookFunction 主要作用于C和C++函數Logos語法就是對此函數做了一層封裝,讓編寫hook代碼變的更直觀,上面的例子用的就是logos語法。MSHookMessageEx 和MSHookFunction 使用方法這里就不介紹了,大家可去看書籍或者查詢相關資料。

3,MobileLoader

MobileLoader用于加載第三方dylib在運行的應用程序中。

啟動時MobileLoader會根據dylib的同名plist文件指定的作用范圍,有選擇的在不同進程里通過dlopen函數打開目錄/Library/MobileSubstrate/DynamicLibraries/ 下的所有dylib。

4,safe mode

因為APP程序質量參差不齊崩潰再所難免,tweak本質是dylib,寄生在別人進程里,如果注入Springboard等。系統進程一旦出錯,可能導致整個進程崩潰,崩潰后就會造成iOS癱瘓。

所以CydiaSubstrate引入了安全模式,在安全模式下所有基于CydiaSubstratede 的三方dylib都會被禁用,便于查錯與修復。

建議自己測試的時候如果HOOK Springboard的時候一定要注意!如果出錯,進入安全模式刪除插件即可。

參考資料:http://www.lxweimin.com/p/8982e9670fc6http://www.lxweimin.com/p/2d2c492a283c

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,763評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,238評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,823評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,604評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,339評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,713評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,712評論 3 445
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,893評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,448評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,201評論 3 357
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,397評論 1 372
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,944評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,631評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,033評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,321評論 1 293
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,128評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,347評論 2 377

推薦閱讀更多精彩內容