I am trying to sniff the connection between my Garmin fitness watch and the Garmin app on my Android phone. I can see the advertisements, and when I initiate pairing I can see the pairing happening. But once the encrypted connection is established, Wireshark only shows a series of “Encrypted packet decrypted incorrectly (bad MIC)”. I know traffic is occurring because I can see my heart rate on the phone. I have read a number of similar cases on DevZone and I have not seen a solution.
Here is my process:
- From the phone, ensure that the watch is not paired.
- Plug the nRF52840 dongle into a USB extension cable, and plug the cable into a USB port on the computer. The cable is to allow me to place the dongle between the watch and the phone, but it makes no difference if I plug the dongle directly into the computer.
- Launch Wireshark. I start to see advertising traffic.
- Select my watch in the Device dropdown.
- Initiate pairing from the watch. Then from the phone app, I have to click “add device”.
- The watch displays a 6 digit code. I enter that code in Wireshark as a “Legacy Passkey” and press enter, then enter the same code in the phone app.
- At this point I can see much traffic in Wireshark, including “Sent Pairing Request”, “Received Pairing Response”, several sets of “Sent Pairing Confirm” and “Rcvd Pairing Confirm”, “Sent Pairing DHKey Check” and “Rcvd Pairing DHKey Check”, LL_ENC_REQ, LL_ENC_RSP, and LL_START_ENC_REQ. But as soon as the LL_START_ENC_REQ is sent, everything after that is “Encrypted packet decrypted incorrectly (bad MIC)” and eventually there are no more packets.
A Wireshark capture is attached. The problem occurs at packet 6066.
Here is my setup.
Windows 11
nRF52840 Dongle with nRF Sniffer for Bluetooth LE version 4.1.1
Wireshark 4.0.2
What can I do to be able to see to traffic once pairing is complete?