vendredi 16 octobre 2026

Analyse du trafic d'un réseau Bluetooth

 Ordinateur de plongée D-TWIN


D-TWIN est un ordinateur de plongée conçu par BlueEdge. Une entreprise Italienne qui a aussi développé un logiciel (win/linux) qui permet de télécharger les fichiers de plongées, mettre à jour le firmware de l'ordi.







L'entreprise a cessé ses activités. J'ai toujours eu des problèmes à télécharger les plongées. C'était très long, arrêt du téléchargement au milieu d'une plongée, timeout.


Analyse du traffic


La communication se fait via bluetooth. J'ai décidé d'analyser le traffic réseau afin d'être en mesure de définir le protocole et refaire l'application.

La commande suivante a été lancé: btmon -w dtwin-capture.btsnoop


J'ai lancé leur application et j'ai cliqué sur Search devices.


HCI Event: Remote Name Req Complete (0x07) plen 255                                                                                                                                                                                                                                                   #7 [hci0] 56.161354
        Status: Success (0x00)
        Address: 00:13:43:04:58:5C (Matsushita Electronic Components (Europe) GmbH)
        Name: D-TwinPRI_85C

L'ordinateur avait été détecté. J'ai cliqué sur Log

RFCOMM: Unnumbered Info with Header Check (UIH) (0xef)
         Address: 0x0b cr 1 dlci 0x02
         Control: 0xef poll/final 0
         Length: 4
         FCS: 0x9a
        47 54 44 4c 9a                                   GTDL.

Première trouvaille, GTDL

RFCOMM: Unnumbered Info with Header Check (UIH) (0xef)
         Address: 0x09 cr 0 dlci 0x02
         Control: 0xef poll/final 0
         Length: 10
         FCS: 0x40
        44 56 54 4f 54 30 30 32 31 37 40                 DVTOT00217@

Deuxième trouvaille DVTOT00217

RFCOMM: Unnumbered Info with Header Check (UIH) (0xef)
         Address: 0x0b cr 1 dlci 0x02
         Control: 0xef poll/final 0
         Length: 4
         FCS: 0x9a
        47 54 4e 58 9a                                   GTNX.

RFCOMM: Unnumbered Info with Header Check (UIH) (0xef)
         Address: 0x09 cr 0 dlci 0x02
         Control: 0xef poll/final 0
         Length: 36
         FCS: 0x40
        44 56 30 30 32 39 33 32 30 32 36 31 30 31 30 31  DV00293202610101
        34 30 36 31 37 30 31 36 38 30 30 33 30 30 32 31  4061701680030021
        30 30 31 32 40                                   0012@
...
...

Commande du protocole

CommandeDesscriptionRéponse
GTDLDemande le nombre de plongée DVTOTxxxx :xxxx étant le nombre de plongée
GTNXDemande le résumé de la plongée DVxxxx : xxxx étant le num de plongée, sommaire de la plongée
GTNVMet l'ordi en mode sélection DVNUM : Attent un numéro de plongée
DV00267Demande la plongée 267 DVSTART: info complète de la plongée
GTRNDemande la prochaine plongée DVLOG: sommaire de la plongée

 DVG: gas switch

 END: fin de la plongée

Il y avait un délai de prêt de 2 secondes, quand on demandait toutes les plongées à chaque plongée.

Sommaire de plongée

DVLOG0145602151616124
L'information peut être décomposé comme ceci: DVLOG | 01456 | 0215 | 1616 | 124

01456 étant le nombre de seconde depuis le début de la plongée
0215 est la profondeur en mètre
1616 est la température, 16.16 degré celcius
124 l'utilité est encore inconnue

Info complète de plongée

DVSTART0026720260620101701+010310631105007002100000516640102
L'information peut être décomposé comme ceci: DVSTART | 00267 | 20260620101701 | +0103106311050070 | 021 | 00 | 000516640102

00267 étant le numéro de la plongée
20260620101701 est la date de départ de la plongée
0103106311050070 l'utilité est encore inconnue
021 est le gas de début en oxygène
00 est le gas de début en hélium
000516640102 l'utilité est encore inconnue

Les informations obtenues ont permis de comprendre la communication et de la reproduire dans une nouvelle application. Il reste encore du travail à faire concernant les champs inconnus. 

La nouvelle application a été écrite en C++ avec le framework Qt. Elle est fonctionnelle sous Linux. Qt supporte RFCOMM via QBluetoothSocket, mais cela n'est pas supportté pour tous les os, backend.

Qt's Linux BlueZ D-Bus backend mentionne:
Connecting to port is not supported via Bluez DBus

L'approche de Linux sockets a été utilisé. Du travail doit être fait pour la faire fonctionner sous Windows. La nouvelle application est plus efficace pour télécharger les plongées.





Aucun commentaire:

Enregistrer un commentaire

Analyse du trafic d'un réseau Bluetooth

  Ordinateur de plongée D-TWIN D-TWIN  est un ordinateur de plongée conçu par BlueEdge . Une entreprise Italienne qui a aussi développé un l...