Skip to main content

手机取证

(移动终端)

2024-12-13 、2024-12-21~2024-12-22

author:mumuzi

主要是为取证比赛所写,因此绝大部分是直接拿取证软件进行的讲解,并不会深入讲解每一个文件、数据库需要如何去解密,文章的最后我会分享我平常做手机取证的流程,然后内容写的比较少比较简单。

数据固定:当前手机的数据固定,对于一般的安卓手机,需要使用取证软件获取到手机的系统权限(ROOT)后才能读取到/data等一些文件夹下的内容,而对于鸿蒙系统最近各大厂商都在对其结构和破解密码等操作进行研究,目前已经取得一定的成绩。由于这一步通常都是软件一把梭,因此这里不另外讲解。

以下是数据固定提取后进行分析,需要注意的是,使用不同的取证软件进行固定的时候,固定下来的目录形式并不是相同的,大多数都是按照自己的特殊形式进行的固定,而不是按照Android的目录结构进行的,例如盘古石和弘连。

数据分析——安卓

目录结构解析

/data目录:存放的应用的数据,包括数据库、配置项、缓存等,需要ROOT权限。

/sdcard/storage/emulated/0:存放用户文件的公共目录,如图片、音乐、下载(Pictures、Music、Downloads)等子目录。

/cache/data/cache:前者就是用于存储临时文件的目录,后者是/data 下专门存放缓存文件的子目录。这里的文件主要用于存储应用的缓存数据。

/system:储存系统文件,包含系统库、框架等,需要ROOT权限才能修改。

基本信息解析

做题的时候,只需要把手机镜像文件加载到软件即可,例如火眼证据分析软件,点击添加检材后,如果镜像是.tar、.zip、.E01等手机镜像,是可以直接使用镜像文件进行加载的。但是如果打包的内容有嵌套或其他文件,直接加载无法被解析,建议解压后选择文件集合进行加载。

image-20241214095508484

如果使用的是盘古石手机取证分析系统,那么在加载的时候必须要选择正确提取方式,盘古石有一个缺点就是如果选择错误的提取方式会什么东西都提不出来,但是并不代表这个镜像无法被加载,只是需要切换其他的提取方式,注意即可。

image-20241214095654712

在使用软件进行解析之后,就能看到所有能解析出来的基本信息。

image-20241214100003531

当然我们也可以手动进行解析,这个主要就是记住文件所在的位置,例如WIFI密码文件就存储在data/misc/wifi/

基本系统软件

基本系统软件就是我们常用的短信、通讯录、相册等,他们数据存放的位置也和正常的文件一样都是在自己所在包名下的。

通讯录

例如一般的通讯录数据存放在com.android.providers.contacts下的contacts2.db里。其中里面的contacts表是联系人基本信息、raw_contacts是原始的条目内容、data是具体数据、calls是拨打接听记录等。

短信

还有比如短信存放在com.android.providers.telephony,当然在不同的系统下也可能在例如com.android.mms下,我们以前者为例,能在database目录下找到一个mmssms.db文件,里面就存放的短信的相关数据。

相册

相册就不同了,毕竟是图片,如果都写在数据库里那读取解析的时候又要花费点功夫,所以相册的图片通常就保存在/sdcard/DCIM下(也就是拍摄的照片)或者/sdcard/Pictures/Screenshots/(截图)等目录下,其他的就需要自己去寻找了,不同软件可能会使用不同的目录。

当然,对于手机来说其实不推荐在做题的时候自己去寻找每个数据的位置,建议使用取证软件进行分析,例如下面那张图的基本信息里面就会有短信、相册、通讯录、通话记录等信息。

image-20241214101628235

已安装的软件

在做题的时候,我们可以使用取证软件来找到非预装的软件(也就是用户安装的软件),以便我们进行分析。

image-20241214101838530

数据存放及安装包

像这里我们可以看到每个名称旁边都有个包名,而包名所在的/data/data/{包名}目录就是软件的存储目录。而已经安装的软件他也会存放一个安装包在数据下,通常在/data/app下,例如/data/app/com.example.app-1/base.apk,或者去年龙信的/data/app/~~bHUuRhDnXQeY4lr91PUg_Q==/lx.tiantian.com-xNCYppevFdsIGg_NlIP03A==/base.apk,当然这些安装包同时也可能在其他位置藏着的,在做题的时候可以使用索引搜索来搜索.apk文件来寻找。

仿真

通常在做题的时候,肯定是要翻不常见文件的数据库的,例如一个不常见的投资软件,题目问其钱包账号是多少/嫌疑人有多少个钱包,我们就需要找到/data/data/{钱包的包名}/databases/{名字}.db(或者没有.db)文件来进行查看。

但是这里面临一个问题是,如果这个软件的数据库内容是加密的,并且加密方式比较复杂,如果是去静态分析APK再去解密会非常麻烦,如果是去frida动态找到解密函数,那也非常麻烦,所以这里就有一种简单的方法就是仿真。

仿真不只是把软件拖进模拟器里,而是把软件拖进去的同时把data文件也拖进去。

首先我们导出这个包名文件

image-20241214102937648

image-20241214102948575

导出之后他是长这样的

image-20241214103020902

然后我们找到这个包名对应的APP,将其拖入模拟器进行安装(不要打开刚安装的软件),安装好之后以下是两种方式把数据导入,一种adb,一种是用雷电自带的文件管理。

首先我们使用adb

image-20241214103345427

会发现在安装完这个软件后会发现多了个这个包名,我们先删掉

image-20241214103451279

然后我们再mkdir com.freenotes.freenotes

然后我们把刚刚导出的包名放在桌面上,使用命令adb push /c/Users/Administrator/Desktop/com.freenotes.freenotes /data/data

为什么要删了之后又mkdir呢,这个,有点抽象,有时候会遇到有时候不会,总之就是权限问题:

失败:

image-20241214103953306

成功:

image-20241214104002244

成功之后再次打开我们的软件,就能看到数据已经导入了

image-20241214104027282

image-20241214104036532

第二种方法比较简单,是使用自带的文件管理

image-20241214104101396

我们先打开电脑文件夹,把包名文件夹存放进来

然后打开安卓文件夹,删除掉/data/data下的对应包名

image-20241214104155011

然后回到共享目录,勾选上传入的包名

image-20241214104214612

再到/data/data下,点击粘贴即可

image-20241214104239967

社交软件

社交软件,分为常见的和非常见的。

常见(微信为例)

常见的QQ、微信,说实在的,强烈建议就直接用取证软件进行解析,手工解析EnMicroMsg.dbFTS5IndexMicroMsg_encrypt.db等文件还是比较麻烦,有插件、有轮子,咱就用(),目前各大厂商解析的还是挺到位的,包括聊天记录、好友记录、公众号、文件传输、缓存碎片、索引库。

image-20241214104815613

image-20241214104953051

这里着重强调刚刚提到的EnMicroMsgFTS5IndexMicroMsg_encrypt.db

EnMicroMsg.db中产生的每一个聊天记录,都会在FTS5IndexMicroMsg_encrypt.db创建一个索引。有些时候题目会问删除了几条记录,就可以通过FTS5IndexMicroMsg_encrypt.db进行判断。

非常见

非常见的比如默往(比赛中倒是挺常见的),这种就是按照已安装的软件部分去处理。

找到对应包名,查看databases文件夹下和聊天记录有关的数据库。一般来说都能直接看到,不过还有一种就是数据内容被加密了(比如AES),这种情况下可以使用仿真,如果仿真显示要登录啥的,我们就可以使用jadx来对APK进行逆向分析,找到加密算法与秘钥值,使用cyberchef先简单进行解密,如果能正常解密至少说明路没走错,然后再使用编程软件将整个加密的message列进行解密写入表格文件中。

浏览器

浏览器的存储位置都大同小异(这里指的是不同类型的浏览器,比如QQ浏览器、搜狗浏览器等),重点内容几乎都在数据库里

比如说Chrome浏览器:

历史记录:com.android.chrome/app_chrome/Default/Historycom.android.chrome/databases/History

下载:com.android.chrome/app_chrome/Downloadscom.android.chrome/files/Downloads

Cookie:/data/data/com.android.chrome/app_chrome/Default/Cookies /data/data/com.android.chrome/app_chrome/Default/Cache

再比如说自带的浏览器:

历史记录:com.android.browser/databases/browser2.db

下载缓存:com.android.providers.downloads/databases/downloads.db

搜索记录:com.android.browser/databases/browser2.db

不过账号信息位置在shared_prefs

不过firefox可不一样,firefox的存储跟电脑的比较类似,重点内容都在org.mozilla.firefox\files\mozilla\{profile}.default\

cookie:org.mozilla.firefox\files\mozilla\{profile}.default\cookie.sqlite

历史记录:/data/data/org.mozilla.firefox/files/mozilla/{profile}/places.sqlite

至于保存的密码,不同的软件可能写的不一样,但是大多都是有自己的加密的,这里推荐仿真。

钱包软件

imtoken

常见的钱包软件,比如考的挺多次的imtoken。这一块千万别相信火眼跑出来的结果,几乎就没有正确的,每次转账数量、余额这些都是错的,这边推荐仿真,而且尤其注意必须要断网,如果不断网仿真会导致题目当时的数据被覆盖掉。

如果用手翻,可以看看/data/data/org.imtoken.wallet/databases//data/data/org.imtoken.wallet/files/以及缓存文件/data/data/org.imtoken.wallet/cache/

metamask

然后就是出现频率还算不低的metamask,他的重点数据都在persist-root文件里面,位置是io.metamask\files\persistStore\persist-root,找到该文件后搜索engine

image-20241221220059932

如果要问钱包导入时间,那就需要搜索importTime

image-20241221220147778

嵌套证据

嵌套证据这块吧,推荐还是用火眼分析的时候一并找到这个文件,然后把这个文件拖出来。

通常来说,会给VMOS或者手机备份文件,当然也有可能传输了一个夜神模拟器的文件,再或者可能会传输一个VC容器。

如果是VMOS、手机备份、夜神模拟器,我们将其作为证据直接分析即可,有的人可能不知道怎么直接作为证据,如下图,选择新检材。

image-20241221220509274

APK逆向分析

放在APK逆向版块进行讲解,主要使用jadx,有需要搭配frida。

数据分析——iTunes备份(IOS)

基本信息info.plist

我们拿到的文件通常是这样的文件夹结构:

image-20241221220813077

其中 info.plist能和manifest.plist能解析许多数据

例如我们从info.plist解析:

UDID:搜索Unique IdentifierDeviceID

已安装的应用:Installed Applications

设备名称:Device Name

系统版本:Product Version

ICCID:搜索ICCID或找到包下的数据库Wireless/Library/Databases/CellularUsage.dbsubscriber_info中的subscriber_id字段

image-20241221221419692

manifest.plist

对于manifest,这里只讲一个东西,那就是备份加密。

在导入火眼的时候,如果有加密,火眼会提示,在对密码不清楚的情况下,题目大概率会进行提示,例如四位数、五位数密码,要求去爆破,这个时候就需要用manifest.plist来爆破。我们使用软件passware kit。

选择手机 & 云服务(Mobile & Cloud Forensics),然后选择iphone Backup

image-20241221221838646

然后选中Manifest.plist文件,再点击run wizard

image-20241221221903963

进去后,选择other——english——Doesn't resemble an English word,然后根据提示进行选择,比如我这里提示是四位数纯数字

image-20241221222003386

image-20241221223033768

应用程序分析

苹果的应用也跟安卓的一样,都是包名

我们用一个记账软件为例,首先找到这个软件对应的包名,在info.plist搜索Installed Applications,发现第一个就是记账软件(free记账)

image-20241221222626371

image-20241221222639956

然后找到应用数据,在/App/com.maicai.freejizhang(有的取证软件可能写的是/User Apps/com.maicai.freejizhang或者AppDomain-com.maicai.freejizhang

导出来之后,我们能看到两个文件夹,分别是DocumentsLibrary,这两个文件夹是每个包名数据下面都有的,并不是这个记账软件才有的。

Documents文件夹下主要存储的是用户数据和文件,比如下载过的附件、生成过的图像等。以我们的com.maicai.freejizhang为例,下面有这些文件夹

image-20241222101120106

很明显,DB代表的是databases,我们在寻找数据的时候就大概率要在这个DB206993152文件夹下寻找。

Library存储的是配置文件、缓存文件等内容,比如这个的文件夹(这个文件夹下的plist文件中也可能有历史数据等信息哦,这个得看软件是怎么样写来存储的)

image-20241222101234873

preferences和Cookie以及这些plist文件就是其配置了,值得注意的是plist的格式有两种,一种是xml,一种的二进制的。通常IOS的都是以二进制存储的,你可以用plistlib库进行解析:

import plistlib

with open('xxxxxx.plist', 'rb') as file:
plist_data = plistlib.load(file)
print(plist_data)

其他

除此之外,还有一些东西需要提一嘴

1.apps.json

在最外层(与info.plist、manifest.plist同目录)下有个apps.json,里面存储的主要是安装的应用的元数据信息,如下图

image-20241222102013994

2.浏览器历史记录在哪

com.apple.mobilesafari/Library/Perferences/com.apple.mobilesafari.plist

3.相机拍摄的图像

CameraRoll/Media/DCIM/100APPLE下,当然有的取证软件会是CameraRollDomain/Media/DCIM/100APPLE或者/System/CameraRollDomain/Media/DCIM/100APPLE

这里小小的点名一下盘古石,有些的图像数据还有视频数据,明明是好的但是就是显示是裂开的,尤其是在分类那一栏是裂开的看不了,但是手动找到这个MOV文件位置双击打开是能正常查看的。

我的做题流程:见思维导图