iOS逆向-theos

安裝Homebrew

  • 利用brew安裝ldid
brew install ldid

修改環(huán)境變量

  • 編輯用戶的配置文件
$ vim ~/.bash_profile
  • 在.bash_profie文件后面加入以下2行
export THEOS=~/theos
export PATH=$THEOS/bin:$PATH
  • 讓.bash_profiel配置的環(huán)境變量立即生效
$ source ~/.bash_profile

下載theos

$ git clone --recursive https://github.com/theos/theos.git $THEOS

新建tweak項目

1. cd到一個存放代碼的文件夾喇颁,輸入nic.pl

$ cd ~/Desktop
$ nic.pl 

2. 選擇iphone/tweak所對應的編號何陆,下面是10

$ ~/Desktop  nic.pl
NIC 2.0 - New Instance Creator
------------------------------
  [1.] iphone/activator_event
  [2.] iphone/application_modern
  [3.] iphone/application_swift
  [4.] iphone/flipswitch_switch
  [5.] iphone/framework
  [6.] iphone/library
  [7.] iphone/preference_bundle_modern
  [8.] iphone/tool
  [9.] iphone/tool_swift
  [10.] iphone/tweak
  [11.] iphone/xpc_service
Choose a Template (required): 10

3. 填寫項目信息

  • Project Name (required):項目名稱
  • Package Name:項目ID(隨便寫com.test.name)
  • Author/Maintainer Name:作者
  • [iphone/tweak] MobileSubstrate Bundle filter:目標APP的Bundle Identifier,
  • [iphone/tweak] List of applications to terminate upon installation:直接敲回車
Project Name (required): my_tweak
Package Name [com.yourcompany.ting_tweak]: com.tweak.wechat
Author/Maintainer Name [Mac]:
[iphone/tweak] MobileSubstrate Bundle filter [com.apple.springboard]:com.tencent.wechat
[iphone/tweak] List of applications to terminate upon installation (space-separated, '-' for none)[SpringBoard]:
Instantiating iphone/tweak in ting_tweak/...
Done.

4. 編輯Makefile

THEOS_DEVICE_IP
THEOS_DEVICE_PORT

通過哪個IP和端口號訪問手機
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=10010
include $(THEOS)/makefiles/common.mk
TWEAK_NAME = ting_tweak
ting_tweak_FILES = Tweak.xm
include $(THEOS_MAKE_PATH)/tweak.mk
after-install::
   install.exec "killall -9 SpringBoard"

也可以把這兩個變量配置到.bash_profile

$ vim ~/.bash_profile
export THEOS_DEVICE_IP=127.0.0.1
export THEOS_DEVICE_PORT=10010
$ source ~/.bash_profile

5. 編寫代碼(Tweak.xm文件)

%hook [需要hook的目標類]
重寫方法實現(xiàn)
%end

%hook WCLoginView
- (id)initWithFrame:(struct CGRect)arg1 {
    return nil;
}
%end

類名可以通過Reveal連上手機查看
方法名可以通過class-dump導出.h文件查看
%new :添加一個新的方法
%orgi :函數(shù)原來的代碼邏輯
%ctor
%log

6. 資源文件(圖片)

  1. 在項目目錄下新建layout文件夾,對應著手機的根目錄/

7. 編譯打包安裝

  • 編譯Tweak代碼為動態(tài)庫(*.dylib)
$ make
  • 將dylib打包為deb文件
$ make package
  • 將deb文件傳送到手機上胸囱,通過Cydia安裝deb(默認會重啟SpingBoard)
    插件會安裝在/Library/MobileSubstrate/DynamicLibraries文件夾中
$ make install

小技巧:把多個命令合并,然后配置成.sh腳本

$ make clean && make && make package && make install //從前到后按順序執(zhí)行

8. 原理

1、theos的tweak并不會對APP原來的可執(zhí)行文件進行修改蚁趁,僅僅是修改了內(nèi)存中的代碼邏輯据途。
  • 當打開APP時,Cydia Substrate(Cydia 的插件)會讓APP自動去加載對應的dylib扛邑。
  • 修改APP內(nèi)存中的代碼邏輯怜浅,去執(zhí)行dylib的函數(shù)代碼。

logify.pl 注意點

  • 終端打開TestController.h所在目錄蔬崩,使用logify.pl 生成TestController.xm文件
$ logify.pl TestController.h > TestController.xm
  • 但是生成的xm文件經(jīng)常在make的時候編譯不過恶座,需要手動處理代碼
  1. 刪掉__weak
  2. 刪掉inout
  3. 協(xié)議報錯:
    1)刪掉協(xié)議
    2)聲明協(xié)議 @protocol XXTestDelegate
  4. 刪掉- (void).cxx_destruct { %log; %orig; }
  5. 刪掉HBLogDebug(@" = 0x%x", (unsigned int)r); 或者 HBLogDebug(@" = 0x%@", r);
  6. 類名報錯:
    1)替換類名為void:比如將TestModel *替換為void *
    2)聲明類信息:@class TestModel
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市沥阳,隨后出現(xiàn)的幾起案子跨琳,更是在濱河造成了極大的恐慌,老刑警劉巖桐罕,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件脉让,死亡現(xiàn)場離奇詭異,居然都是意外死亡功炮,警方通過查閱死者的電腦和手機溅潜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來薪伏,“玉大人滚澜,你說我怎么就攤上這事〖藁常” “怎么了设捐?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長塘淑。 經(jīng)常有香客問我萝招,道長,這世上最難降的妖魔是什么存捺? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任槐沼,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘母赵。我一直安慰自己逸爵,他們只是感情好,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布凹嘲。 她就那樣靜靜地躺著师倔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪周蹭。 梳的紋絲不亂的頭發(fā)上趋艘,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天,我揣著相機與錄音凶朗,去河邊找鬼瓷胧。 笑死,一個胖子當著我的面吹牛棚愤,可吹牛的內(nèi)容都是我干的搓萧。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼宛畦,長吁一口氣:“原來是場噩夢啊……” “哼瘸洛!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起次和,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤反肋,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后踏施,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體石蔗,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年畅形,在試婚紗的時候發(fā)現(xiàn)自己被綠了养距。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡日熬,死狀恐怖棍厌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碍遍,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布阳液,位于F島的核電站怕敬,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏帘皿。R本人自食惡果不足惜东跪,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧虽填,春花似錦丁恭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恶守,卻和暖如春第献,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兔港。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工庸毫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衫樊。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓飒赃,卻偏偏與公主長得像,于是被迫代替她去往敵國和親科侈。 傳聞我的和親對象是個殘疾皇子载佳,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

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