3.2 OSX工具集-Theos

Theos是一個越獄開發(fā)工具包,與其他越獄開發(fā)工具相比洲炊,最大的特點就是簡單:下載安裝簡單飘哨、Logos語法簡單胚想、編譯發(fā)布簡單,可以讓使用者把精力都放在開發(fā)工作上去芽隆。

1.安裝Xcode與Command Line Tools

一般來說浊服,iOS開發(fā)者都會安裝Xcode统屈,其中附帶 了Command Line Tools。

2.下載Theos

從GitHub上下載Theos牙躺,操作如下:

export THEOS=/opt/theos
sudo git clone git://github.com/DHowett/theos.git $THEOS

3.配置ldid

ldid是專門用來簽名iOS可執(zhí)行文件的工具愁憔,用以在越獄iOS中取代Xcode自帶的codesign。從該網(wǎng)站下載ldid孽拷,把它放在“/opt/theos/bin/”下吨掌,然后用以下命令賦予它可執(zhí)行權限:

sudo chmod 777 /opt/theos/bin/ldid

4.配置CydiaSubstrate

首先運行Theos的自動化配置腳本,新版本Theos請直接跳過乓搬。

5.配置dpkg-deb

deb是越獄開發(fā)安裝包的標準格式思犁,dpkg-deb是一個用于操作deb文件的工具,有了這個工具进肯,Theos才能正確地把工程打包成為deb文件激蹲。
該網(wǎng)站下載dm.pl,將其重命名為dpkg-deb后江掩,放到“/opt/theos/bin/”目錄下学辱,然后用以下命令賦予其可執(zhí)行權限:

sudo chmod 777 /opt/theos/bin/dpkg-deb

6.配置Theos NIC templates

Theos NIC templates內(nèi)置了5種Theos工程類型的 模板,方便創(chuàng)建多樣的Theos工程环形。除此以外策泣,還可 113 以從這里獲取額外的5種模板,下載 后將解壓得到的5個.tar文件復制 到“/opt/theos/templates/iphone/”下即可抬吟。

7.Theos用法介紹

  • 1.創(chuàng)建工程
    1)更改工作目錄至常用的iOS工程目錄(如筆者的是“/Users/liu/1/Code/”)萨咕,然后輸 入“/opt/theos/bin/nic.pl” ,啟動NIC(New Instance Creator)火本。在逆向工程初級階段危队,所開發(fā)程序的主要類型是tweak。
    2)選擇“12”钙畔,即創(chuàng)建一個tweak工程茫陆。
    3)輸入tweak的工程名稱。
    4)輸入deb包的名字(類似于bundleidentifier)擎析。
    5)輸入tweak作者的名字簿盅。
    6)輸入“MobileSubstrate Bundle filter” ,也就是 tweak作用對象的bundle identifier揍魂。
    7)輸入tweak安裝完成后需要重啟的應用桨醋,以進程名表示。
    簡單的7步完成之后现斋,一個名為iosreproject的文件夾就在當前目錄生成了喜最,該文件夾里就是剛創(chuàng)建的tweak工程。
  • 2.定制工程文件
    先來看看剛剛生成的工程目錄步责,只有4個文件返顺。
    (1)Makefile
    Makefile文件指定工程用到的文件、框架蔓肯、庫等信息遂鹊,將整個過程自動化。內(nèi)容如下:

include theos/makefiles/common.mk
TWEAK_NAME = iOSREProject
iOSREProject_FILES = Tweak.xm
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
install.exec "killall -9 SpringBoard"

逐行解讀:

include theos/makefiles/common.mk
固定寫法蔗包,不需更改秉扑。


TWEAK_NAME = iOSREProject
tweak的名字,即用Theos創(chuàng)建工程時指定 的“Project Name” 调限,跟control文件中的“Name”字段對 應舟陆,不要更改。


iOSREProject_FILES = Tweak.xm
tweak包含的源文件(不包括頭文件)耻矮,多個文件間以空格分隔秦躯,可以按需更改。


include $(THEOS_MAKE_PATH)/tweak.mk
根據(jù)不同的Theos工程類型裆装,通過include命令指定不同的.mk文件踱承;在逆向工程初級階段,我們開發(fā)的一般是Application哨免、Tweak和Tool三種類型的程序茎活,它們對應的.mk文件分別是application.mk、tweak.mk和tool.mk琢唾,可以按需更改载荔。


after-install::(回車)install.exec "killall -9 SpringBoard"
在tweak安裝之后殺掉SpringBoard進程,好讓CydiaSubstrate在進程啟動時加載對應的dylib采桃。

Makefile里的默認內(nèi)容確實非常簡單懒熙,但有點簡單過頭了。如何指定SDK版本芍碧?怎么導入framework煌珊?lib文件在哪里鏈接?作為iOS開發(fā)者的你一定會提出這些問題泌豆。

指定處理器架構
ARCHS = armv7 arm64
值得注意的是定庵,采用arm64架構的App不兼容armv7/armv7s架構,必須適配arm64架構的dylib踪危。在絕大多數(shù)情況下蔬浙,這里固定填寫“arm7 arm64”就行了。


指定SDK版本
TARGET = iphone:Base SDK:Deployment Target
TARGET = iphone:8.1:8.0
TARGET = iphone:latest:8.0


導入framework
iOSREProject_FRAMEWORKS = framework name
iOSREProject_FRAMEWORKS = UIKit CoreTelephony CoreAudio
iOSREProject_PRIVATE_FRAMEWORKS = private framework name
iOSREProject_PRIVATE_FRAMEWORKS = AppSupport ChatKit IMCore


鏈接Mach-O對象
iOSREProject_LDFLAGS = -lx
iOSREProject_LDFLAGS = -lz –lsqlite3.0 –dylib1.o
libsqlite3.0.dylib贞远、libz.dylib和dylib1.o

(2)Tweak.xm
用Theos創(chuàng)建tweak工程畴博,默認生成的源文件是Tweak.xm±吨伲“xm”中的“x”代表這個文件支持Logos語法俱病,如果后綴名是單獨一個“x”官疲,說明源文件支持Logos和C語法;如果后綴名是“xm”亮隙,說明源文件支持Logos和C/C++語法途凫,與“m”和“mm”的區(qū)別類似。最基本的Logos語法溢吻,包含%hook维费、%log、%orig這3個預處理指令促王,它們的作用如下犀盟。

%hook
指定需要hook的class,必須以%end結尾蝇狼,如下:
%hook SpringBoard
- (void)_menuButtonDown:(id)down
{
NSLog(@"You've pressed home button.");
%orig; // call the original _menuButtonDown:
}
%end
這段代碼的意思是鉤自某搿(hook)SpringBoard類里的_menuButtonDown:函數(shù),先將一句話寫入syslog迅耘,再執(zhí)行函數(shù)的原始操作恶阴。


%log
該指令在%hook內(nèi)部使用,將函數(shù)的類名豹障、參數(shù)等信息寫入syslog冯事,可以以%log([(<type>)<expr>,...])的格式追加其他打印信息,如下:
%hook SpringBoard
- (void)_menuButtonDown:(id)down
{
%log((NSString *)@"iOSRE", (NSString *)@"Debug");
%orig; // call the original _menuButtonDown:
}
%end


%orig
該指令在%hook內(nèi)部使用血公,執(zhí)行被鉤钻墙觥(hook)的函數(shù)的原始代碼,如下:
%hook SpringBoard
- (void)_menuButtonDown:(id)down
{
NSLog(@"You've pressed home button.");
%orig; // call the original _menuButtonDown:
}
%end

(3)control
control文件記錄了deb包管理系統(tǒng)所需的基本信息累魔,會被打包進deb包里摔笤。

(4)iOSREProject.plist
這個plist文件的作用和App中的Info.plist類似,它記錄了一些配置信息垦写,描述了tweak的作用范圍吕世。我們可以用plutil,也可以用Xcode來編輯它梯投。

  • 3.編譯+打包+安裝
    (1)編譯
    Theos采用“make”命令來編譯Theos工程命辖。在Theos工程目錄下運行make命令,如下:
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末分蓖,一起剝皮案震驚了整個濱河市尔艇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌么鹤,老刑警劉巖终娃,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蒸甜,居然都是意外死亡棠耕,警方通過查閱死者的電腦和手機余佛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來窍荧,“玉大人衙熔,你說我怎么就攤上這事〗淋瘢” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵框咙,是天一觀的道長咕痛。 經(jīng)常有香客問我,道長喇嘱,這世上最難降的妖魔是什么茉贡? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮者铜,結果婚禮上腔丧,老公的妹妹穿的比我還像新娘。我一直安慰自己作烟,他們只是感情好愉粤,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著拿撩,像睡著了一般衣厘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上压恒,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天影暴,我揣著相機與錄音,去河邊找鬼探赫。 笑死型宙,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的伦吠。 我是一名探鬼主播妆兑,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼毛仪!你這毒婦竟也來了箭跳?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤潭千,失蹤者是張志新(化名)和其女友劉穎谱姓,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體刨晴,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡屉来,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年路翻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茄靠。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡茂契,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慨绳,到底是詐尸還是另有隱情掉冶,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布脐雪,位于F島的核電站厌小,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏战秋。R本人自食惡果不足惜璧亚,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望脂信。 院中可真熱鬧癣蟋,春花似錦、人聲如沸狰闪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埋泵。三九已至秉撇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間秋泄,已是汗流浹背琐馆。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留恒序,地道東北人瘦麸。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像歧胁,于是被迫代替她去往敵國和親艺挪。 傳聞我的和親對象是個殘疾皇子只锻,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容