system: [SYSTEM]

user: 3. Android取证中地理位置信息及其提取 Android手机用户在日常使用中产生了大量的地理位置信息，主要包括移动通信的基站信息，移动操作系统记录的位置信息，照片视频元数据中的附加信息，各类地图、打车、旅游、社交等移动应用的定位服务信息，WiFi连接的位置信息等。 这些地理位置信息大部分都是由系统程序向用户声明且经用户允许下采集，存储于本地介质或者上传服务器云端。因此对地理位置信息的取证技术同时包含手机取证技术和网络取证技术。 Android系统版本更新速度快，同时各个手机厂商对Android原生系统进行了定制，因此Android手机的系统平台具有多样性。本文以三星S5 (SM-G9008V)作为实验平台，其系统环境为Android 5.0并已取得ROOT权限。数据的提取方法基于实际的数据提取，其方法对于基于镜像的提取也同样适用。 3.1. WiFi信息 大量移动终端通过私人或者公共WiFi网络来访问互联网。Android手机会自动存储WiFi网络的连接记录和网络的基本属性(例如SSID和MAC地址)。同时，WiFi网络的无线接入点地理位置一般固定，根据WiFi接入信息可以得知关联的地理位置信息。 Android系统使用一个修改版wpa_supplicant作为daemon来控制WiFi，其配置文件/wpa_supplicant.conf存储位置在/data/misc/Wi-Fi/目录下。该配置文件中定义的部分信息数据结构如表1所示。 3.2. 照片元数据 可交换图像文件格式(EXIF)通常附加于JPEG、TIFF、RIFF等文件之中，用于记录照片的属性信息和拍摄数据。其所记录的参数通常被称作照片元数据。照片元数据内容丰富，其中就包括GPS定位数据形式的地理位置信息。Android智能手机在拍摄时，如果打开定位服务及相关选项会自动在EXIF中加入GPS定位数据。这一类地理位置信息配合拍摄时间较精确地反映了照片的拍摄时空信息。 3.2.1. EXIF数据结构 对于Android智能手机默认存储照片格式JPEG文件，其以十六进制数值FF D8作为SOI标志(图像开始)，并以FF D9作为EOI(图像结束)。文件头部有一系列“0xFF？？”格式的十六进制数值，称为JPEG标识，用来标记JPEG文件的信息段。EXIF利用从“0xFFE0”-“0xFFD9”之间的应用标记(APPn)记录照片元数据 [ 4 ] 。EXIF的官方文档关于元数据标签的定义较复杂，这里只列举常用的GPSInfo组件，见表2。 3.2.2. 提取方法 针对EXIF的数据结构，我们使用C#语言编写提取JPEG文件元数据的工具。以三星SM-G9008V手机拍摄的一张照片为例，读取其中EXIF数据。最后使用导出功能得到html格式的对应格式化摘要。摘要内容包括原照片浏览图、GPS数据和GPS时间戳等，见图2。 3.3. 即时通讯类应用 3.3.1. 地理位置信息存储形式 移动端常见即时通讯类应用有微信、手机QQ、飞信、陌陌和米聊等，本文以较为广泛使用的微信为例。微信中的地理位置信息主要由用户聊天时地理位置分享产生，并保存在聊天记录数据中，Android版聊天记录经加密存储在\data\data\com.tencent.mm\MicroMsg路径下的EnMicroMsg.db数据库文件中，其中表message存储聊天内容，其表结构见表3。 3.3.2. 提取方法 对于Android版微信，可以通过手机取证系统直接解密微信聊天记录，进一步获得地理位置信息。同时也可以借助免费的第三方软件实现微信聊天记录的找回操作。 Table 1 Data structure of Wi-Fi dat 字段名 ssid Key_ngmt autojoin priority psk 中文说明 接入点名称 认证密钥管理协议 自动加入 优先级 密钥 表1. Wi-Fi信息数据结构 Table 2 Common GPSInfo component 字段名 标签名称 数据类型 GPSVersionID GPS tag version BYTE GPSLatitudeRef North or South Latitude ASCII GPSLatitude Latitude RATIONAL GPSLongitudeRef East or West Longitude ASCII GPSLongitude Longitude RATIONAL GPSTimeStamp GPS time RATIONAL 表2. 常见GPSInfo组件信息 Table 3 List structure of message (part 字段 字段类型 说明 msgID INTEGER 对话ID/序号 msgSvrId INTEGER msg服务号 type INT 类型 status INT 状态 isSend INT 已发送 isShowTimer INTEGER 计时器 createTime INTEGER 创建时间 talker TEXT 发起聊天者账号 content TEXT 内容 imgPath TEXT 图片路径 reserved TEXT 存储位置 lvbuffer BLOB 二进制标记 transContent TEXT 传输内容 talkerId INTEGER 发起聊天者ID/序号 表3. message表结构（部分） 图2. EXIF信息读取程序 如下是对微信(版本号：6.3.31) EnMicroMsg.db数据库解密并提取位置分享信息的实验。首先将手机IMEI(国际移动设备身份码)和微信uin (微信用户信息识别码)字符串连接(见图3)，其MD5值前七位即为数据库解密密码。利用工具SQLCipher.exe打开EnMicroMsg.db数据库文件，输入密码，即可成功打开文件。读取表“message”中记录的聊天记录，使用关键词“location” 执行SQL查询语句，从而获取所需的地理位置信息(见图4)。 图3. IMEI与uin 图4. 分享地理位置数据 3.4. 导航地图 经济社会高速发展的今天，复杂的路况已经成为户外出行的首要问题，由此百度地图、高德地图、腾讯地图等手机地图导航软件应运而生。本文以手机百度地图软件中地理位置信息的提取为例。 3.4.1. 相关信息存储形式 百度地图应用中地理位置信息主要包含用户定位记录、导航记录、步行记录等，这些数据存储在/data/data/com.baidu.BaiduMap/databases路径下。在众多生成的数据文件中，名为“tracks.db”的数据库文件中各表详细记录使用者相应的地理位置信息，“tracks”数据库结构见表4。 以存储用户定位记录的表Track_Location为例，其表结构如表5所示。 3.4.2. 提取方法 如图5用户定位记录所示，访问data/data/com.baidu.BaiduMap/databases目录，利用数据库查看软件SQLite Expert Professional即可查看数据库tracks.db，并导出数据。 3.5. 网约车应用 网约车软件的诞生改变了传统打车市场格局。这里以滴滴出行为例进行相关地理位置信息的提取。 通常用户在使用应用时，会授权软件定位当前的地理位置，滴滴再根据司机的实时位置，向附近的车辆发送订单请求，一经接受即订单生效，以此来快速提供出行服务。这些位置信息包括常用地址信息(家和公司地址信息)，起点和终点信息。 由于滴滴出行应用将大量订单和用户信息数据存储于服务器，因此对此应用的数据提取需要可视化取证和介质取证相结合。滴滴出行应用的一部分订单信息和用户个人信息以数据库文件的形式存储在data/data/com.sdu.didi.psnger/databases/路径下。 3.5.1. 数据库结构 在datebases中有许多数据库文件和journal文件，其中im_database_281475098446424.db中存储着有关订单信息，如图6所示。图中Android_metadata为Android数据库原文件数据，im_message_table为会话信息，im_user_table为用户相关的额表信息。 图6展示提取im_user_table表得到的用户与滴滴司机活动信息，然而具体位置信息并未包含于本地数据库中，而是存储在应用服务器上。因此需要使用可视化取证手段提取更多详细信息，见图7。 图5. 用户定位记录 图6. “滴滴出行”订单信息 图7. 机主与司机进行的滴滴活动 Table 4 Database structure of track 表名称 说明 android_metadata Android元数据 Track_Car 用户导航数据 Track_Custum 用户常用地址 Track_Location 用户定位记录 Track_Relation 用户线路查询记录 表4. tracks数据库结构 Table 5 List structure of Track_Locatio 字段 字段类型 说明 guid TEXT 数据库唯一标识符 type TEXT 表的类型 lng REAL 经度 lat REAL 纬度 city_name TEXT NOT NULL 城市名称 district TEXT 行政区名称 表5. Track_Location详细表结构 从图7中可读出常用地址信息与订单的起终点信息，其中起终点信息以图针的形式在地图上标记出来，能更好地观察出行车路线与方位信息。