要做好取证分析工作,对取证知识的熟练和掌握必不可少。之前在【技术视界】栏目我们推出了一篇《【技术视界】Windows取证分析基础知识大全,赶快收藏!》文章,广受大家好评。

今天,我们又给大家整理了在手机取证分析中的常用知识点,包括SQLite文件分析、常用调试工具、常见痕迹信息存储路径等知识点。本文内容较多,知识点充沛扎实,值得收藏仔细阅读哦。


数字取证的关键技术和取证工具(精编手机取证分析速查手册)(1)


一、SQLite文件相关知识

01.文件结构介绍

手机数据库一般用的是SQLite,SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,SQLite的数据类型为Typelessness。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在单一的文件中,文件的magic number是“0x53514C69746520666F726D61742033”(字符串为“SQLite format 3”)如图1所示:

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(2)

图1:SQLite文件头结构图

从逻辑结构角度来看,SQLite数据库文件的最小管理单元是“页(page)”结构,页的类型有Btree页、空闲页、溢出页。页的大小是固定的,且在数据库被创建时设置,一般默认大小为1024byte,每个Btree页由四个部分构成,依次为:页头,单元指针数组,未分配空间,单元内容区,如图2:

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(3)

图2:BTree页的结构图

在数据库的使用过程中也会产生一些临时文件,包括Journal files(*.journal)和Write Ahead logs(*.wal)文件。

*.journal:主要用途是当事务要修改page时,先把未修改的page存入journal中,如果事务rollback时,就从journal中得到修改前的数据,覆盖已改的,达到事务的一致性。一般情况下,journal是一个不同于数据库文件的另一个文件,它在事务开始时创建,当事务结束时就删除;

*.wal:是一种日志模式,SQLite3.7.0 版本后引入了新的预写日志机制。每个事务执行变更时,修改数据页,同时会产生日志,这样在事务提交后,不需要将修改的脏页刷盘,只需要将事务产生的日志落盘即可返回。


02.SQLite常见的解析工具


03.SQLite分析中常用的SQL语句

SQL查询语句的常用结构

常用结构:SELECT 列名称 FROM 表名称 WHERE 列 运算符 值 ORDER BY列

注意事项:

◆SQL语句中不区分大小写

◆红色部分为SQL语句中SELECT最简结构

◆若需查询所有列,可用使用符号*取代列的名称,如:SELECT * FROM tablename


联合查询

在很多社交聊天的APP中,分析数据时我们需要从两个或更多的表中获取结果,就会用到join语句。

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(4)

1、语句结构

SELECT tabelA.column1, tabelA.column2, tabelB.column1,tabelB.column2 FROM tabelA LEFT JOIN tabelB ON tabelA.column3 = tabelB.column4


下面以查询微信数据库为例,语句编写为:

Select message.createTime,message.talker,message.content,rcontact.username,rcontact.nickname from message left join rcontact on rcontact.username = message.talker


常用函数


1、列名、表名重命名函数

SELECT m.column AS rcolumn FROM tablename AS m

2、统计函数
SELECT COUNT(*) FROM tablename;

SELECT COUNT(column) FROM tablename;


数字取证的关键技术和取证工具(精编手机取证分析速查手册)(5)

也可加入去重函数,结合使用:

SELECT COUNT(DISTINCT(column)) FROM tablename;


3、排序函数 ORDER BY

order by中asc(默认)代表升序,desc代表降序
SELECT * FROM tablename ORDER BY column ASC;


4、模糊匹配函数 LIKE

SELECT * FROM tablename WHERE column LIKE ‘%xxx%’;


时间转换

大部分智能手机的数据库中都记录有时间戳,在分析取证过程中常常需要进行时间格式的转换。


1、一般智能手机中的时间记录值是Unix时间戳

该值是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。在SQL语句中可使用datetime函数来进行转换,语句的格式为:SELECT datetime(column,'unixepoch') ;


数字取证的关键技术和取证工具(精编手机取证分析速查手册)(6)

1)如果要考虑时区的问题,可以通过datetime函数中关键字’localtime’来调整

2)如果可以确认时区信息,可以按照下面的方式直接进行调整


数字取证的关键技术和取证工具(精编手机取证分析速查手册)(7)

▲需要注意的是,上述示例中时间戳的精度均为毫秒(ms),但在一些场景中时间戳的精度为秒(s),在进行时间转换的时候不需如上例将时间戳除以1000。


2、除Unix时间戳,在智能手机中的时间戳还涉及到2种格式,分别是Mac时间戳和Chrome时间戳。

Mac时间戳是从2001年1月1日(UTC/GMT的午夜)开始所经过的秒数,Chrome时间戳是从1601年1月1日(UTC/GMT的午夜)开始所经过的微秒数,这两种时间戳要使用datetime函数,需要对时间戳进行转换。


1)Mac时间戳转换的格式

SELECT datetime(column (strftime('%s','2001-01-01')),' unixepoch ', 'localtime' ) FROM tablebname;或SELECT datetime(column 978307200,' unixepoch ', 'localtime' ) FROM tablebname;

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(8)

2)Chrome时间戳转换的格式

SELECT datetime(column/1000000 (strftime('%s','1601-01-01')),' unixepoch ', 'localtime') FROM tablebname;

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(9)

3、当前时间点的时间戳格式区分小窍门

◆UTC时间戳(精度为s)一般长度为10

◆UTC时间戳(精度为ms)一般长度为13

◆Mac时间戳一般长度为9(此时间戳一般带有小数点,该值为小数点前的位数)

◆UTC时间戳一般长度为17


04.SQLite删除数据恢复

基于 SQLite 存储结构的数据恢复方法

1、基于文件系统的恢复

依据文件系统的元信息和结构特征,进行基于文件系统的数据恢复操作,还原 SQLite 数据库,再从中提取出记录。

2、基于SQLite数据库文件结构的恢复

在手机镜像或数据库文件中找到有效数据页,再从数据页中按照记录的结构特征提取记录进行恢复。

基于 SQLite 日志的数据恢复方法

在手机镜像或数据库文件中找到有效的数据页/数据块,进行校验后再提取记录。


二、常用调试工具

01.aapt

aapt即Android Asset Packaging Tool,在SDK的build-tools目录下。该工具可以查看,创建, 更新ZIP格式的文档附件(zip, jar, apk)。也可将资源文件编译成二进制文件。

1、aapt dump badging <file_path.apk>

查看apk包的packageName、versionCode、applicationLabel、launcherActivity、permission等各种详细信息

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(10)

2、aapt dump permissions <file_path.apk>

查看apk请求的权限

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(11)

02.adb command

借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作。


常用的adb指令集

adb devices #打开USB调试输入命令连接

adb –s deviceid <command> #如果有多个设备连接,需要访问某一设备时执行指令

adb install -r xxx.apk #强制安装某个apk到手机

adb uninstall [packagename] #卸载某个应用

adb uninstall -k [packagename] #不删除程序运行所产生的数据和缓存目录(如软件的数据库文件)

adb pull androidpath PCpath #从手机传送文件到电脑上

adb push PCpath androidpath #将电脑上文件传送手机上(遇到push文件出现read-only提示:尝试下列指令来进行修复此问题adb disable-verity 、 adb remount,adb root)

adb forward <local> <remote> #端口转发,local为本地端口,remote为手机端口

adb backup #备份手机数据,示例备份微信数据:adb backup -f mm.ab -noapk -shared –nosystem com.tencent.mm

adb connect ipaddress:port#利用TCP/IP协议来连接同网段远程设备

adb reboot #重启手机

adb reboot edl#进入高通的9008(edl)模式

adb reboot recovery #进入手机recovery模式

adb reboot fastboot/bootloader #进入手机fastboot/bootloader模式

adb start-server #开启adb服务

adb kill-server #关闭adb服务

adb logcat #打印log

adb logcat –v time – s Launcher > E:\log.txt #打印包含关键在Launcher以及时间的log输出到E盘的log.txt中


adb shell su 成功标志

已经root版本显示#,非root手机版本显示$


获取系统信息相关指令

adb shell dumpsys activity #打印activity栈信息(通过栈信息可以很快的定位当前界面是在哪一个Activity

adb shell dumpsys meminfo #打印内存信息

adb shell dumpsys cpuinfo #打印各个进程的cpu使用率

adb shell dumpsys window #显示键盘,窗口和它们的关系

adb shell dumpsys batteryinfo #电量信息及CPU 使用时长

adb shell dumpsys package #获取安装包信息

adb shell getprop ro.build.version.release #获取手机系统版本

adb shell getprop ro.build.version.sdk#获取手机系统api版本

adb shell dumpsys iphonesubinfo;adb shell getprop gsm.baseband.imei;adb shell service call iphonesubinfo 1 #获取手机的IMEI

adb shell getprop ro.serialno#获取手机的序列号

adb shell getprop ro.product.brand#获取手机厂家

adb shell getprop ro.product.model#获取手机型号

adb shell getprop ro.product.version #获取厂家自定内部版本号

adb shell getprop | grep product #获取手机product信息


Package Manager(pm)相关指令

1、pm list package #列出所有的应用的包名

该指令有下列参数可选择:


数字取证的关键技术和取证工具(精编手机取证分析速查手册)(12)

命令最后增加filter:过滤关键字,可以很方便地查找自己想要的应用。例如,查找三方应用中腾讯系列产品的包名、apk存放位置、安装来源:

adb shell pm list package -f -3 -i tencent


数字取证的关键技术和取证工具(精编手机取证分析速查手册)(13)


2、pm path #列出对应包名的 .apk 位置


数字取证的关键技术和取证工具(精编手机取证分析速查手册)(14)


3、pm get-install-location #获取当前设置的应用安装路径,其中:


4、pm install xxx.apk 安装应用


Activity Manager (am)相关指令


1、adb shell am start [options] <INTENT> #启动一个activity

例如启动照相机可使用:adb shell am start -n com.android.camera/.Camera


该指令还可以启动应用后执行一些功能,比如启动拨号器并拨打10086

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(15)

打开浏览器并访问“www.baidu.com”

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(16)

当启动不存在的应用时,出现以下情况

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(17)

2、adb shell am startservice [options] <INTENT>:#启动一个service

如adb shell am startservice -n com.lt.test/.MyService


3、adb shell am force-stop com.tencent.mm #强制关闭一个应用程序


input 相关指令

adb shell input text xxxxx #发送文本内容,但不能发送中文

adb shell input keyevent keycode#发送约定的按键事件,常见的keycode请见附录A

adb shell input tap x y#对屏幕发送一个触摸事件,触摸的坐标为(x,y)

adb shell input swipe x1 y1 x2 y2 duration#向设备发送一个滑动指令,从坐标(x1,y1)滑动到(x2,y2),且滑动时长为duration(ms)


find 相关指令

find 搜索路径 [选项] 搜索内容

find . -name "*. apk " #将目前目录及其子目录下所有后缀名名是 apk 的文件列出来

find /data -name filename.db #查找/data 下指定文件名

find / -ctime -20 #将根目录下所有最近 20 天内更新过的文件列出

find /var/log -type f -mtime 7 #查找/var/log目录中更改时间在7日以前的普通文件(find指令使用方式较多,本文就不再赘述,根据使用需要可执行查找)


其他常用指令

adb shell uiautomator dump /sdcard/ui.xml #获取页面的控件信息保存到/sdcard/ui.xml

adb shell screencap -p /sdcard/app.png #获取屏幕截图保存到/sdcard/app.png

adb shell svc power stayon true #保持常亮

adb shell ps |find "uiautomator" #查找名为“uiautomator”的进程号


常用fastboot指令

fastboot oem lock-state info #华为获取bl锁状态

fastboot oem get-build-number #华为获取当前固件版本

adb reboot edl ;fastboot oem edl ;fastboot reboot emergency #进入高通的9008(edl)模式


Android设备常用的其他命令

操作Android 设备常用到的其他命令,这里只简单列出,不做详细介绍!常用其他命令如下:

cat、cd、chmod、cp、date、df、du、grep、kill、ln、ls、lsof、netstat、rm、rmdir、top、touch、重定向符号 ">" ">>"、管道 "|"


03.libimobiledevice

libimobiledevice 是一个跨平台的软件库,支持 iPhone, iPod Touch, iPad and Apple TV 等设备的通讯协议。不依赖任何已有的私有库,不需要越狱。应用软件可以通过这个开发包轻松访问设备的文件系统、获取设备信息,备份和恢复设备,管理 SpringBoard 图标,管理已安装应用,获取通讯录、日程、备注和书签等信息,使用 libgpod 同步音乐和视频。该库支持MacOS和Linux平台。


idevice_id -l # 显示当前所连接的设备[udid],包括 usb、WiFi 连接

instruments -s devices # 列出设备包括模拟器、真机及 mac 电脑本身

ideviceinstaller -u [udid] -i [xxx.ipa] # 给指定连接的设备安装应用

ideviceinfo -u [udid] # 指定设备,获取设备信息

ideviceinfo -u [udid] -k DeviceName # 指定设备,获取设备名称:iPhone6s

ideviceinfo -u [udid] -k ProductVersion # 指定设备,获取设备版本:10.3.1

ideviceinfo -u [udid] -k ProductType # 指定设备,获取设备类型:iPhone8,1

ideviceinfo -u [udid] -k ProductName # 指定设备,获取设备系统名称:iPhone OS


指令还包括:idevicebackup,idevicecrashreport,idevicedate,ideviceenterrecovery,ideviceimagemounter,idevicename,idevicenotificationproxy,idevicepair,ideviceprovision,idevicescreenshot,idevicesyslog等。


三、常见痕迹信息

1、常见APP的用户数据文件保存路径


数字取证的关键技术和取证工具(精编手机取证分析速查手册)(18)

2、常见APP包名

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(19)

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(20)

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(21)

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(22)



本期投稿:朱大师

本期编辑:源妹

参考资料:https://digital-forensics.sans.org/media/DFIR-Smartphone-Forensics-Poster.pdf


技术干货,在线浏览

效率源在线技术干货来啦!效率源微信公众号定期精选近年最新最实用的技术文章30篇,内容涵盖手机取证、数据库取证、网络取证、Windows取证、AI视频真假鉴别等一系列电子数据取证实战知识,欢迎查阅!


获取途径:

1、关注效率源公众号,点击效率源公众号上菜单栏【关于我们】,选择【精选干货】即可进入技术盛宴。

数字取证的关键技术和取证工具(精编手机取证分析速查手册)(23)

2、进入页面,效率源精选技术干货统统都在这里啦。


数字取证的关键技术和取证工具(精编手机取证分析速查手册)(24)

,