Ce midi, tentative de reverse engineering de mon 🎧️ Arctis 7 pour essayer de récupérer le niveau de batterie 😁️

⬇️

Pour commencer, on installe le SteelSeries Engine 3 sur une VM Windows, et on connecte le casque à la VM...

SSE3 reconnaît bien le casque affiche bien le niveau de batterie, cool ! 😊️

Maintenant on sort 🦈️ Wireshark pour voir ce que SSE3 et le casque se racontent sur le bus USB… 🕵️

Après quelques minutes d'analyse, il y a clairement une commande que SSE3 envoie en boucle, avec ce qui semble être le niveau de batterie en réponse… On touche au but ! 😏️

AFK je vais manger, ma quiche est prête... 🤤️

(mais on reprend juste après ! 😉️)

Fini de manger, on reprend... 😊️

On va essayer de reproduire les commandes du SSE3 et de lire la réponse du casque en 🐍️ Python... On va utiliser le module hidapi pour ça, c'est plus simple que de se taper directement libusb... 😅️

github.com/trezor/cython-hidap

On commence par tester vite fait dans une console interactive...

Yeah on récupère bien ce qu'on veut ! 😁️

On va faire un petit script 🐍️ Python pour récupérer l'info de manière un peu plus pratique... 😃️

Et voilà, en une pause déjeuner on peut arriver à lire le niveau de batterie d'un casque 😁️

Je ferais peut-être un article un peu plus détaillé sur le sujet dans les prochains jours, on verra si j'arrive à me motiver 😋️

@FLOZz Question à la con : comment détecter ce qui est une commande de ce qui ne l’est pas ?
Je cherche à faire de même avec mon Arctis 5 pour la gestion du sidetone & cie, mais le truc m’envoie des rafales de données (paquet de 5 sur une « commande » côté soft). Et les données sont imbittables, au début je pensais comme toi à du flag/level pour le niveau sonore, mais le truc en hexa varie étrangement sur les 4 niveaux possibles…

@aeris Globalement tout ce qui est envoyé au endpoint de contrôle est une commande. APrès faut encore déterminer où s'arrête le numéro de la commande et où commencent les paramètres.

Pour info, quand j'ai démarré mon casque, j'ai eu une avalanche de paquets que j'ai pas compris, mais à un moment le SSE3 à fini par renvoyer en boucle les mêmes 2 commandes sur lesquelles je me suis concentré.

@FLOZz Là j’arrive à regénérer les « commandes » à chaque fois que je change un settings sur le logiciel. Mais je n’arrive pas à faire correspondre un truc avec l’action faite…

@aeris Je t'avoue que j'ai pas plus creusé que ça sur mon Artcis 7 pour le moment, je me suis arrêté au niveau de batterie. Je me concentre sur les souris en ce moment.

Mais faudra que je regarde comment ça se passe lors de l'envoi des settings au casque... Si ça se trouve c'était ça les trouzmillions de paquets qu'il m'envoyait ^^'

@FLOZz La commande isolée serait 0x04400216c6, mais les valeurs semblent random…

@FLOZz Le niveau 0 est bien 0x0000, le 1 serait 0x0001, ça se gâte avec le level 2 qui devient 0x8001, et on finit avec 3 qui serait 0x0004… 🤷

@FLOZz Les autres commandes sont fixes :
- 0x04400111549b
- 0x068a42002005
- 0x0681430123

Follow

@aeris Tiens c'est marrant, je l'avais noté celle là 😅

· · Web · 0 · 0 · 0
Sign in to participate in the conversation
Mastodon

Server run by the main developers of the project 🐘 It is not focused on any particular niche interest - everyone is welcome as long as you follow our code of conduct!