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 type | Sensor or method | Typical resolution | Forensic value |
|---|---|---|---|
| Heart rate | Optical PPG sensor | Every 1 to 5 seconds, platform dependent | Very high |
| Heart rate variability | PPG and algorithms | Sleep session or on demand | High |
| Blood oxygen | Red and infrared LED | Periodic or continuous | High |
| Skin temperature | Thermistor | Periodic, often during sleep | Moderate |
| Electrodermal activity | EDA sensor | Continuous stress-style signals | Moderate |
| ECG or EKG | Electrical sensors | On demand | Very high |
| Blood glucose | CGM electrochemical sensor | Commonly every 5 minutes | Very high |
| Respiratory rate | PPG-derived algorithm | Per session or sleep period | Moderate |
Activity and movement data
| Data type | Sensor or method | Resolution | Forensic value |
|---|---|---|---|
| Steps | Accelerometer | Per minute or continuous | High |
| Distance | Accelerometer and GPS | Per minute or continuous | High |
| GPS coordinates | GPS chip | Every 1 to 60 seconds | Very high |
| Calories burned | Algorithm-derived | Continuous estimate | Moderate |
| Active minutes | Algorithm-derived | Per minute | High |
| Exercise detection | Accelerometer and heart rate | Per session | High |
| Floors climbed | Barometer | Per floor | Moderate |
| Swim laps | Accelerometer | Per lap | Moderate |
Sleep and contextual data
| Category | Examples | Why it matters |
|---|---|---|
| Sleep | Sleep/wake, stages, duration, wake events | Can support or challenge alibi and activity claims |
| Timestamps | Device time, app time, server upload time | Critical for timeline reconstruction |
| Time zone | Device/account/app settings | Prevents UTC/local-time mistakes |
| Sync metadata | Last sync, upload time, pairing state | Shows proximity and possible gaps |
| Interactions | Notifications, app usage, settings changes | Can 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 accessTypical WHOOP export files
| File | Typical contents |
|---|---|
| physiological_cycles.csv | Daily recovery, strain, sleep summary, average HR, max HR, HRV, respiratory rate, SpO2, skin temperature |
| sleeps.csv | Sleep start/end, duration, sleep stages, disturbances, latency, time in bed |
| workouts.csv | Activity type, start/end, strain, average HR, max HR, calories, possible GPS |
| hr.csv | Heart-rate timeline, often minute-by-minute or finer depending on export |
| metrics.csv | HRV, respiratory rate, SpO2, and other cycle-level metrics |
| journal_entries.csv | User-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 recordsLayer 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.sqliteApple 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
| Source | Description | Reliability note |
|---|---|---|
| Device clock | Wearable internal clock | Can drift; often syncs to paired phone |
| App timestamp | Phone app receipt or processing time | Useful for sync and proximity analysis |
| Server timestamp | Cloud upload or ingest time | Often highly reliable because servers use NTP |
| GPS timestamp | Satellite-derived time | Extremely 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 iPhoneFinding 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)
EOFOura 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.csvAPI 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
| Tool | Forensic use |
|---|---|
| Cellebrite UFED and Physical Analyzer | Extract and parse wearable data from companion apps on Android and iOS |
| Oxygen Forensic Detective | Health and fitness data parsing, app/cloud support, timeline visualisation |
| Magnet AXIOM | Parse health and fitness artifacts and correlate with other evidence in timeline view |
| Cellebrite Pathfinder | Advanced 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.
Part 9
Legal Considerations
Wearable records are sensitive health data. Collection and use require proper legal authority and careful minimisation.
Admissibility foundations
- Authenticity: data must be tied to the relevant device, account, export, or provider return.
- Integrity: hash files and maintain an audit trail showing no alteration after acquisition.
- Reliability: document wear state, device operation, battery, sync history, and known gaps.
- Relevance: explain why the data helps prove or disprove a fact in issue.
Privacy considerations
- Australia: Privacy Act 1988, Australian Privacy Principles, and health record obligations may apply.
- European Union: GDPR treats health data as special category data.
- United States: HIPAA may apply to medical sources; state biometric laws may also apply.
- Best practice: obtain consent, warrant, court order, or other lawful authority before acquisition.
Manufacturer cooperation
| Manufacturer | Likely route | Notes |
|---|---|---|
| Fitbit / Google | Google legal support or account export | Response depends on legal process and data requested |
| Apple | Apple legal process, iPhone extraction, Health export | Health data may be encrypted depending on settings |
| Garmin | Garmin export, app extraction, legal process | FIT files can be especially valuable |
| WHOOP | Account export, API, or legal process | Cloud-first platform; provider return may be strongest source |
| Samsung | Samsung Health app/cloud routes | Often paired with Android mobile extraction |
| Oura | Oura cloud export/API/legal process | GDPR considerations may apply |
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.