Section index
Reviving the Naked Mirror
A BLE reverse-engineering diary
I own a Naked Labs 3D body scanner. Naked Labs shut down their cloud service in October 2023, rendering the hardware non-functional. This series documents my personal recovery of the device for my own use, published by Squirreleye LLC for other owners in the same situation.
00–08 9 sections
Session 2026-05-03
- 00 Reviving the Naked Mirror: a BLE reverse-engineering diary
- 01 "The value's length is invalid": when iOS refuses to send your BLE write ERRATA
- 02 The 10-second timeout that fired in 2
- 03 Notifications only fire on change, and the mirror was already broken
- 04 I had the scan sequence backwards
- 05 NO_SCANNER_WIFI, and the trap of reading bytes in two number bases
- 06 The diagnostic step that was poisoning every run
- 07 Credentials belong at runtime, not in source
- 08 When the diagnostic goes silent, audit instead of iterate
09–15 7 sections
Session 2026-05-16
- 09 Versioned logs and a streaming pipeline: closing the iteration loop
- 10 Twelve networks and a null byte
- 11 Cloud token, hardcoded cloud: the upload URL was never mine to set
- 12 The precondition gate I wasn't checking
- 13 The prompt that stopped me
- 14 How I got back into my own Naked Labs mirror
- 15 Five hypotheses I was wrong about, and a key on the cmdline
16–26 11 sections
Session 2026-05-17
- 16 Forty seconds of the scan FSM, and where to mock the cloud
- 17 The blown-out view, and the lab to catch it
- 18 Reading the APK's colors out of res/values/colors.xml
- 19 Rebuilding Compare from the APK's layout_compare.xml + smali
- 20 Sparklines on KEY STATS, L/R-split cards on MEASURE
- 21 Scan flow chrome: one icon-title-body-action shape, applied seven times
- 22 First-scan walkthrough: extracting the prep content from APK strings.xml
- 23 MoreTab + HistoryView: the dark-list pattern in SwiftUI
- 24 Deleting bad scans, and the centroid that forgot its rotation
- 25 Bringing measurements into HealthKit, and parking settings on the mirror box
- 26 TestFlight, the bundle-id doppelganger, and one curl that fixed a missing year