美文网首页
iOS逆向工程必备的基础知识-了解iOS的根文件系统

iOS逆向工程必备的基础知识-了解iOS的根文件系统

作者: 醉看红尘这场梦 | 来源:发表于2020-03-11 18:10 被阅读0次

    可以以root身份登录到iOS之后,首先可以做的,就是浏览一下iOS的文件系统。相比在正向开发时访问的沙箱,现在,整个iOS都暴露在了我们眼前。因此,在这一节里,我们:

    • 安装一些和文件访问相关的工具;
    • 了解一些最常用的iOS系统目录;

    和文件访问相关的工具

    为了可以在Mac和iOS上,方便的访问iOS文件系统,我们需要安装一些工具,先来看iOS的部分。

    iOS

    iOS上的工具,都是通过Cydia安装的。第一个叫做Apple File Conduit 2

    image

    它不是直接拿来用的,而是必须安装它,稍后我们安装在Mac上的文件浏览工具才能访问到越狱后的整个iOS文件系统。

    第二个,是iFile,这也是个老牌工具了。通过它,我们可以直接在iOS上浏览文件系统,临时要查看或者修改个文件,用起来就很方便:

    image

    Mac

    然后,是Mac的部分。这里,我们只按装一个叫做iFunbox的工具就好了。

    安装完成之后,通过USB把iOS连接到Mac,就可以在iFunbox中看到这个设备了:

    image

    这时,在Raw File System中就可以访问到iOS的系统根目录。并且,通过工具栏上的Copy From MacCopy 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的符号连接,其中存放的是系统脚本以及应用程序的配置文件;
    image
    • /lib:中存放的是系统的各种库文件,但iOS中这个目录是空的;
    • /mnt:中存放的是文件系统当前mount的目录,同样,iOS中是空的;
    • /sbin:中存放的是和系统基础功能相关的二进制程序,例如:ifconfig / reboot等。大家可以在这里找到应用程序的完整列表;
    • /tmp:在iOS中,这是一个指向/private/var/tmp的符号连接,顾名思义,这就是系统级的临时文件目录。:
    image
    • /usr这显然就是一个和用户有关的目录。例如:/usr/bin包含了不在/bin/sbin中的用户常用工具;/usr/lib包含了程序需要加载的库文件等。大家可以在这里找到关于这个目录的完整规范;
    • /var:在iOS中,这是一个指向/private/var的符号连接,这个目录主要用于存放应用程序生成数据以及日志;
    image

    以上,就是iOS中和类UNIX操作系统通用的目录,它们大多和系统底层的功能相关。大家没必要完全记住它们,对这些目录的功能有个印象,看到它们不觉得陌生也就可以了。

    iOS的特有目录

    接下来,我们看一些iOS独有的目录,和刚才的通用目录相比,这些目录有个特点,都是用大写字母开头的。在接下来的内容里,我们更多会和这部分内容打交道。

    • /Applications:可以看到,它也是一个符号连接,指向的位置里,存放了所有的系统App以及我们通过Cydia安装的App。也就是说,这里的App都是具有系统操作权限的,下一节我们讲到用户权限的问题时,再来讨论这个话题;
    image
    • /Developer:这个目录的内容默认为空,一旦我们把iOS设备用于Xcode真机调试,Xcode就会在其中创建一些目录,其中包含了调试需要的工具以及数据;
    image
    • /Library:这个目录的内容很杂,包含的主要是一些系统数据,例如:壁纸、铃声以及录音等。其中比较重要的一个目录是/Library/MobileSubstrate。大家要记住这个目录,所有基于CydiaSubstrate的插件,都放在这个目录里。在后面的内容中,我们会讲到相关的内容;
    • /System:这个目录下只有一个子目录Library,它是iOS中最重要的目录之一;
    • /System/Library:这里存放的是各种系统功能组件:
    image

    而在/System/Library中,有三个目录是我们应该重点关注的:

    • /System/Library/Frameworks:这里存放的就是我们在正向开发时,使用的各种系统库文件;
    image
    • /System/Library/PrivateFrameworks:这里存放的,是iOS的私有API程序库,我们在下图中列举的部分,实际大家自己在设备中查看的时候就会发现,私有程序库比开放程序库的数量多多了:
    image
    • /System/Library/CoreServices:这里存放着iOS的一些核心任务程序。其中,我们最先会“把玩”的,就是箭头指的SpringBoard.app。它是iOS版本的桌面管理器,是iOS与用户交互的媒介;
    image

    了解了/System之后,我们来看最后一个目录/User,它是一个符号连接,实际指向/var/mobile

    image

    而在/var/mobile里,存放的都是和用户应用程序以及数据相关的内容:

    image

    /var/mobile有,有三个目录是我们值得关注的:

    • 第一个是/var/mobile/Containers,在它的Bundle子目录中,存放的是所有通过App Store安装的应用,这些应用的权限都是受限的:
    image
    • 第二个是/var/mobile/Media,用户的电子书、照片、下载文件、录音等数据,都在这个目录:
    image
    • 最后一个是/var/mobile/Library,这里包含了很多系统和用户的信息,例如:SMS子目录中是短信数据库;Mail子目录中是电子邮件:
    image

    相关文章

      网友评论

          本文标题:iOS逆向工程必备的基础知识-了解iOS的根文件系统

          本文链接:https://www.haomeiwen.com/subject/jxshjhtx.html