最近在看一本關於逆向工程的書籍, 因此把本身學的東西記錄起來方便之後複習,在這裏分享出來帶給須要的人.app
- /: 根目錄 斜槓表示, 全部文件和目錄在根目錄下展開.
- /bin: binary縮寫, 存放用戶級基礎功能的二進制文件.如ls ps等.
- /boot: 存放使系統成功啓動的全部文件.iOS中是空.
- /dev: device縮寫, 存放BSD設備文件.每一個文件表明系統的一塊設備或者字符設備,塊設備以塊爲單位傳輸數據, 如硬盤. 字符設備以字符爲單位傳輸數據, 如調制解調器.
- /sbin: system binaries簡寫.存放提供系統級基礎功能的二進制文件.如netstat. reboot等.
- /etc: Et Cetera簡寫, 存放系統腳本及配置文件, 如passwd. hosts等. iOS中/etc是一個符號連接, 實際指向/private/etc.
- /lib: 存放系統庫文件, 內核模塊及設備驅動等. iOS中爲空.
- /mnt: mount簡寫, 存放臨時的文件系統掛載點. iOS中爲空.
- /private/var: 存放兩個目錄, 分別是/private/etc和/private/var.
- /tmp: 臨時目錄. 在iOS 中, 它是一個符號連接, 實際指向/private/var/tmp.
- /usr: 包含大多數用戶工具和程序. 如nm. killall等. /usr/include包含全部的標準C頭文件. /usr/lib存放庫文件.
- /var: variable簡寫, 存放一些常常更改的文件, 如日誌 用戶數據 臨時文件等. 其中/var/mobile和/var/root分別存放了mobile用戶和root用戶的文件, 是重點關注的目錄
- iOS 是一個多用戶操做系統. 用戶是一個抽象的概念, 它表明對操做系統的全部權和使用權.如mobile用戶沒法調用reboot命令重啓iOS . 而root用戶能夠. 組 是用戶的一種組織方式, 一個組能夠包含多個用戶, 一個用戶能夠屬於多個組.
- iOS 中的每一個文件都有一個屬主用戶和一個屬主組, 或者說這個用戶和這個組擁有這個文件.每一個文件都有一系列權限, 簡單的說就是權限的做用決定文件的屬主用戶能作什麼.屬主組能作什麼.
- iOS 用3位(bit)表示文件的權限, 從高到低是 r(read) w(write) x(execute).
- 文件和用戶存在關係有三種:
- 此用戶是屬主用戶.
- 此用戶不是屬主用戶, 但在屬主組裏.
- 此用戶不是屬主用戶, 但也不在屬主組裏.
- /Applications: 存放全部的系統App和來自於Cydia的App, 不包括StoreApp.
- /Developer: 若是一個設備鏈接Xcode後被指定爲調試機, Xcode就會在iOS 中生成這個目錄, 其中會含有一些調試須要的工具和數據.
- /Library: 存放一些提供系統支持的數據, 其中/Libraty/MobileSubstrate下存放了全部基於CydiaSubstrate的插件.
- /System/Library: iOS 文件系統中最重要的目錄之一, 存放大量系統組件.
- /System/Library/PrivateFrameworks: 存放iOS 中的各類framework.
- /System/Library/CoreServices裏的SpringBoard.app: iOS 桌面管理器, 是用戶與系統交流的最重要中介.
- /User: 用戶目錄, 實際指向/var/mobile. 這個目錄存放大量用戶數據如: /var/mobile/Media/DCIM下存放照片. /var/mobile/Media/Recordings下存放錄音文件./var/mobile/Library/SMS下存放短信數據.
- /var/mobile/Containers: 存放storeApp.
- /var/mobile/Containers/Bundle: App的可執行文件的bundle目錄.
- /var/mobile/Containers/Data: App中的數據目錄.
Application: 就是咱們的App.ide
bundle: 不是一個文件, 而是一個按某種標準結構來組織的牡蠣, 其中包含了二進制文件及運行所需的資源. 正向開發中的App和framework都是以bundle形式存在的. 越獄中常見的PreferenceBundle能夠當作是一種依附於Settings的App.本質也是bundle.工具
info.plist: 記錄了App的基本信息.如identifier 可執行文件名 圖標文件名等.能夠經過Xcode自帶工具plutil查看.如圖: 操作系統
![]()
Iproj目錄存放的是各類本地化字符串.(.strings)插件
/Applications/ 目錄存放的是系統App和Cydia下載的App, 而/var/mobile/Containers/目錄存放的是StoreApp.調試
- 區別以下
- 數據目錄不一樣, StoreApp的數據目錄在/var/mobile/Containers/Data/下.以mobile權限運行的系統App的數據目錄在/var/mobile/下. 而root權限運行的系統App的數據目錄在/var/root/下.
- CydiaApp的安裝包格式是deb, StoreApp安裝包格式是ipa. deb是來自Debian的安裝包格式, 是Cydia做者saurik移植到iOS 中, 它的屬主用戶和屬主組通常是root和admin, 可以經過root權限運行. 而ipa是蘋果爲iOS 推出的專屬App安裝包格式, 屬主用戶和屬主組都是mobile.只能以mobile權限運行.
- 沙盒(sandbox) iOS 中的一種訪問限制機制. 有時候也會由於沙盒的存在而出現一些奇怪的問題.
在Xcode工程裏導入的各類framework連接的各類lib本質都是dylib. 能夠用file命令驗證:日誌
Cydia中的tweak都是以dylib形式工做的. ![]()
- iOS 中lib分爲static和dynamic兩種. 其中static lib在編譯階段成爲App可執行文件的一部分, 會增長可執行文件的大小. 由於App的大小變大, 啓動時須要加載的內容變多, 因此致使App變慢. 反之, dylib不會改變可執行文件大小, 當App須要用到這個dylib時, iOS 纔會把它加載進內存, 成爲App進程的一部分.
- dylib自己不是可執行文件, 不能獨立運行, 他們只能寄生在別的進程裏. 所以dylib的權限是由它寄生的那個App決定的. 同一個dylib寄生在系統App和StoreApp裏權限是不一樣的.
- daemon爲後臺運行而生, 給用戶提供了各類守護.
- daemon主要由一個可執行文件和plist文件構成. iOS 根進程launchd, 他會在開機時檢查/System/Library/LaunchDaemons和/Library/LaunchDaemons下全部格式符合規定的plist文件. 而後啓動對應的daemon. 這裏的plist文件和info.plist文件相似.
![]()