可以以root身份登录到iOS之后,首先可以做的,就是浏览一下iOS的文件系统。相比在正向开发时访问的沙箱,现在,整个iOS都暴露在了我们眼前。因此,在这一节里,我们:
- 安装一些和文件访问相关的工具;
- 了解一些最常用的iOS系统目录;
和文件访问相关的工具
为了可以在Mac和iOS上,方便的访问iOS文件系统,我们需要安装一些工具,先来看iOS的部分。
iOS
iOS上的工具,都是通过Cydia安装的。第一个叫做Apple File Conduit 2:
image它不是直接拿来用的,而是必须安装它,稍后我们安装在Mac上的文件浏览工具才能访问到越狱后的整个iOS文件系统。
第二个,是iFile,这也是个老牌工具了。通过它,我们可以直接在iOS上浏览文件系统,临时要查看或者修改个文件,用起来就很方便:
imageMac
然后,是Mac的部分。这里,我们只按装一个叫做iFunbox的工具就好了。
安装完成之后,通过USB把iOS连接到Mac,就可以在iFunbox中看到这个设备了:
image这时,在Raw File System中就可以访问到iOS的系统根目录。并且,通过工具栏上的Copy From Mac和Copy To Mac按钮,我们还可以方便的在iOS和mac OS之间传输文件。
当然,除了这种GUI的方式之外,我们还可以通过CLI工具在Mac以及iOS之间发送文件。在一些特定的场景里(例如:部署插件),它们可比GUI方便多了。
这里,最常用的一个工具就是scp
。要把Mac上的test_file上传到iOS设备的/var/root目录,我们可以执行:
scp -P 2333 test_file root@localhost:/var/root
类似的,要从iOS设备上把刚才上传的文件下载到Mac,我们可以执行:
scp -P 2333 root@localhost:/var/root/test_file .
大家一定要熟练使用scp
的这两个用法,在逆向工程中,我们会经常用到它们。
一些最常用的系统目录
安装好上面这些工具之后,就可以浏览iOS的文件系统了。我们知道,iOS也是某种类UNIX操作系统。因此,或多或少,它的文件系统,和我们熟悉的Mac或Linux是有类似之处的。大家可以在Filesystem Hierarchy Standard这里找到一份类UNIX操作系统目录划分规范,iOS当然也遵从了这个规范的约定,例如:
-
/
:表示整个操作系统的根目录; -
/bin
:存放为所有用户提供的基础二进制程序,例如ls / ps / cat
等。大家可以在这里找到完整的程序列表; -
/boot
:这里本该存放系统引导文件和内核文件,iOS中有这个目录,但是其中却并没有内容。因为iOS有自己复杂的安全启动流程; -
/dev
:这里的每一个文件,表示的都是一个block device或者character device。所谓block device,指的是以block为单位进行数据传输的设备,最典型的就是硬盘。而character device则是指以字符为单位进行数据传输的设备,例如键盘; -
/etc
:在iOS中,这是一个指向/private/etc
的符号连接,其中存放的是系统脚本以及应用程序的配置文件;
-
/lib
:中存放的是系统的各种库文件,但iOS中这个目录是空的; -
/mnt
:中存放的是文件系统当前mount的目录,同样,iOS中是空的; -
/sbin
:中存放的是和系统基础功能相关的二进制程序,例如:ifconfig / reboot
等。大家可以在这里找到应用程序的完整列表; -
/tmp
:在iOS中,这是一个指向/private/var/tmp
的符号连接,顾名思义,这就是系统级的临时文件目录。:
-
/usr
这显然就是一个和用户有关的目录。例如:/usr/bin
包含了不在/bin
和/sbin
中的用户常用工具;/usr/lib
包含了程序需要加载的库文件等。大家可以在这里找到关于这个目录的完整规范; -
/var
:在iOS中,这是一个指向/private/var
的符号连接,这个目录主要用于存放应用程序生成数据以及日志;
以上,就是iOS中和类UNIX操作系统通用的目录,它们大多和系统底层的功能相关。大家没必要完全记住它们,对这些目录的功能有个印象,看到它们不觉得陌生也就可以了。
iOS的特有目录
接下来,我们看一些iOS独有的目录,和刚才的通用目录相比,这些目录有个特点,都是用大写字母开头的。在接下来的内容里,我们更多会和这部分内容打交道。
-
/Applications
:可以看到,它也是一个符号连接,指向的位置里,存放了所有的系统App以及我们通过Cydia安装的App。也就是说,这里的App都是具有系统操作权限的,下一节我们讲到用户权限的问题时,再来讨论这个话题;
-
/Developer
:这个目录的内容默认为空,一旦我们把iOS设备用于Xcode真机调试,Xcode就会在其中创建一些目录,其中包含了调试需要的工具以及数据;
-
/Library
:这个目录的内容很杂,包含的主要是一些系统数据,例如:壁纸、铃声以及录音等。其中比较重要的一个目录是/Library/MobileSubstrate
。大家要记住这个目录,所有基于CydiaSubstrate的插件,都放在这个目录里。在后面的内容中,我们会讲到相关的内容; -
/System
:这个目录下只有一个子目录Library
,它是iOS中最重要的目录之一; -
/System/Library
:这里存放的是各种系统功能组件:
而在/System/Library
中,有三个目录是我们应该重点关注的:
-
/System/Library/Frameworks
:这里存放的就是我们在正向开发时,使用的各种系统库文件;
-
/System/Library/PrivateFrameworks
:这里存放的,是iOS的私有API程序库,我们在下图中列举的部分,实际大家自己在设备中查看的时候就会发现,私有程序库比开放程序库的数量多多了:
-
/System/Library/CoreServices
:这里存放着iOS的一些核心任务程序。其中,我们最先会“把玩”的,就是箭头指的SpringBoard.app。它是iOS版本的桌面管理器,是iOS与用户交互的媒介;
了解了/System
之后,我们来看最后一个目录/User
,它是一个符号连接,实际指向/var/mobile
:
而在/var/mobile
里,存放的都是和用户应用程序以及数据相关的内容:
在/var/mobile
有,有三个目录是我们值得关注的:
- 第一个是
/var/mobile/Containers
,在它的Bundle
子目录中,存放的是所有通过App Store安装的应用,这些应用的权限都是受限的:
- 第二个是
/var/mobile/Media
,用户的电子书、照片、下载文件、录音等数据,都在这个目录:
- 最后一个是
/var/mobile/Library
,这里包含了很多系统和用户的信息,例如:SMS
子目录中是短信数据库;Mail
子目录中是电子邮件:
网友评论