iOS逆向之theos的安裝使用

一、theos 安裝

1程储、安裝簽名工具ldid

首先先確保安裝了Homebrew 。如未安裝章鲤,可通過下面指令安裝

$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

使用Homebrew安裝ldid

brew install ldid

2败徊、修改環(huán)境變量

1)編輯用戶的配置文件
vim ~/.bash_profile
2)在.bash_profile文件后面加入以下2行
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH

提示
export THEOS=~/theos 配置 theos 的主路徑,將來下載到哪個(gè)地方煤杀,下面 2.2 我們可以看到
export PATH=$THEOS/bin:$PATH 的目的是為了在任何路徑下都可以找到 ~/theos/bin 下面的命令沪哺,如下面用到的 nic.pl
$PATH就是引用環(huán)境變量的值

3)讓.bash_profile配置的環(huán)境變量立即生效(或者重新打開終端)
source ~/.bash_profile

注意
可能不起作用,原因是 mac下采用zsh代替bash酥泛,而zsh加載的是 ~/.zshrc文件嫌拣,而 ‘.zshrc’ 文件中并沒有定義任務(wù)環(huán)境變量。
解決辦法捶索,在~/.zshrc文件最后灰瞻,增加一行:source ~/.bash_profile。這樣加載/.zshrc的同時(shí)也能加載/.bash_profile文件
查看系統(tǒng)有幾個(gè)shell: cat /etc/shells燎竖。切換到zsh:chsh -s /bin/zsh要销。查看默認(rèn)shell:echo $SHELL

3疏咐、下載theos

建議在$PATH目錄下載代碼(也就是上一步配置的~/theos目錄)

git clone --recursive https://github.com/theos/theos.git $THEOS
圖1:theos 安裝配置.png

二、theos 的使用

1借跪、新建tweak項(xiàng)目

1)cd到一個(gè)存放項(xiàng)目代碼的文件(比如桌面)酌壕,使用nic.pl新建
$ cd ~/Desktop
$ nic.pl
2)選擇 iphone/tweak
圖2:新建tweak項(xiàng)目.png
3)填寫項(xiàng)目信息
  • Project Name:項(xiàng)目名稱
  • Package Name:項(xiàng)目id(隨便寫)
  • Author/Maintainer Name:作者名稱,直接敲回車按默認(rèn)做法就行(默認(rèn)是mac上的用戶名)
  • [iphone/tweak] MobileSubstrate Bundle filter:需要修改的APP的Bundle Identifier(如豆瓣:com.douban.frodo)托猩,可以通過Cycript查看APP的Bundle Identifier
  • [iphone/tweak] List of applications to terminate upon installation:直接敲回車按默認(rèn)做法就行

2京腥、編輯Makefile

1)在前面加入環(huán)境變量溅蛉,寫清楚通過哪個(gè)IP和端口訪問手機(jī)
# 調(diào)試設(shè)備的IP地址和端口
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=10010

TARGET := iphone:clang:latest:7.0
INSTALL_TARGET_PROCESSES = SpringBoard

# 引入常用的一般模板
include $(THEOS)/makefiles/common.mk

# 工程名稱
TWEAK_NAME = douban_tweak

# sdk中的framework
douban_tweak_FRAMEWORKS = UIKit, Foundation
douban_tweak_FILES = Tweak.x
douban_tweak_CFLAGS = -fobjc-arc

include $(THEOS_MAKE_PATH)/tweak.mk
2)環(huán)境變量配置

如果不希望每個(gè)項(xiàng)目的Makefile都編寫IP和端口環(huán)境變量船侧,也可以添加到用戶配置文件中。如上文中的THEOS文件目錄配置镜撩。編輯完畢后袁梗,$ source ~/.bash_profile讓配置生效(或者重啟終端)

$ vim ~/.bash_profile
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=10010
$ source ~/.bash_profile

3、編寫代碼

打開 Tweak.x 并編寫遮怜,目的是在“豆瓣”登錄頁面锯梁,添加彈框和一個(gè)紅色視圖


// 需要引入對(duì)應(yīng)的庫
#import <UIKit/UIKit.h>

// 需要定義一下需要hook的類,避免找不到“self”
@interface FRDNormalLoginViewController : UIViewController

@end

%hook FRDNormalLoginViewController

- (void)viewDidLoad {
    %orig; 

        // 添加彈框
      UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"我是標(biāo)題" message:@"Hook測試內(nèi)容" preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"確定" style:UIAlertActionStyleCancel handler:nil]];
    [self presentViewController:alert animated:YES completion:nil];
    
    // 添加紅色view
    UIView *view = [[UIView alloc] init];
      view.frame = CGRectMake(100, 100, 100, 100);
      view.backgroundColor = [UIColor redColor];
      [[self view] addSubview:view];
}

%end

4剥懒、編譯-打包-安裝

圖3:編譯-打包-安裝.png
1)編譯
make

該步驟合敦,主要是將Tweak代碼編譯成動(dòng)態(tài)庫(*.dylib)蛤肌,編譯的過程中可能會(huì)有錯(cuò)誤,有錯(cuò)誤不用怕裸准,根據(jù)錯(cuò)誤提示信息修改下就好了炒俱,也可以完成搜搜爪膊≡彝酰可能會(huì)出現(xiàn)以下錯(cuò)誤:

  • 錯(cuò)誤1: Building for iOS, but linking in .tbd file (/opt/theos/vendor/lib/CydiaSubstrate.framework/CydiaSubstrate.tbd) built for iOS Simulator, file '/opt/theos/vendor/lib/CydiaSubstrate.framework/CydiaSubstrate.tbd' for architecture arm64

解決方案:把/opt/theos/vendor/lib/CydiaSubstrate.framework/CydiaSubstrate.tbd文件用文本打開,用Sublime Text3耘成,刪除archs后面的兩項(xiàng)(, i386, x86_64)驹闰,就可以編譯成功了。
參考鏈接:http://www.reibang.com/p/060be025eb13

  • 錯(cuò)誤2:cannot find interface declaration for 'UIView'

解決方案:需要引入 UIKit师妙,如 #import <UIKit/UIKit.h>
參考鏈接:http://www.reibang.com/p/6fa6dd6276f7

  • 錯(cuò)誤3:receiver type 'MMTableView' for instance message is a forward declaration

解決方案:

// 需要定義一下需要hook的類屹培,避免找不到“self”
@interface FRDNormalLoginViewController : UIViewController

@end

參考鏈接:http://www.reibang.com/p/899faeb834eb

  • 錯(cuò)誤4:Undefined symbols for architecture armv7: "_OBJC_CLASS_$_UIAlertAction", referenced from:

解決方案:在 Makefile文件中添加 douban_tweak_FRAMEWORKS = UIKit, Foundation
參考鏈接:https://iosre.com/t/theos-make/8193

2)打包成deb
make package

make package 是將dylib打包為deb文件

  • 錯(cuò)誤1:exec of lzma -c0 failed at /Users/yinyongzhen/theos/bin/dm.pl line 11

解決方案褪秀,安裝一下 xz 及可,brew install xz
參考鏈接:https://stackoverflow.com/questions/53500472/open2-exec-of-lzma-c0-failed-a-internal-package-error-2-while-building-in-theo

3)安裝(默認(rèn)會(huì)自動(dòng)重啟SpringBoard)
make install

將deb文件傳送到手機(jī)上若专,通過Cydia安裝deb蝴猪。注意連接的地址和端口號(hào)是否正確,及plist文件中的bundlId是否正確嚎莉。

插件將會(huì)安裝在/Library/MobileSubstrate/DynamicLibraries文件夾中沛豌。 *.dylib :編譯后的Tweak代碼;*.plist:存放著需要hook的APP ID叫确。

當(dāng)打開app時(shí)芍锦,Cydia Substrate (Cydia已自動(dòng)安裝的插件)會(huì)讓APP去加載對(duì)應(yīng)的dylib;修改APP內(nèi)存中的代碼邏輯次乓,去執(zhí)行dylib中的函數(shù)代碼。所以theos的tweak并不會(huì)對(duì)APP原來的可執(zhí)行文件進(jìn)行修改城看,僅僅是修改內(nèi)存中的代碼邏輯杏慰。

圖4:tweak安裝原理.png

三逃默、theos拓展學(xué)習(xí)

1、theos- tweak的開發(fā)過程

圖5:theos- tweak的開發(fā)過程.png

2、theos資料查詢

  • 目錄結(jié)構(gòu):https://github.com/theos/theos/wiki/Structure
  • 環(huán)境變量:http://iphonedevwiki.net/index.php/Theos
  • Logos語法:http://iphonedevwiki.net/index.php/Logos
    • %hook瘩将、%end:hook一個(gè)類的開始和結(jié)束
    • %log:打印方法調(diào)用詳情姿现。可以通過Xcode -> Window -> Devices and Simulators查看日志
    • HBDebugLog:根NSLog類似
    • %new:添加一個(gè)新的方法
    • %c(className) :生成一個(gè)Class對(duì)象异旧,比如%c(NSObject)提佣,類似于NSStringFromClass()objc_getClass()
    • %orig:函數(shù)原來的代碼邏輯
    • %ctor:在加載動(dòng)態(tài)庫時(shí)調(diào)用
    • %dtor:在程序退出時(shí)調(diào)用
    • logify.pl:可以將一個(gè)頭文件快速轉(zhuǎn)換成已經(jīng)包含打印信息的xm文件潮针。 logify.pl xx.h > xx.xm
  • 如果有額外的資源文件倚喂,比如圖片,放在項(xiàng)目中的layout文件夾中焦读,對(duì)應(yīng)著手機(jī)的根路徑/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末舱权,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子喧兄,更是在濱河造成了極大的恐慌,老刑警劉巖浑彰,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拯辙,死亡現(xiàn)場離奇詭異涯保,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)夕春,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門及志,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人率寡,你說我怎么就攤上這事倚搬。” “怎么了捅僵?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵盆犁,是天一觀的道長。 經(jīng)常有香客問我醋奠,道長伊佃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任塞祈,我火速辦了婚禮帅涂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斯议。我一直安慰自己,他們只是感情好坯临,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布看靠。 她就那樣靜靜地躺著液肌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪矩屁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音烁峭,去河邊找鬼秕铛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛鬓梅,可吹牛的內(nèi)容都是我干的谨湘。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼坊罢,長吁一口氣:“原來是場噩夢啊……” “哼擅耽!你這毒婦竟也來了乖仇?” 一聲冷哼從身側(cè)響起询兴,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤起趾,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后始衅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缭保,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡艺骂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了别伏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忧额。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡睦番,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出托嚣,到底是詐尸還是另有隱情,我是刑警寧澤兢哭,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布夫嗓,位于F島的核電站啤月,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏谎仲。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一夹姥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧轻抱,春花似錦旦部、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至醋虏,卻和暖如春哮翘,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背粘舟。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工佩研, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霞揉,地道東北人适秩。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像骤公,于是被迫代替她去往敵國和親扬跋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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