Skip to content

Conversation

@ganeshbs17
Copy link
Contributor

@ganeshbs17 ganeshbs17 commented Jan 12, 2026

This PR consolidates new artifact support for fitbit app on Pixel Watch (Wear OS) full file system extractions into the existing fitbit.py parser.

Instead of creating separate scripts, this update adds a new function get_fitbit_wearos to the existing module. This allows the parser to intelligently handle both legacy Android mobile data (activity_db, etc.) and the newer Wear OS SQLite databases found on watches.

Changes:

Updated artifacts_v2 to register FitbitWearOS targeting user.db* and passive_stats.db*.

New Data Supported:

1. Fitbit Passive Stats

Source: */com.fitbit.FitbitMobile/databases/passive_stats.db*

Purpose

Parses high-frequency, locally buffered sensor data, commonly present on Pixel Watch devices (Wear OS ).

Data Extracted

  • GPS Trackpoints
    • Raw latitude/longitude points from ExerciseGpsEntity
  • Heart Rate (High Resolution)
    • HeartRateStatEntity
    • OpaqueHeartRateEntity
  • Active Zone Minutes (AZM)
    • PassiveAzmEntity
  • Workout Parent Records
    • ExerciseSummaryEntity (session-level context)

2. Fitbit User Database

Source: */com.fitbit.FitbitMobile/databases/user.db*

Purpose

Establishes user attribution

Data Extracted

Attribution

  • User profile details from FitbitProfileEntity
    • Name
    • Date of Birth
    • Fitbit User ID

Activity

  • Confirmed workout sessions from ActivityExerciseEntity

- Introduces parsing for `passive_stats.db`, primarily found in Pixel Watch and Wear OS extractions.
- Parses `ExerciseSummaryEntity` for workout context (Running, Walking, etc.).
- Extracts raw GPS trackpoints from `ExerciseGpsEntity`.
- Extracts high-frequency heart rate data from `HeartRateStatEntity` and `OpaqueHeartRateEntity`.
- Note: This DB often acts as a raw sensor buffer on Wear OS devices.
- Introduces parsing for `user.db` for profile and activity attribution.
- Parses `FitbitProfileEntity` for user identity (Name, DOB, User ID).
- Parses `ActivityExerciseEntity` for logical workout history.
- Implements JSON parsing for `SedentaryDataEntity` to extract granular hourly step counts.
@stark4n6
Copy link
Collaborator

@ganeshbs17 both paths seem too generic, can you narrow the scope down to the bundle folder? Also we already have Fitbit parsers I believe, would you be able to add to the current set?

@ganeshbs17
Copy link
Contributor Author

ganeshbs17 commented Jan 12, 2026

Thanks for the review @stark4n6 !

I initially planned to keep these separate as they target specific database structures found in Wear OS (Smartwatch) extractions, which differ from the standard Android app data.

However, I completely get your point.. since the package name com.fitbit.FitbitMobile is identical for both the Smartphone and Wear OS versions, it makes sense to consolidate them.

I will merge the Wear OS logic into the existing scripts/artifacts/fitbit.py so the artifact can intelligently handle both Phone and Watch databases within a single parser.

- Consolidate Pixel Watch/Wear OS logic into a single function `get_fitbit_wearos` within `fitbit.py`.
- Register `FitbitWearOS` artifact in `__artifacts_v2__` to target both `user.db` and `passive_stats.db` (including WAL files via wildcard).
- Preserve existing `get_fitbit` function for backward compatibility with Android smartphone extractions.
- Add granular reporting with forensic descriptions for all 13 Wear OS tables (User Profile, Heart Rate, GPS, AZM, etc.).
@ganeshbs17 ganeshbs17 marked this pull request as draft January 13, 2026 03:26
@ganeshbs17 ganeshbs17 changed the title Add Fitbit/Pixel Watch Artifacts: passive_stats.db & user.db Merge Wear OS/Pixel Watch parsers into fitbit.py Jan 13, 2026
@ganeshbs17 ganeshbs17 changed the title Merge Wear OS/Pixel Watch parsers into fitbit.py Add Pixel Watch (Wear OS) support to fitbit.py Jan 13, 2026
@ganeshbs17 ganeshbs17 marked this pull request as ready for review January 13, 2026 05:53
Add map visualization to report
@stark4n6
Copy link
Collaborator

@ganeshbs17 Check out the linter errors, not sure if they are from your updates or if they were residual issues from previous iterations

@ganeshbs17 ganeshbs17 marked this pull request as draft January 13, 2026 15:18
@ganeshbs17
Copy link
Contributor Author

Fixed linter errors

Screenshots from report

Screenshot 2026-01-13 214846 Screenshot 2026-01-13 215649 Screenshot 2026-01-13 215415 Screenshot 2026-01-13 215312

@ganeshbs17 ganeshbs17 marked this pull request as ready for review January 13, 2026 16:33
@stark4n6 stark4n6 merged commit 2793e7a into abrignoni:main Jan 30, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants