Practical Introduction to BLE GATT Reverse Engineering: Hacking the Domyos EL500 (2023)
jcjc-dev.com
jcjc-dev.com
https://developerhelp.microchip.com/xwiki/bin/view/applicati...
It's what happens when a product developer already has a design for a previous gen and needs to add "smart" with minimum effort, so they throw a Microchip UART to BLE gateway chip in. The chip basically just does single byte UART over BLE over a pair of characteristics, which is very much an impedance mismatch with how BLE is designed to work. That's why some of the things seem to not align with the spec and why the protocol seems so stateful.
On the plus side, it means de-compiling the android app is very helpful as there will be a parser for the binary protocol. It's also easier to work with for RE in some senses as the actual bluetooth code required is minimal (set up a notification and read the RX characteristic, write another). If you are ok with opening things, you can also use a USB serial adapter to trace the UART traffic between the gateway chip & the control IC (there's an AT style protocol that's all well documented).
Fundamentally, it's probably either some basic hardcoded request/reply, or there's a "send me x datavalue every x seconds" command packet. Once you've got both sides of the UART, it will hopefully be fairly clear. Might even be plain ASCII...
There's various bits and pieces on github that might be helpful, and Microchip have some developer tooling.
If anyone knows how to decode FitShow UART protocol or has some ideas, please share your thoughts :)
Also, those Microchip modules are an expensive way to add bluetooth to something (trading dev time for BOM) - I would be surprised to see them in any mass produced or cost optimised design.
Generally, best bet is probably to run jadx over the android app and go from there.
That said, it looks like the FitShow module supports FTMS (standard Bluetooth fitness profile). In that case, fantastic, you should be able to use any off the shelf FTMS bluetooth library to pull data from it. No UART required.
I went the Android Bluetooth HCI snoop log + Wireshark route.
I wrote a Wireshark protocol dissector for that specific BLE protocol which you can use with the Android BT logs: https://github.com/kaechele/bonaparte/blob/main/contrib/wire... I found this extremely valuable when debugging, because it allows me to visualize both the packets the OEM app sends and compare this with what my library sends over the air.
I ended up documenting my findings here: https://bonaparte.readthedocs.io/
BLE hacking is pretty fun.
https://www.bluetooth.com/specifications/specs/fitness-machi...