深入剖析ios系统的文件系统结构
根目录,以斜杠表示,其他所有文件和目录在根目录下展开。
❏/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/tmp。
❏/usr:包含了大多数用户工具和程序。/usr/bin包含那些/bin和/sbin中未出现的基础功能,如nm、killall等;/usr/include包含所有的标准C头文件;/usr/lib存放库文件。
❏/var:”variable”的简写,存放一些经常更改的文件,比如日志、用户数据、临时文件等。其中/var/mobile/Applications下存放了所有App Store App,是要重点关注的目录之一。上述目录中的内容多用于系统底层,逆向难度较大,作为初学者,暂时不用在其中投入太多精力。从学和练的角度出发,循序渐进,由易到难,从我们熟悉的内容开刀,效率更高。作为iOS开发者,日常操作所对应的功能模块大多来自iOS的独有目录,如下所示。
❏/Applications:存放所有的系统App和来自Cydia的App,不包括App Store App。越狱的过程把/Applications变成了一个符号链接,实际指向/var/stash/Applications,如图2-3所示。这个目录也是我们要重点关注的目录之一。
❏/Developer:/Developer相对没那么重要,它的出现完全是因为我们在Xcode连接iOS设备时选择了”Use for Development”
❏/Library:用来存放系统App的数据。其中最需要关注的是/Library/MobileSubstrate目录,因为这个目录中存放了所有基于MobileSubstrate的插件。在iOS系统中,MobileSubstrate是一个提供hook功能的基础平台,运行在这个平台上的插件通常被称为tweak。