MuhammadLab
Back to Mobile Forensics
Wearable ForensicsHealth DataWHOOP / Fitbit / Apple / Garmin

Wearable Forensics Guide

A beginner-friendly teaching guide for wearable evidence, health data, timestamps, device sync, cloud sources, platform profiles, chain of custody, analysis tools, case examples, and legal considerations.

Legal and privacy note

Wearable data is sensitive health data. Only collect or analyse it with consent, legal authority, or written authorisation, and document each action carefully.

Health data

Heart rate, HRV, sleep, temperature, SpO2, activity, workouts, and stress-style signals.

Timestamps

The main forensic value is often proving what happened, when, and whether device, app, cloud, and GPS times agree.

Cloud-first evidence

Many platforms store the most complete history in the manufacturer cloud, not on the wearable itself.

Sync history

Sync events can show phone proximity, upload times, gaps, device removal, battery issues, or signal blocking.

On this guide

Overview

What is Wearable Forensics?

Wearable forensics is the process of identifying, acquiring, preserving, and analysing digital evidence from wearable technology.

Why wearables matter

Wearables are devices worn on the body that continuously collect biometric, location, and behavioural data. They can be important in criminal investigations, civil litigation, insurance fraud, workplace incidents, and timeline reconstruction.

What makes them different

Wearables passively record data the user often forgets is being collected: heart rate, movement, GPS routes, sleep patterns, recovery scores, and sync activity. This data can corroborate or contradict statements and help place people in time, activity, or location context.

Part 1

Understanding Wearable Devices and What They Capture

Different wearable categories collect different evidence. Start by identifying the platform, sensors, paired phone, account, and cloud service.

Categories of wearable devices

  • Fitness trackers: Fitbit Charge, Fitbit Sense, Fitbit Versa, Garmin Venu, Garmin Forerunner, Xiaomi Mi Band, Samsung Galaxy Fit.
  • Smartwatches: Apple Watch, Samsung Galaxy Watch, Google Pixel Watch, Garmin smartwatches.
  • Performance and recovery monitors: WHOOP, Oura Ring, Polar H10, Garmin HRM series.
  • Medical-grade wearables: Dexcom CGM, Abbott FreeStyle Libre, Zio Patch, AliveCor KardiaMobile, Masimo and Nonin pulse oximeters.
  • Other wearables: smart glasses, smart clothing, GPS ankle monitors, and body cameras.

Biometric data

Data typeSensor or methodTypical resolutionForensic value
Heart rateOptical PPG sensorEvery 1 to 5 seconds, platform dependentVery high
Heart rate variabilityPPG and algorithmsSleep session or on demandHigh
Blood oxygenRed and infrared LEDPeriodic or continuousHigh
Skin temperatureThermistorPeriodic, often during sleepModerate
Electrodermal activityEDA sensorContinuous stress-style signalsModerate
ECG or EKGElectrical sensorsOn demandVery high
Blood glucoseCGM electrochemical sensorCommonly every 5 minutesVery high
Respiratory ratePPG-derived algorithmPer session or sleep periodModerate

Activity and movement data

Data typeSensor or methodResolutionForensic value
StepsAccelerometerPer minute or continuousHigh
DistanceAccelerometer and GPSPer minute or continuousHigh
GPS coordinatesGPS chipEvery 1 to 60 secondsVery high
Calories burnedAlgorithm-derivedContinuous estimateModerate
Active minutesAlgorithm-derivedPer minuteHigh
Exercise detectionAccelerometer and heart ratePer sessionHigh
Floors climbedBarometerPer floorModerate
Swim lapsAccelerometerPer lapModerate

Sleep and contextual data

CategoryExamplesWhy it matters
SleepSleep/wake, stages, duration, wake eventsCan support or challenge alibi and activity claims
TimestampsDevice time, app time, server upload timeCritical for timeline reconstruction
Time zoneDevice/account/app settingsPrevents UTC/local-time mistakes
Sync metadataLast sync, upload time, pairing stateShows proximity and possible gaps
InteractionsNotifications, app usage, settings changesCan support phone/device activity analysis

Part 1.3

WHOOP Deep Dive

WHOOP is forensically significant because it is worn continuously, has no screen, and is designed primarily as a data collection device.

What WHOOP captures

  • Heart rate sampled at high frequency using optical PPG.
  • Heart rate variability calculated during sleep.
  • Respiratory rate calculated during sleep.
  • Skin temperature captured during sleep.
  • Blood oxygen on supported models.
  • Automatic workout detection with start and end timestamps.
  • Sleep detection with light, REM, deep, and awake staging.
  • Daily strain, recovery, and calories as derived summary metrics.

WHOOP data architecture

WHOOP is cloud-first. The strap stores a limited local buffer, syncs to the mobile app over Bluetooth, then uploads to the WHOOP cloud. For investigations, cloud data and exports are usually more complete than the physical strap.

WHOOP Strap
  -> Bluetooth sync
WHOOP App on iOS or Android
  -> Cellular or Wi-Fi upload
WHOOP Cloud
  -> Web dashboard, app export, legal return, or API access

Typical WHOOP export files

FileTypical contents
physiological_cycles.csvDaily recovery, strain, sleep summary, average HR, max HR, HRV, respiratory rate, SpO2, skin temperature
sleeps.csvSleep start/end, duration, sleep stages, disturbances, latency, time in bed
workouts.csvActivity type, start/end, strain, average HR, max HR, calories, possible GPS
hr.csvHeart-rate timeline, often minute-by-minute or finer depending on export
metrics.csvHRV, respiratory rate, SpO2, and other cycle-level metrics
journal_entries.csvUser-entered notes such as caffeine, alcohol, stress, medication, or behaviours

Legal process and export note

For formal investigations, request data using valid legal process or documented consent. Provider returns may include account information, device identifiers, login history, and historical biometric records, depending on legal authority and retention.

Part 2

Forensic Evidence Sources: Where the Data Lives

Wearable evidence usually exists in three layers: physical device, paired smartphone app, and manufacturer cloud.

Three-layer evidence model

LAYER 1: DEVICE
Physical wearable hardware
On-board storage and recent sensor buffer

  Bluetooth sync

LAYER 2: PAIRED APP
Smartphone companion app
Local SQLite databases, caches, logs, preferences

  Internet upload

LAYER 3: CLOUD
Manufacturer cloud servers
Historical data, account logs, login history, API-accessible records

Layer 1: physical device

  • Most wearables have limited local storage and keep a rolling buffer before sync.
  • Physical acquisition is difficult because connectors, storage, firmware, and debug interfaces are proprietary.
  • Practical physical evidence often includes serial number, MAC address, firmware version, battery state, and packaging/device labels.
  • For most cases, the physical device should be preserved, but the phone app and cloud are more useful for acquisition.

Layer 2: companion app on smartphone

The paired app can hold local copies of synced data, account details, pairing history, local caches, and SQLite databases. Standard Android or iOS mobile forensic acquisition methods apply.

# Android app database examples
/data/data/com.fitbit.FitbitMobile/databases/
/data/data/com.garmin.android.apps.connectmobile/databases/
/data/data/com.sec.android.app.shealth/databases/
/data/data/com.whoop.whoop/databases/
/data/data/com.ouraring.oura/databases/

# Apple Health on iOS full file system extraction
/private/var/mobile/Library/Health/healthdb.sqlite
/private/var/mobile/Library/Health/healthdb_secure.sqlite

Apple Health export

Apple Health is a central aggregator for iPhone health and fitness data. An accessible device can export health data as a ZIP containing XML records, clinical records, ECG files, and workout routes.

Settings -> Privacy & Security -> Health -> Export All Health Data

Typical export contents:
export.xml
export_cda.xml
electrocardiograms/
workout-routes/

Apple Health query example

SELECT
  datetime(startDate, 'unixepoch') AS start_time,
  datetime(endDate, 'unixepoch') AS end_time,
  value AS heart_rate,
  sourceName AS device
FROM samples
JOIN source ON samples.source_id = source.ROWID
WHERE dataType = 5
ORDER BY startDate;

Layer 3: cloud data

  • Cloud data is often the most complete and reliable source because it may include full historical data and server-side timestamps.
  • Access methods include voluntary export, valid legal process to the manufacturer, or credentialed API access.
  • For API acquisition, record tool versions, account, date range, request parameters, raw responses, and hashes.

API examples

# WHOOP-style API acquisition pattern
import requests

token = "ACCESS_TOKEN"
headers = {"Authorization": f"Bearer {token}"}

cycles = requests.get(
    "https://api-7.whoop.com/users/me/cycles",
    headers=headers,
    params={"limit": 30}
)

hr_data = requests.get(
    "https://api-7.whoop.com/users/me/metrics/heart_rate",
    headers=headers,
    params={
        "start": "2024-01-01T00:00:00.000Z",
        "end": "2024-01-31T23:59:59.000Z"
    }
)

print(cycles.json())

# Fitbit-style conceptual API flow
# OAuth2 credentials are required before querying activity, sleep, or heart-rate endpoints.

Part 3

Timestamps: The Most Critical Forensic Element

In wearable cases, the central question is often what the person was doing at a specific time.

Why timestamps matter

  • Confirm or contradict an alibi.
  • Show whether someone was asleep, active, stationary, or moving.
  • Reveal heart-rate spikes consistent with exertion, stress, or medical events.
  • Correlate GPS location, steps, phone activity, CCTV, and communications.
  • In serious cases, cessation of heart-rate data may help narrow a time-of-death window.

Timestamp source reliability

SourceDescriptionReliability note
Device clockWearable internal clockCan drift; often syncs to paired phone
App timestampPhone app receipt or processing timeUseful for sync and proximity analysis
Server timestampCloud upload or ingest timeOften highly reliable because servers use NTP
GPS timestampSatellite-derived timeExtremely reliable when available

Timestamp conversion examples

import datetime

# Unix epoch seconds
unix_ts = 1705312800
print(datetime.datetime.utcfromtimestamp(unix_ts))

# Millisecond epoch
ms_ts = 1705312800000
print(datetime.datetime.utcfromtimestamp(ms_ts / 1000))

# ISO 8601
from datetime import datetime
dt = datetime.fromisoformat("2024-01-15T10:00:00.000Z".replace("Z", "+00:00"))
print(dt)

# Apple Cocoa timestamp: seconds since 2001-01-01 UTC
cocoa_ts = 726480000
apple_epoch = datetime.datetime(2001, 1, 1)
print(apple_epoch + datetime.timedelta(seconds=cocoa_ts))

# Garmin FIT timestamp: seconds since 1989-12-31 UTC
garmin_ts = 883612800
garmin_epoch = datetime.datetime(1989, 12, 31)
print(garmin_epoch + datetime.timedelta(seconds=garmin_ts))

Time zone pitfalls

  • Cloud databases commonly store timestamps in UTC while the app displays local time.
  • Daylight saving transitions can create repeated or missing local-time hours.
  • Travel can change displayed local time while UTC remains stable.
  • Best practice: analyze in UTC and convert to local time only for reporting, clearly labelling the time zone.

Cross-correlation

Never rely on one timestamp alone. Compare wearable timestamps, phone logs, cloud upload times, and GPS times. If they agree within seconds, reliability is stronger. If they diverge, investigate clock drift, sync delay, time-zone settings, or possible data manipulation.

Part 4

Device Sync: Forensic Significance

Sync events can prove proximity between wearable and phone, reveal upload timing, and explain data gaps.

Why sync events matter

  • They can show the wearable was within Bluetooth range of the paired phone at a specific time.
  • They create cloud upload events with independent server-side timestamps.
  • They can reveal gaps where the wearable was removed, dead, blocked, or out of range.
  • They help explain why cloud data may stop even though the device still existed physically.

Sync architecture examples

Fitbit:
Fitbit device -> Bluetooth -> Fitbit app -> Internet -> Fitbit cloud
Common pattern: automatic sync when in range plus manual sync options

WHOOP:
WHOOP strap -> Bluetooth -> WHOOP app -> Internet -> WHOOP cloud
Common pattern: near-continuous or periodic background sync; strap buffer if app unavailable

Garmin:
Garmin device -> Bluetooth -> Garmin Connect app -> Garmin cloud
Garmin device -> Wi-Fi -> Garmin cloud
Garmin device -> USB -> Garmin Express

Apple Watch:
Apple Watch -> Bluetooth or Wi-Fi -> Paired iPhone -> Apple services
Health data aggregates in Apple Health on the iPhone

Finding sync records

# Fitbit-style local sync log example
sqlite3 /data/data/com.fitbit.FitbitMobile/databases/fitbit.db \
  "SELECT * FROM sync_log ORDER BY sync_time DESC LIMIT 50;"

# Samsung Health-style sync history example
sqlite3 /data/data/com.sec.android.app.shealth/databases/health.db \
  "SELECT * FROM sync_history ORDER BY sync_date DESC;"

# Android logcat sync filtering
adb logcat | grep -i "bluetooth\|sync\|fitbit\|whoop\|garmin"

# iOS Apple Watch / Health sync areas from full file system extraction
/private/var/mobile/Library/Caches/com.apple.MobileBackup/
/private/var/mobile/Library/HealthKit/
/private/var/mobile/Library/Health/sync_log/

What sync gaps may mean

  • The device was not worn or was removed.
  • The wearable battery died.
  • The wearable was outside Bluetooth range of the paired phone.
  • The device was powered off or placed in a signal-blocking environment.
  • The phone app was closed, uninstalled, not permitted background access, or malfunctioning.

Part 5

Major Platforms: Forensic Profiles

Each platform has different strengths, data sources, exports, and legal process routes.

WHOOP

  • Strengths: worn 24/7, high-resolution heart-rate capture, strong sleep and workout boundaries, cloud-first retention.
  • Acquisition: voluntary app/web export, legal process to provider, or credentialed API where authorised.
  • Key exports: physiological cycles, sleeps, workouts, heart rate, metrics, and journal entries.

Fitbit

  • Strengths: large installed base, long history, intraday HR on many models, sleep staging, GPS on supported devices.
  • Acquisition: Fitbit account export, legal process through Google/Fitbit legal channels, OAuth2 API access where authorised.
  • Investigative use: activity, sleep, heart-rate cessation, disability/insurance activity analysis, and alibi testing.

Apple Watch and Apple Health

  • Strengths: detailed HealthKit aggregation, ECG, fall detection, emergency SOS, crash detection, irregular rhythm notifications, GPS.
  • Acquisition: paired iPhone extraction, Apple Health export, iCloud/Apple legal process where available and lawful.
  • Important path: /private/var/mobile/Library/Health/healthdb.sqlite and healthdb_secure.sqlite from full file system extraction.
-- Apple Health heart-rate style query
SELECT
  datetime(startDate + 978307200, 'unixepoch') AS timestamp,
  value AS bpm,
  sourceName
FROM samples s
JOIN source src ON s.source_id = src.ROWID
WHERE dataType = 5
ORDER BY startDate;

-- Workout sessions
SELECT
  datetime(startDate + 978307200, 'unixepoch') AS start,
  datetime(endDate + 978307200, 'unixepoch') AS end,
  duration,
  totalDistance,
  totalEnergyBurned
FROM workouts
ORDER BY startDate;

Garmin

  • Strengths: GPS accuracy, FIT files, long local device storage on many models, Body Battery, stress, respiration, athletic metrics.
  • Acquisition: Garmin Connect export, phone app extraction, FIT files from device or cloud export.
  • FIT files can contain timestamps, GPS coordinates, altitude, heart rate, cadence, power, speed, and temperature.
# Parse a Garmin FIT file with fitparse
pip install fitparse

python3 << 'EOF'
import fitparse

fitfile = fitparse.FitFile("activity.fit")

for record in fitfile.get_messages("record"):
    data = {}
    for field in record:
        data[field.name] = field.value
    print(data)
EOF

Oura Ring

  • Strengths: often worn continuously, strong sleep staging, temperature, HRV, respiratory rate, readiness score, unobtrusive form factor.
  • Acquisition: Oura cloud export, API access with credentials, legal process to the provider where appropriate.
  • Forensic value: sleep/wake windows, temperature trends, recovery changes, activity and readiness patterns.

Part 6

Chain of Custody for Wearable Evidence

Wearable evidence is distributed across device, phone, and cloud, so chain of custody must document each layer separately.

Why chain of custody is different

  • Evidence is distributed across physical wearable, companion phone, and cloud provider.
  • Cloud data can be dynamic because additional syncs may occur after seizure.
  • The physical device may have less evidentiary data than the cloud account.
  • Data is health data and may trigger heightened privacy requirements.
  • Manufacturer returns should be hashed immediately and logged with receipt method and time.

Wearable evidence log template

WEARABLE DEVICE EVIDENCE LOG

Case Number:
Examiner Name:
Date/Time of Seizure (UTC):

DEVICE DETAILS
Manufacturer:
Model:
Serial Number:
Bluetooth MAC Address:
Firmware Version:
Battery Level at Seizure:
Device State: Powered ON / Powered OFF / Unknown
Was it being worn: Yes / No / Unknown
Screen condition:
Physical damage:
Accessories present:

PAIRED PHONE DETAILS
Phone make/model:
Phone serial:
Companion app installed:
Companion app version:
Last sync displayed:

CLOUD ACCOUNT
Platform:
Account email:
Account created date:
Data export requested: Yes / No
Legal process served: Yes / No
Date served:

STORAGE AND HANDLING
Evidence bag type:
Charging maintained: Yes / No
Evidence locker location:
Custody transfer notes:

Hashing exported data

# Hash all files in an evidence directory
find /evidence/wearable_data/ -type f -exec sha256sum {} \; > evidence_hashes.txt

# Verify later
sha256sum -c evidence_hashes.txt

# Hash a single file
sha256sum physiological_cycles.csv

API acquisition metadata example

import datetime
import hashlib
import json

acquisition_log = {
    "acquisition_date_utc": datetime.datetime.utcnow().isoformat(),
    "platform": "WHOOP",
    "method": "API",
    "account": "user@email.com",
    "examiner": "Your Name",
    "tool": "Python requests",
    "data_range": {
        "start": "2024-01-01T00:00:00Z",
        "end": "2024-01-31T23:59:59Z"
    }
}

with open("whoop_hr_data.json", "w", encoding="utf-8") as f:
    json.dump(hr_data, f)

with open("whoop_hr_data.json", "rb") as f:
    acquisition_log["file_hash_sha256"] = hashlib.sha256(f.read()).hexdigest()

with open("acquisition_log.json", "w", encoding="utf-8") as f:
    json.dump(acquisition_log, f, indent=2)

Part 7

Analysis Tools

Wearable analysis often combines mobile forensic suites, SQLite review, GPS tools, Python analysis, and platform exports.

Free and open-source tools

  • GpsPrune: visualise GPS tracks from GPX, KML, and compatible route exports.
  • Garmin FIT CSV Tool: convert FIT files to CSV for review.
  • Health Auto Export: scheduled Apple Health export to CSV or JSON.
  • iLEAPP: parse Apple Health and HealthKit artifacts from iOS extractions.
  • DB Browser for SQLite: inspect wearable app databases and HealthKit databases.
  • Pandas and Matplotlib: build custom charts and forensic timelines from CSV exports.
# Garmin FIT CSV Tool
java -jar FitCSVTool.jar activity.fit

# Plot WHOOP-style heart-rate CSV data
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates

hr_df = pd.read_csv("hr.csv", parse_dates=["Timestamp"])
hr_df = hr_df.sort_values("Timestamp")

day_data = hr_df[hr_df["Timestamp"].dt.date == pd.Timestamp("2024-01-15").date()]

fig, ax = plt.subplots(figsize=(14, 5))
ax.plot(day_data["Timestamp"], day_data["Heart Rate"], color="red", linewidth=0.8)
ax.set_title("Heart Rate - January 15, 2024")
ax.set_xlabel("Time (UTC)")
ax.set_ylabel("BPM")
ax.xaxis.set_major_formatter(mdates.DateFormatter("%H:%M"))
plt.tight_layout()
plt.savefig("hr_timeline_jan15.png", dpi=150)

Commercial tools

ToolForensic use
Cellebrite UFED and Physical AnalyzerExtract and parse wearable data from companion apps on Android and iOS
Oxygen Forensic DetectiveHealth and fitness data parsing, app/cloud support, timeline visualisation
Magnet AXIOMParse health and fitness artifacts and correlate with other evidence in timeline view
Cellebrite PathfinderAdvanced analytics to correlate activity, location, communications, and behaviour

Part 8

Case Application Examples

Wearable data should be interpreted carefully and cross-correlated with other evidence sources.

Homicide and time-of-death window

  • Look for last recorded heart-rate timestamp.
  • Assess sudden spike followed by cessation, gradual decline, or normal sleep pattern ending unexpectedly.
  • Correlate with GPS, phone activity, messages, CCTV, neighbour reports, and cloud/server timestamps.

Alibi investigation

  • Confirm claimed sleep with sleep detection, low HR, HRV, and no step activity.
  • Check GPS and phone proximity to support location claims.
  • Look for device removal, data gaps, elevated HR, or movement during claimed rest periods.

Insurance fraud and worker compensation

  • Compare claimed disability with step counts, GPS tracks, active minutes, workouts, and HR patterns.
  • Check whether claimed injury time aligns with HR spikes, sudden movement, fall detection, GPS, or app activity.
  • Document limitations: derived metrics are not direct proof and should be corroborated.

Quick reference

Wearable Forensics Quick Checklist

WEARABLE FORENSICS QUICK CHECKLIST

[ ] Isolate device from network if needed.
[ ] Keep device powered and charged where appropriate.
[ ] Document device state: worn/not worn, battery, screen, damage.
[ ] Photograph device in found position.
[ ] Record serial number, MAC address, model, firmware version.
[ ] Identify paired smartphone and installed companion app.
[ ] Acquire paired phone evidence and companion app databases.
[ ] Request voluntary export if lawful and appropriate.
[ ] Serve legal process to manufacturer if required.
[ ] Acquire API data with credentials only when authorised.
[ ] Hash all acquired files immediately.
[ ] Document all timestamps in UTC.
[ ] Record device/account time zone and local time used in reports.
[ ] Identify sync gaps and document likely explanations.
[ ] Cross-correlate with phone logs, cloud timestamps, GPS, CCTV, and messages.
[ ] Build a chronological timeline.
[ ] Prepare chain-of-custody records for device, phone, cloud, and exports.
[ ] Verify hashes before and after analysis.

Final teaching point

Wearable forensics is growing quickly because these devices now record movement, physiology, sleep, location, and cloud sync behaviour. The strongest analysis usually comes from combining wearable data with phone logs, cloud timestamps, messages, CCTV, GPS, and careful chain-of-custody records.