hook@2x.png
1.1 檢測工具
- Reveal
- tcpdump
- libNotifyWatch
- PonyDebugger
1.2 開發工具
- Theos - tweak
1.3 反編譯工具
- IDA
1.4 調試工具
- LLDB
1.5 查看 App 文件目錄
- iFunBox
- iExplorer
- iFile
2. 文件目錄
mac 目錄 | 解釋 |
---|---|
/ | 根目錄 |
/bin | "binary", 存放提供用戶級基礎功能的二進制文件,如 ls, pwd, ps 等 |
/dev | "device", 存放 BSD 設備文件. 每個文件代表系統的一個塊設備或字符設備.一半來說"塊設備"以塊為單位傳輸數據, 比如硬盤; 而"字符設備"以字節為單位傳輸數據, 如調制解調器. |
/sbin | "system binary", 存放提供系統級基礎功能的二進制文件, 如 netstat, reboot 等; |
/etc | "et cetera", 存放系統腳本及配置文件, 如 passwd, hosts 等, 在ios 中實際是一個符號鏈接, 實際指向 /private/etc |
/private | 存放兩個目錄, 分別是/private/etc 和 /private/var. |
/tmp | 臨時目錄.在ios 中實際是一個符號鏈接, 實際指向 /private/tmp |
/usr | 包含了大多數用戶工具和程序. /usr/bin 包含了/bin 和 /sbin中未出現的基礎功能, 比如 nm,killall 等;/usr/include包含所有的標準 C 頭文件; /usr/lib 存放庫文件. |
/var | "variable", 存放一些經常更改的文件, 比如日志, 用戶數據, 臨時文件等. 其中 /var/Mobile/Application 下存放了所有 App store App, 是要重點關注的目錄之一. |
/boot | 存放能使系統成功啟動的所有文件, 這些文件一般在內核用戶程序開始執行前得到調用. ios 此目錄為空 |
/lib | 存放系統庫文件, 內核模塊及設備驅動等. ios 此目錄為空 |
/mnt | "mount", 存放臨時的文件系統掛載點. ios 此目錄為空 |
/Application | 存放所有的系統 App 和來自 Cydia 的 App, 不包活 App Store App. 越獄過程把/ Application 變成了一個符號鏈接, 實際指向 /var/stash/Applications. |
ios 目錄 | 解釋 |
---|---|
/Developer | /Developer 相對沒有那么重要, 它的出現完全是因為我們在 Xcode 連接iOS設備選擇了 "Use for Development". |
/Library | 用來存放系統 App 的數據. 其中最需要關注的是 /Library/MobileSubstance 目錄, 因為這個目錄存放了所有基于 MobileSubstance 的插件(tweak). |
/System | 包含了大量的系統組件: ./Library/PrivateFrameworks: 存放 ios 中各種 framework; ./Library/CoreServices 里的 SpringBoard.app 就是桌面管理器, 是用戶與系統交流的最重要的中介. ./Library/PreferenceBundles 其中的各種 bundle 提供了"設置"中的絕大多數功能. |
/User | 用戶目錄, 實際指向 /var/mobile, 這個目錄里存放了大量的用戶數據, 比如: /var/mobile/Media/DCIM:照片目錄; /var/mobile/Library/SMS:短信目錄; /var/mobile/Library/Mail:郵件目錄; /var/wireless/Library/CallHistory: 通話記錄; /var/mobile/Applications, 存放的是從 app store 下載的 app. |
3. 安裝包格式
- deb
deb 格式是 Debian 系統(包含 Debian 和 Ubuntu)專屬安裝包格式, 配合 APT 軟件管理系統使用, 是當前 Linux 下非常流行的一種安裝包格式, 是由 Cydia 作者 Jay Freeman(saurik)移植到 iOS 中的.
由于 Unix 類系統對權限, 所有者, 組的要求很嚴格, 而 deb 格式安裝包又經常會涉及系統比較底層的操作, 可以獲取較高的權限, 所以從 Cydia 下載的 app 都是 deb 格式的. - ipa
ipa 格式是蘋果公司在iOS平臺上推出的專屬軟件安裝包, 在2.0固件發布后才正式投入使用, 是目前 ios 中唯一的官方安裝包格式.
ipa 文件權限很小, sandbox 限制很大, 訪問資源十分有限, 這一點早已為廣大開發人員熟知. - pxl
pxl 格式起源于 Mac 系統上的 pkg 安裝包, 在1.x 固件時代被廣泛使用, 曾經是 ios 平臺上唯一的官方安裝包格式. 現在的91手機助手等少數平臺在使用.
4. Dynamic Library & Static Library
- 動態庫 (StaticLibrary)
在一個 app 啟動時, 系統會把 App 的代碼和它所鏈接的 StaticLibrary 一起加載到分配好的內存空間中, 不過如果如果一次性加載的內容過多, 會造成 app 啟動變慢. - 動態庫 (DynamicLibrary)
動態庫相對"智能", 只有當 App 要用到這個 Library 時, 系統才把對應的動態庫加載進內存. 具體來說, 當一個 app 啟動時, ios 內核創建一個新進程, 然后把 App 的代碼加載到新進程的內存空間里; 同時內核還會啟動 Dynamic Loader(/usr/lib/dyld), 把 App 需要的動態庫加載到內存空間.
5. deamon
deamon: 進程守護者, 跟 Windows 中的 service 類似.
deamon 存在的意義就是后臺運行, 為用戶操作系統提供各種守護, 如: imagent 保障 iMessage 的正確收發, mediaserverd 處理幾乎所有音頻, 視頻, syslogd 記錄系統日志等.
iOS 系統中的 deamon 主要由一個可執行文件和一個 plist 文件構成. iOS 的根進程是 /sbin/launchd, 會在開機或接到命令時檢查 /System/Library/LaunchDeamon 和 /Library/Deamon 下所有符合格式規定的 plist 文件, 然后按需啟動對應的 daemon.這里的 plist 文件和 app 中的 Info.plist 文件功能類似, 記錄了 deamon 的基本信息. "iOS第一款電話錄音軟件 - Audio Recorder"就是通過逆向 /usr/sbin/mediaserverd 這個 deamon 實現的!!!