Tentative de hack du meross mrs100

Bonjour,

Dernièrement j’ai eu un soucis avec l’un de mes interrupteurs meross MRS100 et j’ai eu toutes les peines du monde à le réassocier avec HA. L’appli meross sur mon smartphone n’a pas arrêté de refuser l’association puis n’a pas arrêté de planter au moment de l’association.

Ça m’a passablement énervé et ça m’a fait repenser au fait que cet interrupteur utilise un cloud externe et que ça aussi ça m’agace fortement. Quelle est la nécessité de passer par un cloud pour fermer ou ouvrir mes volets ??? Et surtout, pourquoi est-ce obligatoire ???

Alors j’ai décidé d’ouvrir la bête et de regarder comment c’était fait.

Ce truc en haut à gauche ressemble à s’y méprendre à un ESP-12S WiFi Module Based on ESP8266

Du coup je me dis qu’il y a peut-être moyen de faire un peu de reverse dessus. Au moins déjà dans un premier temps de me connecter sur l’esp et de télécharger le firmware actuel sur mon PC. Je verrai ensuite ce que je ferai.

Alors j’ai tiré sur la plaque du dessus et voici le résultat :

Là je me suis dit : ce serait vachement bien si les connecteurs entre les deux contenaient VCC, GND, RX et TX… Bon les deux premiers c’est quasiment sûr, quant à TX et RX, pas sûr. Mais bon, ça se tente. (Oui, je sais que les pins sont directement accessible sur l’esp, mais les soudures sont beaucoup trop petites pour mes gros doigts et mon fer à souder.)

Test suivant, j’ai branché le module sans la plaque du dessus au secteur et j’ai mesuré les tensions entre les 8 pins :

Et voici ce que j’ai obtenu (borne - du multimètre sur pin colonne de gauche, borne + sur pin ligne du haut) :

PIN 1 2 3 4 5 6 7 8
1 0 -5.09 -5.09 0 0 0 -5.02
2 -5.09 -5.09 0 0 0 -5.02
3 0 5.09 0 5.09 0.07
4 5.09 0 5.09 0.07
5 0 0 5.02
6 0 0
7 -5.02

J’en suis là. Donc la dedans, il y a VCC et GND.

Le PIN 6 semble n’être relié à rien du tout sans la plaque du dessus.

Des aficionados de l’électronique pourrait-ils m’aider à avancer ?

N’est-il pas possible de modifier la configuration pour utiliser un broker MQTT local au lieu du broker de Meross puis utiliser l’intégration meross lan ?

C’est possible sur certaines prises et ça marche bien.

Je vais creuser cette piste.

Là j’en étais à intercepter des trames de connexion au réseau avec airodump-ng pour déchiffrer le contenu des message envoyés via wireshark puisque je connais mon ssid et la clé WPA.

J’ai réussi ensuite à intercepter des trames http envoyées en clair depuis mon appli sur mon tel vers l’interrupteur. C’est du POST avec une payload json.

J’ai rejoué la trame avec curl et tadam ! Les volets se sont ouverts. Sauf qu’après ils ne voulaient plus répondre…

J’ai alors compris que dans l’entête json, il y avait une clef tournante :

{"header":{"from":"http://IP_volet/config","messageId":"e0db3a505e4a281b6e3df6859c6d46fd","method":"GET","namespace":"Appliance.System.All","payloadVersion":1,"sign":"fa11da9a96444e4532a39582aaa31157","timestamp":1762029276,"triggerSrc":"AndroidLocal","uuid":"24120943854657702001c4e7ae1154b6"},"payload":{}}

À mon avis « sign » est une signature calculée avec une clé propriétaire. Le grall serait de trouver la clef et le protocole de chiffrement permettant de signer le message.

Mais je vais jeter un oeil à ce que tu proposes, ce serait plus simple et plus rapide.

Cela étant, si tu voyais tous les échanges que j’ai interceptés entre les interrupteurs et le cloud alors qu’aucune action n’est demandée… Peut-être d’ailleurs contiennent-elles des mises à jour de code tournant, je ne sais pas, mais c’est chiant de voir toutes ces communications en lesquelles je dois avoir une confiance aveugle… Moi, je suis peut-être un peu parano, mais j’ai toujours l’impression d’avoir plein de chevaux de Troie chez moi…

Bah je le sais, j’ai déjà regardé mais bon c’est un peu pareil avec mon téléphone,ma télévision, ma tablette, etc :rofl:

Je t’avoue que j’ai un peu du mal avec cet argument. Alors je vais en faire une tartine mais ne le prends pas mal, c’est plus pour tous ceux qui nous liraient que pour toi que je l’écris. C’est un peu un manifeste, et au fond de moi, je pense que tu es déjà d’accord avec tout ça.

Il y a un autre argument de ce type qui me déplaît tout autant, celui qui dit : « ben si on n’a rien à cacher…etc… ». Pour cet autre argument d’ailleurs, j’avais suivi une conf sur la sécurité où le gars avait répondu quelque chose qui m’a beaucoup plu : « Oui, c’est vrai, on n’a rien à cacher. D’ailleurs il fait bon là, non ? Il fait même chaud. Allez, tout le monde à poil ! …(petit silence avec un sourire dans l’amphi)… Ah ! Finalement on a peut-être quelque chose à cacher. Ça s’appellerait même peut-être notre vie privée… »

Pour le téléphone et la tablette, il existe des solutions que je connais déjà. Idem pour l’ordinateur et plein d’autres trucs. Pour la télé je n’y ai pas encore réfléchi.

Pour mes appareils « chiants », je peux déjà les isoler sur un vlan à part pour ajouter une couche de sécurité. Ce qui n’empêche pas les appareils d’envoyer des infos perso ailleurs (enfin si, on peut les empêcher, mais évidemment, certains services ne fonctionnent plus quand on le fait).

Mais la vrai question que je me pose, c’est : pourquoi est-ce aussi chiant de faire en sorte de protéger sa vie privée ? Pourquoi, alors que c’est tellement simple de le faire, ne nous proposent-ils pas d’emblée une solution qui nous permette d’être indépendants ? La réponse est très simple : parce qu’ils ont clairement un intérêt à ne pas le faire. Maintenant quel intérêt, à la limite je m’en fous et je ne me lancerai pas dans des théories la dessus puisque ce ne seront que des théories, mais j’ai le droit de vouloir garder privée… ma vie privée. Certains fabricants jouent le jeu : par exemple le shelly EM, il expose une page web avec toutes les infos accessibles sur le réseau local : si tu le coupes du www, il fonctionne très bien et je trouve ça normal.

Et donc pour en revenir à ton constat, ben non, je n’ai pas envie de jeter l’éponge, j’ai pas envie qu’on me foute à poil sans rien dire :wink: Et je remercie tous les projets que d’autres ont partagé et qui m’ont permis de progresser dans cette voie (linux, HA, lineageos, openwrt, pfsence, prusa, nextcloud, iredmail, …etc… la liste est longue et c’est tant mieux :slight_smile: )

Donc pour en revenir au sujet, je n’ai pas réussi à paramétrer un brocker mqtt local. Mon Meross LAN me propose bien l’option mais je n’arrive pas à la faire fonctionner. Donc je vais poursuivre dans l’autre voie et si j’y arrive, ce sera un pas de plus pour toute la communauté puisque je partagerai ma trouvaille :slight_smile: (Si j’y arrive…)

Encore une fois, ne le prends pas pour toi, c’est juste un manifeste pour bousculer les consciences. Moi aussi j’ai déjà tenu ce genre de raisonnement (et aussi celui du j’ai rien à cacher…). En parfois, pendant 15 jours je me rebelle et je fais plein de trucs pour me rhabiller un peu :smiley:

Bonjour,
si tu veux du local, sans accès au cloud , prends du Shelly WiFi ou passe au Zigbee.

Trop long à lire …

A chacun de choisir ses outils, technologies et solutions pour éviter cela.

Comme mentionné plus loin, il faut passer sur du Zigbee ou rester sur du wifi mais bloquer toutes les communications vers l’extérieur. Aujourd’hui ça se fait facilement avec n’importe quel routeur bas de gamme.

Je crois que j’avais suivi ces instructions : Meross via MQTT local

J’avais configuré les prises, puis ensuite, j’avais installé l’intégration : Meross LAN. Cette dernière n’est pas obligatoire, ça évite juste à se taper la configuration MQTT à la main.

Cela avait fonctionné sur 5 prises que je voulais recycler. Je n’ai pas ensuite regardé si ça continuait de discuter avec l’extérieur car je les avais directement bloquées au niveau du routeur.

Salut,

La question est centrale dans tout ce qui est connecté mais la réalité est aussi que la grande majorité des gens ne saurait pas gérer ça en local… le consommateur de base, il achète une prise connectée, une caméra ou une sonnette vidéo… il veut la brancher et que ça marche par son téléphone de la maison et en dehors… ça peut sembler bête mais c’est la réalité.
Alors oui y’a des Amazon ou Google qui aiment collecter des données, mais pas certain que tous ont ce but là, vendre des abonnements pour du stockage est surement une des grosses raisons aussi, mais le plus gênant dans les objets connectés par cloud, c’est les boites qui disparaissent du jour au lendemain ou coupent leurs serveurs, briquant leurs appareils (Bose, Spotify, Apple.. et plus récemment Boks, Flippr,…)

Certaines marques ouvrent leurs API sur le réseau local et si on a la volonté de se passer du cloud, il faut acheter en conséquence. C’est aussi pour ça que Zigbee et équivalents ont de l’intérêt.

Bonjour,

Il faut essayer avec un ohmmètre entre les bornes de l’esp (s’il s’agit bien d’un esp8266) et les pin du connecteur. Les bornes de l’esp sont connues, donc s’il y a continuité c’est identifié !

Merci.

– Résistances avec GND de l’esp :

  • 1066 pour 1 et 2
  • résistance nulle sur 3 et 4 : bons candidats pour GND. (idée pour plus tard : ça me fournit la réf GND si je veux jouer avec un analyser logique sur ces 8 broches en mettant l’appareil complet sous tension.)
  • 1889 pour 5
  • infinie pour 6
  • 1966 pour 7
  • 452 pour 8

– Résistances avec Vin de l’esp (je ne trouverais pas de résistance nulle avec Vin parce que forcément, il y a un abaisseur de tension entre le 5v et le Vin qui doit être de 3.3v. D’après mes mesures de tension, les candidates pour l’alim sont les bornes 1, 2, 5 et 7.)

  • 583 Ohm pour les bornes 1 et 2. Je miserais bien sur l’une de ces bornes pour Vin.
  • 670 sur 3 et 4
  • infinie (1) pour 5, 6 et 7
  • 1239 pour la 8

– Résistances avec tx (gpio01) :

  • 1443 avec 1 et 2
  • 1368 avec 3 et 4
  • infinie avec 5, 6 7 et 8

– Résistances avec rx (gpio03) :

  • toutes infinies…

Bon, j’ai craqué, j’ai soudé des petites fils pour pouvoir accrocher mes pinces.


Le petit fil du gnd a lâché mais comme je l’avais repéré sur les broches 3 et 4, je l’ai récupéré ailleurs.
Déjà, ça s’allume.

Mais :

$ esptool  --port /dev/ttyUSB0 flash_id
esptool.py v4.7.0
Serial port /dev/ttyUSB0
Connecting......................................

A fatal error occurred: Failed to connect to Espressif device: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html

J’ai essayé de shunter le gpio0 avec gnd avant le branchement (avec ma 18ième main… :sweat_smile:), la diode du bas s’est mise à clignoter en rouge, le stick usb2ttl s’est mis à bavarder (diode qui clignote), mais toujours le même résultat.

J’arrête là pour aujourd’hui. J’aurais bien aimé récupérer un dump du firmware…

Salut,

C’est bon signe que ça clignotte côté USB.

Dans les boulettes qui me sont arrivées dans ce genre de tentatives:
on ne voit pas bien sur la photo, Tx et Rx sont bien connectés, les fils ne se touchent pas?
Le cable USB marche pour d’autres modules?
Y’a un jumper 3,3V/5V sur le usb2ttl?

Après c’est possible que ce ne soit pas un ESP12s, mais une carte avec un autre pinout

Bonsoir,

Bon j’ai peu de temps en ce moment mais j’ai un peu avancé. D’abord je me suis demandé si les port tx et rx n’avaient pas été swappés mais cela n’a rien donné.

Aujourd’hui, j’ai eu l’idée lumineuse d’enlever le blindage et il était temps que je le fasse… Ce n’est pas un esp. C’est du RTL (le petit crabe) : RTL8710CM 01EP3C1 G005A2 avec une puce de mémoire flash BoyaMicro 25Q32BSTIG (4MB). Donc c’est avec ça qu’il va me falloir communiquer.

Du coup j’ai fait quelques recherches et il va falloir que je me tourne vers le projet ltchiptool que je ne connais pas encore.

La suite au prochain épisode. Et comme toujours, si vous avez des idées, je suis preneur. (D’ailleurs qqun dans ce fil de discussion avait émis le warning selon lequel ce n’était peut-être pas de l’esp, ce qui est désormais confirmé.)

Le RTL8710CM n’est pas supporté par esphome ni LibreTiny (et sur les autres RTL le support semble partiel…). Le plus simple et fiable serait probablement de souder un ESP à la place.

C’est en dev en tout cas: https://github.com/libretiny-eu/libretiny/issues/44

Mais t’auras plus vite fait de remplacer par un esp en effet, c’est pin compatible.

Sinon pour trouver tes rx/tx le plus simple maintenant que tu as viré le shield, c’est de tester la continuité avec les pads du module.

Merci @Jeremyl et @KipK, je mets vos remarques dans ma boîte à idées. Plutôt intéressante l’idée de changer par un esp. Bien que cela me donne pas mal de taf si je dois faire ça pour tous mes volets.

Pour l’instant j’emprunte un autre chemin. J’ai mis la main sur un CH341A avec une pince et je vais dumper la puce mémoire BoyaMicro. Ensuite je fouillerai mon dump pour voir si je choppe des trucs inintéressants : genre une clef de chiffrement qui me permettrait de simplement utiliser des commandes curl comme j’ai réussi à le faire une fois. Si j’y arrive, je n’ai plus qu’à isoler mes interrupteurs de tout accès externe sur le réseau à part les commandes envoyées pas home assistant.

Par contre, je me demandais si au lieu d’utiliser la pince, il ne vaudrait pas mieux dessouder la puce pour éviter d’alimenter le reste du circuit qui risque d’entrer en interaction avec la puce pendant que j’essaie de la dumper.

Tu dois pouvoir le reflasher depuis le port que tu as montré.

J’ai vu tout à l’heure qu’il y avait un framework Arduino pour cette puce. Au pire tu te refais le programme sous Arduino, c’est pas méchant

Faudra peut être flasher un autre bootloader par contre.