3.4 数据存储方式

iPhone上的数据以很多方式进行存储。下面的小节涵盖了每一个数据存储的形式以供审查者了解潜在的证据如何定位或恢复。
内部存储;
SQLite 数据库文件;
属性列表;
网络;
其他。

3.4.1 内部存储

大多数的码分多址(CDMA)设备都有SD卡插槽,但是iPhone不一样,它没有任何形式的外部存储器(除了SIM卡之外)。iPhone中所有的数据都存储在内部NAND闪存中。本章后面的3.7.3节中提到的slice 2(或者称为rdisk0s2)存储了这些用户数据文件,设备的物理获取方法就是映像这部分数据。下面列出了此区域所存储的用户数据的顶层文件和目录。第6章的大部分内容集中在这些主要的目录和文件系统的其他部分。

由于所有的数据都被存储在设备内部,用从设备中获取已分配和未分配数据的方式来映像iPhone,在审查调查中是至关重要的一个手段。因为恢复已删除的短信、图片或视频通常会比较麻烦,在这种情况下,我们对用户数据分区(rdisk0s2)进行物理取证就可以轻松完成。

3.4.2 SQLite 数据库文件

SQLite数据库是常见的数据存储类型之一,受到移动应用程序开发者的广泛应用。数据库用于结构化数据存储,在多数移动系统和传统操作系统中,SQLite是较常见的数据库格式。
SQLite如此受欢迎有几个原因。首先,比较重要的一点是,它的整个代码基础质量很高,开源,并且发布在公开领域。它的文件格式和程序非常简洁,所包含的重要功能只需要不到几百KB的内存。与那些传统的关系数据库管理系统(如Oracle、MySQL和微软的SQL Server)不一样,SQLite是存储在单一磁盘文件中的一个完整的数据库。
任何应用程序都需要以一种有效的方式来存储和恢复数据,为了达到此目的,开发人员通常都会创建自己的私有文件格式;然而,现在大多数开发人员都转而使用SQLite,因为它免费、开源、质量好并且效率高。甚至在系统崩溃后,SQLite事务处理仍然可用。
Apple开发人员在iPhone开发中大量运用SQLite数据库进行数据存储。许多常见的系统默认应用程序都以这种格式存储,比如通讯录、日历、备忘录、短信、图片、语音信箱等。这些文件中的数据分散在各个真实的数据表中。图3-2是在Mac系统上打开的,展示了SQLite数据库中SMS SQLite的数据库结构。该图中列出了所有表,处于选中状态的是Message表。

SQLite文件中的信息也可以通过命令行来恢复。在Linux Ubuntu工作站上,可以查看和修改数据库文件。使用以下命令行来打开SMS.db文件(SQLite版本3):

一旦打开了文件,就可以用各种命令来恢复数据。例如,下面的命令用于列出此数据库中的所有表。

命令schema可查看到message表的表结构。另外,通过schema命令可以显示SQLite中的数据库建立语言。

用schema查看message表,这是了解数据表各列和列数据类型的其中一种方法。另一种查看这些信息的方式是使用前面小节提到的SQLite数据库浏览器。此软件是一个免费、开源的工具,它用于创建、设计和编辑支持SQLite的数据库文件。它可以在Mac、Linux和Windows平台上使用,且可在http://sqlitebrower.sourceforge.net下载。其他SQLite数据库的查询工具也可以在以下地址下载:
http://www.sqlite.org/cvstrac/wiki?p=ManagermentTools
由于在SQLite文件中能够发现的iPhone数据量很大,审查者应该将它作为重点了解,因为此数据库文件对取证审查有很大影响。第6章讲述了从这些文件恢复数据的详细过程。

3.4.3 属性列表

应用程序可使用属性列表存储、组织和访问各种iOS和Mac OS X设备上的数据类型。通常我们也称之为“plist”,这些文件由三个类的层次结构组成,所有节点显示在一个“列表”中。这三个类由以下内容组成:Cocoa Foundation、Core Foundation和XML。当属性列表以XML格式创建时,应用程序就能读取它的内容,同时可将XML属性转化为应用于Cocoa Foundation和Core Foundation的对象(Apple Inc, 2010)。XML格式的属性列表,在Mac系统上可用TextWrangler打开,内容类似于下面所展示的文本信息。此信息是com.apple.Maps.plist文件的一部分,在其中,我们可以看到经纬度坐标,其他未展示数据也很容易识别。

属性列表能以XML格式或二进制格式(二进制格式被Cocoa类操作系统层使用)存储。为了降低文件的大小,并使应用程序更高效地访问数据,Apple开始以二进制格式存储预置文件。它的高效表现在,比如,文件中重复的值仅需存储一次,且后续需要时可在文件中引用。同时,数据以字节形式存储而不是字符串。而对于二进制plist文件(或者bplists)如何能降低属性列表的大小只有很少的例子(Caithness, 2010)。
如果属性文件是XML格式,可以用任何标准的文本编辑器查看此文件。如果以二进制形式存储(本质上来说这是XML plist更简洁的版本),就必须用能够进行ASCII码转换的应用程序才可打开。Plutil,是“property list utility”(属性列表分析)的应用程序之一。当工具读取的是属性列表文件时,它可将plist文件进行二进制和文本格式转换。它还能扫描属性列表文件并检查该文件是否符合XML语法。plutil是一个纯粹的命令行驱动工具,它可以运行在Windows、Linux或者Mac OS X平台上(PERL,2008)。默认情况下,plutil安装在Mac的/usr/bin/plutil目录下。你也可通过Internet下载Windows和Linux版本的plutil软件。二进制plist文件在转换之前是不可读的,只能看到一些“bplist00”,后面跟着任意数量的不可辨识字符。
使用plutil工具下面的命令行,可将二进制plist文件转换成ASCII格式:

运行下面命令,可将XML格式转换成二进制格式:

这两条命令没有任何的输出,当用户尝试打开文件时,文件的格式已根据运行的命令转换成二进制格式或XML格式了。另一个可用于属性列表文件的有用选项是“-lint”。在命令行中加入这个选项,用户可以查看plist文件是否存在语法错误:

属性列表中的数据有不同的类型,包括字符、数字、二进制数据、日期以及布尔值。属性列表文件由三个类的数据组成,因此这些数据必须使用三种不同的方法表示。不同的数据类型以及给每个类的表示方法如表3-1所示(Apple Inc., 2010)。

特别是在iPhone中,设备中的应用程序通常通过属性列表来呈现给用户一些选项。尤其是像Safari Web历史记录和书签、YouTube数据、Favorites(收藏)以及很多个性化文件都存储在属性列表中。属性列表的使用简化了应用程序的开发。程序员能够使用这些配置文件来修改应用程序的特性和功能。简单地修改plist文件并且将其更新到设备上就可以修改应用程序。
关于二进制和ASCII格式的plist文件的更多细节,可参考CCL Forensics中描述的“数字取证中的属性列表”。这篇文档包含了属性列表的历史由来,XML和二进制格式的结构,这两种格式相互转换的算法,以及如何分割和解析属性列表文件及其内容。

3.4.4 网络

网络提供给开发者的另一个选择是将数据存储在“云”中,而不是将数据直接存储在设备本身。起初,只有很少的应用程序会利用网络来存储,然而,随着设备和应用程序的成熟,网络存储已经得到充分应用。iTunes应用商店中的许多应用程序都允许文件共享和网络访问,例如My Network Folders、Air Sharing、QMobile和Dropbox。这些应用程序以几种方式运用网络存储。一种方式是允许设备通过Web浏览器来上传和下载已存储文件。另一个方式是将设备连接到计算机,将它作为一个驱动器挂载,然后复制文件到设备或从设备复制文件。例如文件共享应用Dropbox,它已经成为广受欢迎的文件共享网站,这个网站提供iOS、Blackberry以及Android设备的移动应用程序。Dropbox的最新版本是1.3版本,该版本于2010年10月10日更新,已获得超过1100个好评。在安装和使用之后,所有用户活动都存储在“Applications”文件夹。关于这个特别应用程序的更多分析细节参见第6章。

《iOS取证实战:调查、分析与移动安全》一3.4 数据存储方式相关推荐

  1. 黑客攻防技术宝典Web实战篇第2版—第9章 攻击数据存储区

    9.1 注入解释型语言 1.解释型语言是一种在运动时有一个运动时组件解释语言代码并执行其中包含的指令的语言. 2.编译型语言:它的代码在生成时候转换成机器指令,然后在运行时直接由使用该语言的计算机处理 ...

  2. IOS的四种数据存储方式及优劣

    IOS有四种经常使用数据存储方式: 第一种方法:用NSUserDefaults存储配置信息 NSUserDefaults被设计用来存储设备和应用的配置信息.它通过一个工厂方法返回默认的.也是最经常使用 ...

  3. ios应用数据存储方式(偏好设置)

    iOS开发UI篇-ios应用数据存储方式(偏好设置) 一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用 ...

  4. 《iOS取证实战:调查、分析与移动安全》一1.3 取证审查方法

    1.3 取证审查方法 与任何取证研究一样,这里提供几种方法用于信息获取和分析.无论用任何方式进行信息获取都不能修改源信息,这是信息获取的关键,也可以说是最重要的一点.如果在一些实时系统或移动设备上获取 ...

  5. 《iOS取证实战:调查、分析与移动安全》一2.5 与iTunes的交互

    2.5 与iTunes的交互 用户可通过iTunes提供的各种功能来管理iPhone设备上的文件.应用程序.软件版本等.下面将讨论iTunes的主要特性. 2.5.1 设备同步 当iPhone连接到i ...

  6. ios应用数据存储方式(偏好设置)-转

    一.简单介绍  1.很多ios应用都支持偏好设置,比如保存用户名,密码,字体大小等设置,ios提供了一套标准的解决方案来为应用加入偏好设置功能.  2.每个应用都有个NSUserDefaults实例, ...

  7. iOS开发UI篇—ios应用数据存储方式(偏好设置)

    一.简单介绍 很多iOS应用都支持偏好设置,比如保存用户名.密码.字体大小等设置,iOS提供了一套标准的解决方案来为应用加入偏好设置功能 每个应用都有个NSUserDefaults实例,通过它来存取偏 ...

  8. 《iOS取证实战:调查、分析与移动安全》一2.4 安全

    2.4 安全 各种iPhone设置用来保护用户设备和数据不被非法侵入,其中一些设置是非默认的.此外,某些功能或定制应用程序不像看上去那么安全,这使得用户对安全产生错觉. 2.4.1 设备设置 iPho ...

  9. R语言实战-如何分析QQ群记录1-格式化数据

    先对分析进行简单构思: 1.搜集并格式化数据 a.搜集QQ群记录-从QQ导出txt文档,筛选出需要统计的QQ群记录信息. b.导入QQ群记录信息,根据\n换行符读取每一行的信息. c.逐行读取,利用正 ...

最新文章

  1. 查看mysql是否内存中读取数据_MySQL中的内存临时表
  2. 自定义异常最佳实践_播放,自定义和组织媒体的最佳文章
  3. (转)如何查看java本地方法
  4. php的excel源码下载,PHPExcel-5 - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...
  5. nginx配置:支持phpfastcgi,nginx和php-cgi通信,部分nginx常量解释
  6. 网络-HTTP请求跨域访问控制
  7. Mac os 下的文件权限管理
  8. linux内核添加模块,linux中添加内核模块
  9. SpaceBase – 基于 Sass 的响应式 CSS 框架
  10. Android 自定义一个简版的取色器ColorPicker
  11. Java实战项目,附带源码+视频教程,收藏!
  12. 嵌入式开发之DSP学习
  13. win10计算机网络共享设置密码,Win10使用技巧:给共享文件夹添加密码
  14. 手写java_JAVA实现简单手写识别
  15. Win10 环境下 Mingw-w64,CMake,CLion 安装及配置 C/C++ 和 OpenCV 运行环境
  16. 药物研发统计师的一天(试验设计篇)
  17. 软件测试 | 测试开发 | 相似图像的检测方法
  18. 淘宝自动刷喵币靠这一个脚本就够了
  19. ChatGPT - 提示词
  20. 虚拟机redis连接不上

热门文章

  1. 手写识别python_Python徒手实现识别手写数字—图像识别算法(K最近邻)
  2. 公司--ajax获取数据
  3. putchar(c1)在C语言中表示,C语言中的getchar和putchar详解
  4. 说一下你对多态的理解?_掌握了多态的特性,写英雄联盟的代码更少啦!
  5. mysql写放大,canvas实现图片根据滑块放大缩小效果
  6. 2021年春季学期-信号与系统-第五次作业参考答案-第五小题
  7. 如何在MARKDOWN编辑器设置表格的宽度?
  8. 磁悬浮地球仪控制初步测试
  9. 英飞凌单片机TC264实战攻略
  10. MAC中 jd-gui 下载java反编译的工具及安装