运动健康类 App 在手机取证和可穿戴设备取证中越来越常见。
虽然在此次盘古石初赛中,团队怀疑手表题数据在手机中,但随后复盘并未发现。同时发现手边数据有明显加密痕迹,故大概率数据还存在手表中,只是未找到正确方法解密。
在比赛和案件分析中,这类软件经常用于回答以下问题:
跑步地点在哪里?
运动轨迹是否真实?
平均配速是多少?
心率数据是否异常?
运动记录来自手机还是手表?
截图是否可能伪造?
用户绑定过哪些穿戴设备?
运动数据是否同步到云端或系统健康平台?
运动软件取证不能只看一张截图。截图只能作为线索,不能直接作为最终证据。
应当同时结合:
App 数据库
运动记录文件
GPS 轨迹点
心率 / 步频 / 配速数据
设备绑定信息
系统健康数据库
相册截图
云同步痕迹
通知和日志
可穿戴设备数据
Keep、华为运动健康、Zepp、Zepp Life、小米运动健康 / Mi Fitness 这几类 App 都属于运动健康数据入口。实际取证时,不能只根据 App 界面判断,应当回到原始数据库、缓存、配置文件、系统健康数据和可穿戴设备同步痕迹中进行交叉验证。
一、运动软件取证的核心价值
运动软件数据的价值主要体现在五个方面。
1. 时间价值
运动记录通常包含:
运动开始时间
运动结束时间
运动持续时间
暂停时间
同步时间
上传时间
创建时间
修改时间
这些时间可以用来还原用户在某一时间段是否处于运动状态。
但需要注意:
运动开始时间 ≠ 数据上传时间
运动结束时间 ≠ 截图保存时间
截图时间 ≠ 真实运动时间
例如,某张 Keep 跑步截图显示 19:32 开始运动,但相册中截图创建时间是 22:10。这只能说明截图在 22:10 左右保存,不能直接说明用户在 19:32 运动。需要继续查看 App 原始数据库或轨迹数据。
2. 空间价值
户外跑步、骑行、徒步等运动通常会产生位置数据。
常见数据包括:
经度
纬度
海拔
GPS 时间
轨迹点序号
速度
距离
配速
定位精度
这些数据可以用于判断:
用户主要运动区域
是否经过某地点
是否接近案发现场
轨迹是否存在跳点
是否可能是手动伪造
3. 身体状态价值
运动软件或手表可能记录:
心率
最大心率
平均心率
静息心率
步频
步幅
卡路里
压力
血氧
睡眠
恢复状态
最大摄氧量
这些数据不能直接用于医学判断,但可以辅助判断运动记录是否自然。
例如:
跑步 5 公里但全程心率为 0
配速很快但步频数据缺失
轨迹显示移动但心率完全没有变化
公里数很高但无任何 GPS 轨迹
这些都需要进一步核查。
4. 设备关联价值
运动记录可能来自:
手机 GPS
智能手表
手环
跑步机
第三方平台同步
手动录入
导入数据
所以必须确认数据来源。
同一条运动记录,如果能同时在手机 App、系统健康数据库、手表绑定记录、云同步日志中找到对应痕迹,可信度会更高。
5. 反伪造价值
运动软件常被用于生成打卡截图、运动截图、轨迹截图。在取证中,不能只看截图,而要分析:
截图是否来自真实 App
截图时间是否与运动时间匹配
轨迹点是否连续
配速是否合理
心率是否存在
是否存在原始运动记录
是否存在系统健康同步记录
是否存在云端同步痕迹
二、常见 App 与包名线索
**不同手机和地区的 App 名称可能不同,取证时应以检材中的 **packages.xml、应用列表和沙箱目录为准。
以下包名仅作为初筛参考:
| 应用 | 常见名称 | 常见 Android 包名 | 关注点 |
|---|---|---|---|
| Keep | Keep / Keep AI 运动教练 | com.gotokeep.keep |
跑步、骑行、课程、运动轨迹、社区动态、截图 |
| 华为运动健康 | HUAWEI Health / 运动健康 | com.huawei.health |
华为手表、手环、心率、血氧、睡眠、跑步轨迹 |
| Zepp | Zepp / Amazfit | com.huami.watch.hmwatchmanager |
Amazfit 手表、运动记录、心率、设备管理 |
| Zepp Life | Zepp Life / 原 Mi Fit | com.xiaomi.hm.health |
小米手环、体脂秤、睡眠、步数、运动记录 |
| Mi Fitness | Mi Fitness / Xiaomi Wear / 小米运动健康 | com.xiaomi.wearable |
小米手表手环、跑步、骑行、健康数据 |
分析时可以先搜包名:
find . -iname "*gotokeep*" -o -iname "*huawei*health*" -o -iname "*huami*" -o -iname "*xiaomi*health*" -o -iname "*wearable*" 2>/dev/null
也可以从系统安装信息中查:
grep -Rina "com.gotokeep.keep\|com.huawei.health\|com.huami.watch.hmwatchmanager\|com.xiaomi.hm.health\|com.xiaomi.wearable" ./ 2>/dev/null
三、运动软件常见数据类型
运动健康类 App 的数据通常分为九类。
1. 用户账号数据
常见字段:
uid
user_id
account_id
nickname
phone
email
avatar
gender
birthday
height
weight
login_token
session
refresh_token
作用:
确认账号归属
确认登录状态
关联其他设备和云端数据
2. 设备绑定数据
常见字段:
device_id
mac
bluetooth_mac
sn
serial_number
model
firmware
bind_time
last_sync_time
device_name
作用:
判断运动记录是否来自手表或手环
确认设备型号
确认最后同步时间
3. 运动记录主表
常见字段:
workout_id
sport_id
track_id
start_time
end_time
duration
distance
calorie
avg_pace
avg_speed
max_speed
avg_heart_rate
max_heart_rate
step_frequency
step_count
source
sync_status
作用:
回答运动时间、距离、时长、配速、卡路里、心率等基础问题
4. GPS 轨迹点
常见字段:
track_id
point_index
latitude
longitude
altitude
speed
accuracy
timestamp
distance
作用:
判断运动区域
绘制运动路线
识别轨迹跳点
验证运动真实性
5. 心率数据
常见字段:
heart_rate
bpm
hr
time
timestamp
zone
min_hr
max_hr
avg_hr
作用:
判断运动强度
辅助验证是否真实运动
6. 步数和活动数据
常见字段:
steps
step_count
active_time
distance
calorie
date
hour
minute
作用:
分析每日活动情况
还原某天是否高频活动
7. 睡眠和压力数据
常见字段:
sleep_start
sleep_end
deep_sleep
light_sleep
rem
awake
stress
spo2
作用:
分析健康状态
辅助判断用户作息和活动规律
8. 图片和分享数据
常见内容:
运动截图
运动海报
分享图片
社区动态图片
轨迹缩略图
头像
勋章图片
作用:
辅助还原用户是否分享过运动记录
判断截图生成时间和来源
9. 云同步和接口缓存
常见内容:
HTTP 缓存
接口返回 JSON
同步队列
上传失败日志
Token
API 地址
作用:
判断数据是否上传云端
判断本地记录是否被同步
恢复接口返回中的运动记录
四、Android 取证路径
Android 中运动 App 的数据通常在以下目录:
/data/user/0/<package_name>/
/data/data/<package_name>/
/sdcard/Android/data/<package_name>/
/sdcard/Android/media/<package_name>/
重点目录:
databases/
shared_prefs/
files/
cache/
app_webview/
no_backup/
1. 查找数据库
find . -path "*com.gotokeep.keep*" -type f \( -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" \) 2>/dev/null
find . -path "*com.huawei.health*" -type f \( -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" \) 2>/dev/null
find . -path "*com.huami.watch.hmwatchmanager*" -type f \( -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" \) 2>/dev/null
find . -path "*com.xiaomi.hm.health*" -type f \( -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" \) 2>/dev/null
find . -path "*com.xiaomi.wearable*" -type f \( -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" \) 2>/dev/null
也可以全局查:
find . -type f \( -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" \) 2>/dev/null | grep -Ei "keep|health|huami|zepp|xiaomi|wear"
2. 查看数据库表
sqlite3 app.db ".tables"
sqlite3 app.db ".schema"
如果表很多,可以导出表名:
sqlite3 app.db ".tables" | tr ' ' '\n' | sort
3. 搜运动关键词
sqlite3 app.db ".tables" | tr ' ' '\n' | grep -Ei "sport|run|walk|ride|bike|workout|track|gps|route|heart|sleep|step|health|exercise|activity"
中文 App 中也可能出现拼音或中文字段,可继续搜:
strings app.db | grep -Ei "sport|run|walk|ride|bike|workout|track|gps|route|heart|sleep|step|health|exercise|activity|跑步|运动|轨迹|心率|步数|睡眠"
4. 查看配置文件
find . -path "*shared_prefs*" -name "*.xml" 2>/dev/null
搜索账号、设备、Token:
grep -Rina "uid\|user\|phone\|token\|device\|mac\|bluetooth\|sync\|server\|host\|url" ./ 2>/dev/null
5. 查找轨迹文件
有些 App 会保存 GPX、TCX、FIT、JSON 等轨迹或运动文件。
find . -type f \( -iname "*.gpx" -o -iname "*.tcx" -o -iname "*.fit" -o -iname "*.json" -o -iname "*.log" \) 2>/dev/null | grep -Ei "sport|run|track|route|gps|health|keep|zepp|huami|xiaomi"
五、iOS 取证路径
iOS 中运动软件数据通常在 App 沙箱、系统健康数据库、相册和备份 Manifest 中。
常见结构:
AppDomain-<bundle_id>/
AppDomainGroup-group.<name>/
HomeDomain/
MediaDomain/
HealthDomain/
重点文件:
Manifest.db
Photos.sqlite
Health 数据库
Safari / WebKit 缓存
App 沙箱数据库
1. 从 Manifest.db 找 App 文件
**iOS 备份文件名通常是哈希名,需要通过 **Manifest.db 还原路径。
sqlite3 Manifest.db "select domain, relativePath from Files where domain like '%keep%' or domain like '%health%' or domain like '%zepp%' or relativePath like '%sport%' or relativePath like '%health%';"
2. 查找 App 数据库
find . -type f \( -name "*.sqlite" -o -name "*.db" -o -name "*.sqlite3" \) 2>/dev/null | grep -Ei "keep|health|zepp|huami|xiaomi|sport|run"
3. 系统健康数据
在 iOS 上,很多运动数据可能同步到 Apple 健康。分析时应关注:
步数
运动距离
锻炼记录
心率
睡眠
体重
能量消耗
数据来源
设备来源
取证重点不是只看数值,而是看数据来源:
来自手机
来自 Apple Watch
来自第三方 App
来自手动输入
来自同步导入
如果记录显示来自第三方 App,还需要回到对应 App 沙箱继续核验。
六、运动记录分析流程
建议按照下面流程分析。
第一步:确定 App 和账号
安装了哪些运动 App
用户登录了哪个账号
账号绑定了手机号还是邮箱
是否存在多个账号
是否有游客模式
常见证据:
shared_prefs
account.db
user.db
profile.json
login cache
WebView Cookies
第二步:确定设备来源
手机记录
手表记录
手环记录
跑步机记录
第三方平台导入
手动录入
重点字段:
source
device
device_id
model
mac
sn
firmware
provider
data_origin
第三步:找运动主记录
优先找以下字段:
start_time
end_time
duration
distance
calorie
avg_pace
avg_speed
sport_type
workout_type
如果没有字段名,可以用关键词搜索数据库字符串:
strings app.db | grep -Ei "start|end|duration|distance|calorie|pace|speed|sport|workout|run|ride"
第四步:找轨迹点
重点判断是否有:
latitude
longitude
lat
lng
lon
altitude
gps
route
track
搜索:
strings app.db | grep -Ei "latitude|longitude|lat|lng|lon|altitude|gps|route|track"
第五步:找心率和步频
strings app.db | grep -Ei "heart|hr|bpm|step|cadence|stride"
如果存在心率和步频,运动记录可信度通常更高。
第六步:生成时间线
时间线至少包括:
运动开始时间
运动结束时间
数据写入时间
数据同步时间
截图生成时间
图片修改时间
最后一次 App 打开时间
最后一次设备同步时间
七、Keep 取证重点
Keep 的取证重点通常包括:
跑步记录
骑行记录
健身课程
运动截图
社区动态
用户账号
设备同步
第三方健康数据
1. 常见包名
com.gotokeep.keep
取证时先查:
find . -path "*com.gotokeep.keep*" 2>/dev/null
2. 重点目录
/data/user/0/com.gotokeep.keep/databases/
/data/user/0/com.gotokeep.keep/shared_prefs/
/data/user/0/com.gotokeep.keep/files/
/data/user/0/com.gotokeep.keep/cache/
/sdcard/Android/data/com.gotokeep.keep/
/sdcard/Android/media/com.gotokeep.keep/
3. 重点搜索词
grep -Rina "run\|running\|sport\|workout\|route\|track\|gps\|pace\|distance\|calorie\|heart\|bpm" ./com.gotokeep.keep 2>/dev/null
中文关键词:
grep -Rina "跑步\|骑行\|运动\|轨迹\|配速\|心率\|公里\|卡路里" ./com.gotokeep.keep 2>/dev/null
4. 重点问题
Keep 取证常见题目:
某次跑步距离是多少?
运动开始时间是什么?
运动地点在哪个区域?
平均配速是多少?
是否有心率数据?
是否生成过运动截图?
是否发布到社区?
是否同步了智能穿戴设备数据?
5. Keep 截图真伪判断
分析 Keep 截图时,不要只看图片内容。
应检查:
相册数据库中的创建时间
图片 EXIF / PNG 元数据
截图分辨率是否符合设备
状态栏时间是否合理
运动记录数据库中是否存在对应记录
是否存在对应轨迹点
是否存在心率 / 步频 / 卡路里数据
是否存在分享缓存图
如果只有截图,没有 App 原始记录、轨迹点和同步痕迹,证据强度较低。
八、华为运动健康取证重点
华为运动健康常用于华为手机、华为手表、华为手环的数据管理。
1. 常见包名
com.huawei.health
取证时先查:
find . -path "*com.huawei.health*" 2>/dev/null
2. 重点数据
华为运动健康重点关注:
华为账号
绑定设备
手表型号
手环型号
设备 SN / MAC
跑步记录
骑行记录
步数
心率
血氧
睡眠
压力
运动轨迹
同步时间
3. 设备绑定分析
重点找:
device
wear
watch
band
bluetooth
mac
sn
serial
firmware
sync
命令:
grep -Rina "device\|wear\|watch\|band\|bluetooth\|mac\|serial\|firmware\|sync" ./com.huawei.health 2>/dev/null
4. 运动轨迹分析
搜索:
grep -Rina "gps\|track\|route\|latitude\|longitude\|lat\|lng\|distance\|pace" ./com.huawei.health 2>/dev/null
如果数据库较多,可以逐个导出表名:
for db in $(find ./com.huawei.health -type f \( -name "*.db" -o -name "*.sqlite" -o -name "*.sqlite3" \) 2>/dev/null); do
echo "===== $db ====="
sqlite3 "$db" ".tables" 2>/dev/null
done
5. 常见问题
用户绑定的手表型号是什么?
最后一次同步时间是什么?
某天运动步数是多少?
跑步区域在哪里?
平均心率是多少?
睡眠开始和结束时间是什么?
压力异常日期是哪一天?
九、Zepp / Zepp Life / 小米运动健康取证重点
这一类 App 名称容易混淆。
常见关系:
Zepp 常用于 Amazfit 设备
Zepp Life 原 Mi Fit,常用于小米手环、体脂秤等
Mi Fitness 小米运动健康 / Xiaomi Wear
1. 常见包名
com.huami.watch.hmwatchmanager Zepp
com.xiaomi.hm.health Zepp Life / 原 Mi Fit
com.xiaomi.wearable Mi Fitness / Xiaomi Wear
查找:
find . -path "*com.huami.watch.hmwatchmanager*" 2>/dev/null
find . -path "*com.xiaomi.hm.health*" 2>/dev/null
find . -path "*com.xiaomi.wearable*" 2>/dev/null
2. 重点数据
Amazfit / 小米手环绑定记录
设备型号
蓝牙地址
固件版本
运动记录
睡眠记录
心率记录
体重 / 体脂数据
同步时间
通知权限
3. 重点搜索词
grep -Rina "sport\|workout\|run\|walk\|ride\|track\|gps\|heart\|sleep\|weight\|device\|sync\|bluetooth\|mac" ./ 2>/dev/null
4. 典型分析方向
通过设备绑定记录确认手环型号
通过运动记录确认跑步时间
通过 GPS 轨迹确认运动区域
通过心率曲线判断是否真实佩戴
通过睡眠数据判断用户作息
通过体脂秤数据判断近期体重变化
十、运动轨迹真实性分析
运动轨迹是运动软件取证中最容易被误判的部分。
1. 看轨迹是否连续
正常户外运动轨迹通常表现为:
时间连续
坐标连续
速度变化自然
配速波动合理
暂停点合理
路线符合道路或操场结构
异常轨迹可能表现为:
坐标突然跨越很远
短时间速度异常
轨迹点数量极少
全程直线
没有 GPS 精度字段
没有心率和步频
轨迹与地图道路明显不符
2. 看配速是否合理
常见单位:
pace 配速,通常是 分钟/公里
speed 速度,通常是 米/秒 或 公里/小时
distance 距离,可能是 米 或 公里
duration 时长,通常是 秒 或 毫秒
注意单位换算:
1 km = 1000 m
1 hour = 3600 s
配速 = 时长 / 距离
速度 = 距离 / 时长
例如:
1.02 公里
3 分 59 秒
配速约 3'54"/km
如果截图显示距离、时长、配速三者不匹配,需要进一步核查。
3. 看心率和步频
真实跑步通常会伴随:
心率上升
步频稳定
配速波动
GPS 点连续
如果运动距离很长但没有心率、没有步频、没有轨迹点,只能说明存在一条运动记录,不能直接证明真实运动。
4. 看来源字段
重点找:
source
provider
device
manual
import
sync
third_party
如果记录来源是:
manual
import
third_party
要谨慎判断。这可能表示手动录入、第三方导入或同步数据,不一定是本机实时采集。
十一、运动截图取证
运动截图常见来源:
用户手动截图
App 生成分享海报
社区动态图片
缓存缩略图
相册保存图
聊天转发图
分析步骤如下。
1. 看图片文件本身
exiftool image.png
file image.png
identify image.png
关注:
创建时间
修改时间
图片尺寸
颜色空间
软件标记
缩略图
是否有 EXIF
2. 看相册数据库
Android 相册和媒体库可能保存:
文件路径
拍摄时间
添加时间
修改时间
宽高
MIME 类型
来源目录
iOS 则重点看:
Photos.sqlite
ZASSET
ZGENERICASSET
ZADDITIONALASSETATTRIBUTES
3. 看截图内容是否合理
重点检查:
状态栏时间
电量
运营商
地图样式
距离
时长
配速
步频
卡路里
心率
轨迹线
地图地点
字体和 UI 版本
但 UI 只能作为辅助,不能作为唯一判断依据。
4. 和原始记录比对
最终应比对:
截图显示的运动时间
App 数据库中的运动时间
轨迹点中的 GPS 时间
相册中的截图时间
系统健康数据中的运动时间
手表同步时间
只有多来源一致,结论才可靠。
十二、常见题目与答案位置
题目:用户经常运动的区域是哪里?
优先看:
GPS 轨迹点
地图缓存
运动记录中的起点 / 终点
相册运动截图
运动轨迹缩略图
分析方法:
提取多次运动轨迹
统计轨迹点聚集区域
结合行政区划和地图判断地点
题目:用户平均跑步几公里?
优先看:
运动主记录表 distance 字段
跑步类型记录
统计多次跑步距离平均值
注意:
只统计跑步,不统计骑行、步行、健走
单位可能是米
异常记录需要剔除或说明
题目:某次运动耗时多久?
优先看:
start_time
end_time
duration
pause_duration
active_duration
注意:
总时长和运动时长可能不同
暂停时间可能不计入配速
题目:平均心率是多少?
优先看:
运动记录主表 avg_heart_rate
心率详情表 heart_rate / bpm
手表同步数据
如果只有每日心率,没有运动心率,需要说明数据来源。
题目:运动是否真实?
需要综合判断:
是否有运动主记录
是否有连续 GPS 点
是否有心率 / 步频
是否有设备来源
是否有同步时间
是否有截图或分享记录
是否与系统健康数据一致
不能只凭截图下结论。
十三、报告写法示例
1. 运动记录描述
经分析检材中 com.gotokeep.keep 应用数据,在其本地数据库中发现一条户外跑步记录。该记录显示运动开始时间为 2026 年 X 月 X 日 19:32,运动距离为 1.02 公里,运动时长为 3 分 59 秒,并存在对应 GPS 轨迹点。
2. 轨迹描述
该运动记录包含连续 GPS 轨迹点,轨迹点主要分布于某某区域,起点与终点均位于某某地点附近。轨迹点时间与运动开始、结束时间基本一致。
3. 设备来源描述
该运动记录来源字段显示为智能穿戴设备同步,检材中同时发现该账号绑定某型号手表,最后同步时间与运动记录生成时间接近。
4. 截图核验描述
相册中发现一张运动分享截图,截图显示的距离、时长、配速与 App 数据库中的运动记录一致。截图文件创建时间晚于运动结束时间,符合运动结束后生成或保存分享图的行为。
5. 谨慎结论
综上,该运动记录在 App 本地数据库、GPS 轨迹点、设备绑定信息和相册截图中均存在对应痕迹,可认定该账号于上述时间段生成过该运动记录。是否由本人实际完成运动,还需结合设备佩戴情况、账号使用情况及其他证据进一步判断。
十四、常见误区
运动软件取证中常见误区包括:
只看截图,不看原始记录
只看距离,不看轨迹点
只看轨迹,不看心率和设备来源
只看 App,不看系统健康数据库
只看运动时间,不看同步时间
忽略手动录入和第三方导入
忽略单位换算
忽略 UTC 与本地时区
尤其要注意:
截图可以伪造
运动记录可以手动补录
数据可以从第三方平台同步
轨迹可能来自历史导入文件
健康数据可能来自不同设备
因此,结论中应明确数据来源和证据强度。
十五、总结
运动软件取证的核心不是“看跑了多少公里”,而是判断这条运动数据从哪里来、什么时候生成、是否有轨迹、是否有心率、是否有设备来源、是否能被其他数据印证。
完整分析路径可以概括为:
找 App
找账号
找设备
找运动记录
找轨迹点
找心率和步频
找截图和分享图
找同步痕迹
做时间线
做交叉印证
对于 Keep、华为运动健康、Zepp、Zepp Life、小米运动健康这类 App,最有价值的数据通常不是界面上看到的结果,而是隐藏在本地数据库、缓存文件、设备绑定记录和系统健康数据中的原始痕迹。