iOS逆向(三)文件目錄簡介

3.iOS文件系統結構

  • 可視化方式常看iOS系統文件 ==在iOS經過Cydia安裝Apple File Conduit 2,在OS X使用iFunBox能夠查看iOS系統文件(iOS和OS X須要在通一個局域網內)==數據庫

  • 經過SSH遠程登陸iOS來查看bash

  • Filesystem Hierarchy Standard 文件系統層次化標準(如下簡稱FHS) ==FHS爲類UNIX操做系統的文件目錄結構制定了一套標準,目的是讓用戶預知文件或目錄的存放位置。UNIX操做系統的常見目錄結構以下所示。==微信

    /:根目錄,以斜槓表示,其餘全部文件和目錄在根目錄下展開。
      /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:存放兩個目錄,分別是/private/etc和/private/var。
      /tmp:臨時目錄。在iOS中,/tmp是一個符號連接,實際指向/private/var/tmp。
      /usr:包含了大多數用戶工具和程序。/usr/bin包含那些/bin和/sbin中未出現的基礎功能,如nm、killall等;/usr/include包含全部的標準C頭文件;/usr/lib存放庫文件。
      /var:"variable"的簡寫,存放一些常常更改的文件,好比日誌、用戶數據、臨時文件等。其中/var/mobile和/var/root分別存放了mobile用戶和root用戶的文件,是重點關注的目錄。
    複製代碼
  • UNIX系統文件權限簡介(UNIX一切皆文件:讀寫普通文件、目錄、設備、socket、管道、CPU信息、進程信息等)
  • 系統用3位(bit)來表示文件的權限,從高位到低位分別是r(read)權限、w(write)權限,以及x(execute)權限。文件與用戶的關係存在如下三種可能性:
  • 此用戶是屬主用戶(文件全部者的權限)
  • 此用戶不是屬主用戶,但在屬主組裏(組用戶權限)
  • 此用戶既不是屬主用戶,又不在屬主組裏(Other用戶權限)
```
1111 1111  = 2^0*1 + 2^1*1 + 2^2*1 + 2^3*1 + ...+2^7*1 = 2^8 - 1 
8421
1111  = 8+4+2+1 = 15
1011  = 8+2+1 = 11
rwx      r-x    r--
111      101    100 
全部者   屬組   其餘

用3*3位來表示一個文件的權限,若是某一位爲1,則這一位表明的權限生效,不然無效。例如,111101101表明rwxr-xr-x,即該文件的屬主用戶擁有r、w、x權限,而屬主組和其餘全部人只具備r和x權限;同時,二進制的111101101轉換成十六進制是755,也是一種常見的權限表示法。

可使用chmod 命令修改文件權限,如 chmod  755  filename
複製代碼
* iOS的獨有目錄
  ```
      /Applications:存放全部的系統App和來自於Cydia的App,但不包括StoreApp。
      /Developer:若是一臺設備鏈接Xcode後被指定爲調試用機,Xcode就會在iOS中生成這個目錄,其中會含有一些調試須要的工具和數據。
      /Library:存放一些提供系統支持的數據。其中/Library/MobileSubstrate下存放了全部基於CydiaSubstrate(原名MobileSubstrate)的插件(如:tweak編寫的插件)。
      /System/Library:iOS文件系統中最重要的目錄之一,存放大量系統組件。
      /System/Library/Frameworks和/System/Library/PrivateFrameworks:存放iOS中的各類framework
      /System/Library/CoreServices裏的SpringBoard.app:iOS桌面管理器(相似於Windows裏的explorer),是用戶與系統交流的最重要中介。
      /User:用戶目錄(其實就是mobile用戶的home目錄),實際指向/var/mobile,這個目錄裏存放大量用戶數據,好比:
      /var/mobile/Media/DCIM下存放照片;
      /var/mobile/Media/Recordings下存放錄音文件;
      /var/mobile/Library/SMS下存放短信數據庫;
      /var/mobile/Library/Mail下存放郵件數據。
      
      /var/mobile/Containers,存放StoreApp。值得注意的是,App的可執行文件在bundle與App中的數據目錄被分別存放在/var/mobile/Containers/Bundle和/var/mobile/Containers/Data這兩個不一樣目錄下。其中/var/mobile/Containers/Data是咱們經常使用的應用沙盒目錄的起始目錄:NSString *directory = NSHomeDirectory(); //獲取沙盒根目錄
  ```
* iOS應用(Store App)沙盒目錄:
- Application Bundle  包含應用可執行文件和資源文件
複製代碼

如獲取iOS上微信程序的Bundle路徑,能夠經過ps -e | grep appname
luz-iphone:/ root# ps -e | grep WeChat 1368 ?? 5:41.43 /var/mobile/Containers/Bundle/Application/749DC69A-3A8D-4B5C-9926-1220E69FC85F/WeChat.app/WeChatapp

- Application Data  包含App運行生產的數據和配置信息等
 	```
    如獲取iOS上微信程序的Date路徑,能夠經過cycript工具
    luz-iphone:~ root# cycript -p WeChat
    cy# directory = NSHomeDirectory()
    @"/var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE"
    cy# 
複製代碼
Date目錄結構以下:
```
luz-iphone:/var/mobile/Containers/Data/Application/986376B5-EF08-4CAF-81FB-CAE48D1FE4AE root# ls
Documents/  Library/  tmp/
```
複製代碼
  • Document 存放應用運行時生成的而且須要保存的數據。注:iTunes或iCloud同步設備時會備份該目錄
  • Library/Caches 存放應用運行時生成的而且須要保存的數據。iTunes或iCloud不一樣步。
  • Library/Preferences 存放偏好設置。iOS的偏好設置(settings)應用也會在該目錄查找應用的設置信息。NSUserDefaults保存在該目錄下。iTunes或iCloud同步設備時備份該目錄。
  • tmp 存放應用運行時所需的臨時數據。當某個應用沒運行時,iOS系統可能會清除該目錄下的文件。但不可依賴這種自動清除機制,應該及時手動清除。
相關文章
相關標籤/搜索