Follow

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

⬇️

· · Web · 3 · 5 · 2

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 ! 😊️

Show thread

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 ! 😏️

Show thread

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

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

Show thread

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

Show thread

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

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

Show thread

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

Show thread

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 😋️

Show thread

@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é.

@aeris
Si jamais t'as des screens de tes paquets capturés, je peux peut être y jeter un coup d'œil, des fois que j'y reconnaisse quelque chose 😅

@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

Show newer

@aeris Au final ça se reproduit chaque fois c'est paquets ? (genre à chaque fois que tu fous le même level, t'as le même résultat ?)

Show newer

@aeris Je me demande si la commande c'est pas juste 0x0440, et si le reste c'est pas des params (genre il envoie toutes les configs en un seul paquet)

@FLOZz J’ai au moins 2 octets qui bougent derrière… Donc ça serait étonnant… 🤔

@FLOZz ah bin tiens je l'ai commandé celui là. Sur Amazon c'est n'importe quoi, le prix varie de 142€ à 250€ selon les jours voire les heures... Et pas dispo ailleurs. Il est bien, tu en es content(e) ?

@linuxine Ouais j'en suis très content, je m'en sert tous les jours en télétravail. 😁

Il est assez confortable et j'aime tout particulièrement le fait qu'il propose 2 sorties audio (une mono pour le voice chat et une stéréo) que tu peux mixer avec l'une des molettes sur le casque. Comme ça je peux mettre ma musique sur la sortie stéréo, et les collègue sur la mono. J'ai juste à jouer avec la molette quand quelqu'un parle pour bien l'entendre. 👍

@FLOZz ah ouais, il fait ça en plus ? c'est trop la classe :D

Et du coup tu voulais le reverse engineering pour quoi ? souci de batterie ? ou c'est pour savoir le niveau ?

@linuxine La batterie dure super longtemps, et comme la diode reste verte tant qu'elle à un niveau > 50% j'ai fini par me demander s'il se chargeait / déchargeait vraiment... 😅

Du coup ouais, je voulais avoir le niveau de batterie sous Linux.

Je vais sûrement essayer de faire une extension GNOME Shell quand j'aurais un peu de temps pour l'afficher... 😀

@FLOZz Cool ! Merci pour les infos, j'ai bien choisi du coup :D

@FLOZz Merci pour ce thread didactique pour les néophytes tels que moi. Ça donne bien envie de jouer. :)

@simounet Si tu veux creuser un peu plus, j'avais écrit un article il y a quelques années sur le reverse engineering de souris... Ça reste le même principe 😁

blog.flozz.fr/2016/03/27/steel

@FLOZz Je ne l'avais pas vu passer celui-là. J'avais suivi ceux sur la GB, dans un autre style.

@simounet Ouais il date un peu c'est pour ça...

Faudra que je m'y remette à la GameBoy... Quand j'aurais fini de jouer avec des casques et des souris x)

@FLOZz J'en profite pour aborder un autre sujet. Pourquoi tronquer ton flux RSS ? Tu souhaites absolument que les gens passent sur ton site ou c'est juste une configuration par défaut ? #RSS4ever

@simounet À la base je voulais pouvoir intégrer des trucs interactifs (js) dans les pages (par exemple mettre un émulateur gameboy en js pour montrer des démos, etc)... comme je suis absolument sûr que ça ne passera dans aucun lecteur RSS, j'avais préféré tronquer... Mais bon c'est vrai que je ne l'ai encore jamais fait faute de temps... 😅

@simounet Ceci dit, si tu y tiens vraiment, ya le flux Atom (un peu planqué c'est vrai...) qui reprend le contenu intégral des articles...

➡️ blog.flozz.fr/feeds/atom.xml

@FLOZz Ok, je comprends et je remplace avec l'Atom. Merci !

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!