ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

电子取证知识点记录

电子取证知识点记录 安卓手机基础知识点架构应用程序层Java API 框架原生 C/C 库硬件抽象层Linux 内核硬件层文件存储内部存储这里存储的文件位于内部存储中。它们通常位于应用的 /data/data 子目录中。存储在这里的数据是私有的其他应用无法访问。即使是设备所有者也无法查看这些文件除非他们具有 root 权限。然而根据需求开发者可以允许其他进程修改和更新这些文件。以下截图展示了应用在 /data/data 目录下以包名存储的详细信息Android 中的 /data/data 文件夹内容每个应用的内部数据存储在各自的文件夹中。例如下面展示了 Android 设备上属于 YouTube 应用的内部存储Android YouTube 应用的内部存储通常databases、lib、shared_pref、cache 文件夹会为大多数应用创建。以下表格简要描述了这些文件夹除这些文件夹外其他文件夹是应用开发者创建的自定义文件夹。databases 文件夹包含对司法调查至关重要的数据。如以下截图所示这个文件夹中的数据以 SQLite 文件形式存储Android 浏览器应用中 databases 文件夹下的 SQLite 文件可以使用如 DB Browser for SQLite 等工具查看这些数据。外部存储应用也可以将文件存储在外部存储中。外部存储可以是可移动的媒体如 SD 卡或者是手机自带的不可移动存储。在可移动 SD 卡的情况下只需移除 SD 卡并插入其他设备数据就可以在其他设备上使用。SD 卡通常采用 FAT32 文件系统格式但越来越多的使用 EXT3 和 EXT4 文件系统。与内部存储不同外部存储没有严格的安全措施。换句话说存储在这里的数据是公开的其他应用可以访问只要请求应用具有必要的权限。SQLite 数据库SQLite 是一种流行的数据库格式广泛应用于许多移动系统中用于结构化数据存储。SQLite 是开源的并且与许多其他数据库不同它具有紧凑性并提供丰富的功能。Android 通过专用的 API 支持 SQLite因此开发者可以利用这一特性。SQLite 数据库是法医数据的重要来源。应用程序使用的 SQLite 文件通常存储在 /data/data//databases 路径下。例如在 Android 邮件应用中以下截图展示了其数据库文件夹中的 SQLite 文件。我们将在接下来的章节中进一步探讨这些细节。从法医的角度来看这些文件非常有价值因为它们通常存储了应用程序处理的大量重要数据。微信聊天记录维度iOSAndroidWindows PCmacOS底层引擎SQLiteXDB自定义SQLite (SQLCipher)SQLite (SQLCipher)标准 SQL✅ 支持❌ 不支持✅ 支持✅ 支持文件格式.sqlite自定义二进制.db.db加密位置系统 Keychain 应用层应用层与 so 库绑定SQLCipher 页加密SQLCipher 页加密提取难度中需解密 Keychain高需内存/Hook中需密钥或登录状态中通用工具sqlite3、Cellebrite专用取证工具火眼等sqlcipher、开源脚本sqlcipherIOS微信数据库文件路径相对应用沙盒作用MM.sqliteDocuments/xxxxxxxxxxxxxxxx/DB/MM.sqlite主聊天记录库MM.sqlite-wal同目录Write-Ahead Log未 checkpoint 的数据MicroMsg.dbDocuments/xxxxxxxxxxxxxxxx/DB/联系人、账号信息Favorite.db同目录收藏数据photo.sqlite表作用ZGENERICASSET图片/视频主记录UUID、时间、类型ZADDITIONALASSETATTRIBUTES附加属性原始文件名、导入来源、EXIFZINTERNALRESOURCE实际文件存储路径ZCLOUDASSETiCloud 同步状态、云端记录看这个表的时候我就有个问题有些表我没找到这个图的名称但图片的数据是关联的搜索得知关键在于Z_PK值系统列含义Z_PK主键每张表从 1 开始自增全局唯一标识一条记录Z_ENT实体类型码对应Z_PRIMARYKEY表中的实体定义Z_OPT乐观锁版本号用于并发控制Core Data 把一个对象拆成多张表存储时相同 Z_PK 值就是同一个对象。总结Photos.sqlite 是 Core Data 的持久化文件关联不靠显式外键而是靠 Z_PK 同值一对一、Z_ 前缀关系表多对多、或 ZASSET 外键一对多。取证时以 ZGENERICASSET.Z_PK 为根向左 JOIN 属性表向右 JOIN 资源/云端表就能拼出完整图片画像。安卓时期存储方案特征微信 6.x 及以前EnMicroMsg.dbSQLite SQLCipher标准 SQLiteAES-256 加密密钥由IMEI UIN派生微信 7.0 - 8.0过渡阶段部分数据迁移SQLite 与 XDB 并存微信 8.0当前主流XDB / XInfo自定义 KV 存储放弃 SQLite采用类 LevelDB 的自定义引擎当前架构Android 8.0文件/目录路径说明xdb/data/data/com.tencent.mm/MicroMsg/xxxxxxxxxxxxxxxx/xdb/主消息存储自定义二进制格式xInfo同目录会话索引与元数据EnMicroMsg.db同目录可能仍存在但通常只存部分缓存或旧数据主记录已迁移SnsMicroMsg.db同目录朋友圈数据部分版本仍用 SQLitewindowsWeChat Files/ └── wxid_xxxxxxxx/ ├── Msg/ │ ├── Multi/ │ │ ├── MSG0.db# 早期消息│ │ ├── MSG1.db# 中期消息│ │ ├── MSG2.db# 近期消息│ │ └──...# 按时间或容量分片│ └── Single/ │ └──...# 单聊独立存储部分版本├── File/ ├── Image/ ├── Video/ └── Config/ └── AccInfo.dat# 账号信息与加密密钥mac os项目路径数据目录~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/消息数据库.../Msg/Multi/MSGxxxxx.db附件.../File,.../Image,.../Videomanifest.plist文件这个文件是一个二进制的plist 文件主要是保存了设备上安装的应用信息还有一些其他的辅助信息。还原成明文是xml形式的这个文件中可以得到IOS版本号为什么能反推Apple 每次升级 iOS 备份协议时Manifest.plist 的格式版本会同步 bumped。火眼内置了版本映射表通过读取 Version 即可锁定大致 iOS 版本区间。dictkeyBuildVersion/keystring21F90/stringkeyDeviceName/keystringiPhone/stringkeyProductType/keystringiPhone11,8/stringkeyProductVersion/keystring17.5.1/stringkeySerialNumber/keystringDX3F20PJKXLY/stringkeyUniqueDeviceID/keystring00008020-000C18843C2A402E/stringkeycom.apple.Accessibility/keydictkeyClosedCaptioningEnabledByiTunes/keyinteger0/integerkeyInvertDisplayEnabledByiTunes/keyinteger0/integerkeyMonoAudioEnabledByiTunes/keyinteger0/integerkeySpeakAutoCorrectionsEnabledByiTunes/keyinteger0/integerkeyVoiceOverTouchEnabledByiTunes/keyinteger0/integerkeyZoomTouchEnabledByiTunes/keyinteger0/integer/dictIMEIIMEI 是手机的硬件身份证号IMEI 本身没有 iOS、安卓的区别——它是个国际标准任何 GSM/3G/LTE/5G 设备都是 15 位数字结构一样。IMEI 是硬件级标识由基带芯片管理。它的存储位置取决于基带芯片厂商高通、联发科、Intel、三星 Exynos和设备制造商的定制没有标准化文件路径。在安卓中一般找不到部分软件运行时会带着建议暴力搜索位置说明基带/Modem 分区主流做法。IMEI 写在 modem 的 NVRAM 或 EFSEncrypted File System分区里系统通过 RILRadio Interface Layer向基带查询EFS 分区三星等设备的常见存储位置损坏会导致 IMEI 丢失为0049...persist 分区部分厂商把校准数据、IMEI 备份放在此处某些App在运行过程中会将设备 IMEI 缓存到本地配置文件中常见应用典型文件名键名特征微信Compatible.cfgimei淘宝/闲鱼LoggingCache.xmlclientIMEI支付宝各类*.xmlimei、deviceId京东shared_prefs/*.xmlimei、device_imeiHEIC需要注意的是HEIC为iOS和macOS的专有格式HEIC是苹果拍照生成的图片格式这个格式安卓手机在正常情况下是看不了的。当发送图片时手机或者应用会将图片的格式进行转换改成其他类型。所以两种图片不是一张图有不同哈希值。build.prop几乎所有 Android 设备都有 build.prop。它是 Android 系统AOSP的核心配置文件之一位于 /system/build.prop在系统编译时由 buildinfo.sh 脚本生成。只要设备运行的是基于 AOSP 的 Android 系统包括各大厂商定制的 ROM这个文件就必然存在。类别典型字段说明设备身份ro.product.model、ro.product.brand、ro.product.manufacturer、ro.product.name设备型号、品牌、厂商内部代号系统版本ro.build.version.release、ro.build.version.sdk、ro.build.idAndroid 版本如 14、API 等级、构建 ID构建信息ro.build.date、ro.build.fingerprint、ro.build.tags编译时间、系统指纹唯一标识一次构建、是否为测试版本硬件参数ro.board.platform、ro.hardware、ro.sf.lcd_density芯片平台如 sm8550、硬件抽象层、屏幕密度安全相关ro.build.version.security_patch、ro.oem_unlock_supported安全补丁日期、是否允许 OEM 解锁系统行为ro.debuggable、ro.secure、persist.sys.timezone是否开启调试模式、adb 权限、默认时区厂商定制各厂商自己添加的属性如 MIUI 版本、ColorOS 特性开关等厂家常常会有自己的字段名火眼不一定能完全识别出来要自己找查属性比如图片之类的可以直接回到源资源文件查属性persist-rootMetaMask 移动端基于 React Native 开发使用 react-native-async-storage/async-storage 进行数据持久化。persist-root 就是该机制生成的 JSON 格式存储文件相当于 MetaMask 移动端的配置数据总库。是一个 JSON 文件内含多个对象取证中常关注以下内容。数据项说明engine核心对象包含钱包地址、余额、加密金库cipher、资产、合约汇率等交易记录用户发起的转账、兑换、NFT 交易等按时间倒序排列addressBook用户保存的联系人地址importTime钱包导入/创建的时间戳隐私设置 / 书签 / 浏览器记录用户使用 MetaMask 内置浏览器的痕迹walletconnectSessions连接的 DApp 会话信息Contents.db时间time相关——用赛博厨子考点格式名称英文名称起点日期单位典型特征常见来源示例转换公式Unix (秒)Unix Timestamp1970-01-01秒10位整数Linux日志、数据库、区块链1723625990datetime.fromtimestamp(x)Unix (毫秒)Unix Millisecond1970-01-01毫秒13位整数MetaMask、移动端、JS1723625990493datetime.fromtimestamp(x/1000)Windows FILETIMEFILETIME1601-01-01100纳秒18位整数NTFS MFT、注册表1336885800000000001601-01-01 x/10^7 秒WebKit/ChromeWebKit Timestamp1601-01-01微秒17位整数Chrome/Safari历史128500000000000001601-01-01 x/10^6 秒Apple CocoaCocoa / Mac Absolute2001-01-01秒10位整数macOS/iOS Plist7525500002001-01-01 x 秒十六进制Hex Timestamp1970-01-01秒/毫秒0x开头固件、区块链、底层日志0x66BC7207int(hex,16)后按秒/毫秒转ISO 8601ISO 8601--字符串含T/Z标准API、现代日志2024-08-14T08:59:51Z直接解析运算公式示例UTC → 本地本地时间 UTC 偏移量UTC 08:00 8h 北京时间 16:00本地 → UTCUTC 本地时间 - 偏移量北京时间 16:00 - 8h UTC 08:00夏令时 DST偏移量变化如 -5h → -4h需查当年 DST 切换日期陷阱排查方法毫秒 vs 秒混淆看位数13位毫秒10位秒FILETIME 起点错FILETIME 起点是1601不是 1970WebKit 单位错WebKit 是微秒不是秒或毫秒时区符号08:00是东八区UTC加8小时大小端序十六进制存储可能是小端序需翻转字节Clock Skew用区块链/网络时间做锚点校准单词属性英文含义触发操作MModification Time修改时间文件内容被修改AAccess Time访问时间文件被读取/打开/复制CChange Time变更时间元数据变更权限、重命名BBirth/Creation Time诞生/创建时间文件首次创建类别词汇中文基础Timestamp时间戳基础Epoch纪元/起点基础Offset偏移量基础UTC / GMT协调世界时基础Local Time本地时间基础Daylight Saving Time (DST)夏令时文件系统Modification Time (M-time)修改时间文件系统Access Time (A-time)访问时间文件系统Creation Time / Birth Time创建/诞生时间文件系统Change Time (C-time)变更时间分析Normalize标准化分析Correlate关联分析Timeline时间线分析Super Timeline超级时间线分析Temporal Analysis时序分析分析Clock Skew时钟偏差分析Granularity粒度/精度分析Anchor / Anchor Point时间锚点分析Discrepancy差异/矛盾分析Precede / Antedate早于分析Postdate晚于分析Synchronize同步分析Reconstruct重建日志Log Entry日志条目日志Received Time接收时间日志Session Time会话时间日志Expiration过期时间日志Retention Period保留期限内存取证lovelymem这个工具会把进程内存转储挂载在自己的电脑上可以从里面找文件但这不是程序文件常见的原因大致为:进程转储包含完整的地址空间动态链接库的加载内存对齐与填充火眼自带的内存工具有用户列表和一些简单的信息但是不好用这里面找文件之类的哈希值还是好用的
返回列表