iOS逆向學習一 原理工具篇

2021-09-27 02:25:33 字數 3076 閱讀 6045

提到ios逆向,網上的文章鋪天蓋地,創作時間從2023年到2023年不等。絕大部分的工具或命令都過時了。書籍更不用說。

2.1 monkeydev 逆向整合環境

工欲善其事 必先利其器

ios後起之秀alonemonkey在舊的逆向整合環境iosopendev的基礎上,進行了公升級。變成了一款非越獄外掛程式開發整合神器:monkeydev,它提供了我們乙個像開發普通ios應用一樣簡單的開發平台。

原始碼位址

安裝和使用方法請看這裡

該平台整合了以下hook工具:

captainhook:

利用c語言構造器(attribute(constructor) ) & dyld載入原理和時機,hook目標函式. captainhook基本原理

fishhook:

facebook出品,通過動態修改mach-o(後面會提到該檔案)懶載入、非懶載入函式表指標的途徑,達到hook的功能 fishhook原理 & mach-o動態載入過程

theos:

引擎會把logos語法寫的.xm檔案,結合c語言構造器,編譯成.mm(純c++函式)檔案,載入到動態庫。

monkeydev動態庫注入原理

方法1:將dylib檔案放入dynamiclibraries目錄

比如tweak 產生的 dylib 實際會安裝到 /library/mobilesubstrate/dynamiclibraries 目錄,在這個目錄的 dylib 會被應用載入,裡面的 dylib 會有乙個 plist 檔案,標識哪些程序會載入,如圖:

方法2:修改mach-o檔案

只要我們在mach-o檔案中新增一條 loadcommand,型別為 lc_load_dylib,並將路徑指定我們的dylib即可。

方法3:設定 dyld_insert_libraries 環境變數

為什麼 dyld_insert_libraries 能夠注入呢?這是蘋果本身提供的乙個功能,我們可以看蘋果開源的 dyld 的原始碼,在 main 函式裡相關的**,判斷了 dyld_insert_libraries 環境變數,如果有的話就會載入。

// load any inserted libraries

if( senv.dyld_insert_libraries !=

null

)

2.2 ios基礎篇

a、初識 mach-o

什麼是mach-o 以及檢視工具

b、動態鏈結過程

提到mach-o就不得不提動態鏈結

因為看完這些資料,你可能會越來越懵逼,mach-o是被誰載入的呢?mach-o怎麼跟我們的函式怎麼關聯上的呢?靜態庫和動態庫的區別是什麼呢?

別急 回頭看看 fishhook原理篇 ,這些問題基本就可以解答了,

如果你還是不滿足,想要更深入的理解動態鏈結過程,請看阿里ioser 劉坤的這篇部落格

如果你想對mach-o有更深入、全面的了解,可以看看這些:

mach-o分析:解析乙個類 該篇講較基礎,作為入門比也較合適

mach-o 記憶體分布

深入剖析macho (1)

mach-o檔案格式

2.3 必要輔助工具篇

1、class-dump分析mach-o 匯出所有類的標頭檔案(非開發中的標頭檔案,它包括所有的屬性、類方法、物件方法)

同樣,這裡是它的安裝和使用說明

匯出來之後 長這樣:(建議用sublime開啟,如果你用xcode開啟該資料夾,你就會知道我這條建議有多麼感人了)

2、反彙編工具:idahopper disassembler

hopper可以試用大約20分鐘?分析比ida較快(不過也需要近半小時),但試用版不能儲存分析結果,下次開啟又要等待半小時。網上的破解版都不好用。

所以我選擇購買了ida 破解版:購買位址

當然,有錢的童鞋,還是建議支援買正版。也就¥900多。

彙編指令和二進位制機器碼是一一對應的,所以有了mach-o二進位制檔案,反彙編回彙編** 也是可行的。

至於為什麼要使用反彙編工具,看看下面的就懂了。

1、函式列表。不過看起來還不如我們class-dump匯出的標頭檔案包,別急,一旦雙擊某個函式名,就可以看到該函式的彙編**了。見下圖:

這是搜尋好友的dosearch函式,如果你覺得彙編看不太懂,想要看點能看懂的,按f5ida會幫你轉成偽**,如下圖:

乙個細節可以看出:函式位址在整個mach-o中的偏移位置。

好了,前期的工具和理論基礎,先準備這些就夠了,迫不及待的小夥伴們 你們可以開始動手試驗了,請移步:ios逆向學習二:上機除錯

iOS 菜鳥逆向學習 (一)

在這裡之前還說的是,必須有一台越獄的裝置才可以,這樣才能進行解密 必備裝置 越獄裝置 脫殼軟體 clutch 也可以是其他的 手機上安裝 安裝好之後 用終端登入手機 手機必須安裝openssh 上面的截圖就是現在的要執行的命令,第一步登入手機 輸入命令 clutch 可以看見手機上安裝的軟體 然後用...

iOS逆向學習筆記 一

1.除錯裝置 iphone 5s 因為從5s開始支援arm64 2.系統版本 ios 9.1完美越獄 1.什麼是ios jailbreak?利用ios系統的漏洞,獲取ios系統的最高許可權 root 解開之前的各種限制 合法行為 2.ios jailbreak的優點 靈活管理檔案系統,讓iphone...

IOS逆向學習 Cycipt

cycript 進入cycript語言程式設計環境 ctrl d 退出除錯環境 ctrl c 取消輸入 定義變數 var 變數名 變數值 objectivec.classes 已載入的所有oc類 檢視物件的所有成員變數 物件 遞迴列印view的所有子控制項 跟lldb一樣的函式 view.recur...