Cela fait quelque temps que j’ai réuni un peu de matériel pour m’initier au hardware hacking. Par manque de temps, je n’avais pas encore eu l’occasion de m’y mettre. Mais aujourd’hui, c’est décidé, je me lance !
Pour cette initiation, j’ai mis la main sur un TP-Link MR6400 et j’ai tenté de m’y connecter en UART afin de voir ce qu’il s’y passe.
Bien sûr, il s’agit d’une première expérience personnelle, et je sais que cela n’a rien de transcendant pour les plus expérimentés ! Mais pour moi, ce fut un défi passionnant : j’ai appris comment fonctionne la communication série, j’ai soudé sur une carte-mère et utilisé pour la première fois un analyseur logique. Tout un programme.
Le matériel
Parce que j’aime avoir tout sous la main avant de commencer quelque chose, il m’a fallu un peu de temps pour réunir le nécessaire. Mais qu’à cela ne tienne, j’ai enfin rassemblé tout ce qu’il me fallait (ou plutôt tout ce que j’avais envie d’avoir).
USB to TTL (CP2102)
Le CP2102 est un convertisseur USB vers TTL (Transistor-Transistor Logic) qui permet d’établir une communication série entre un ordinateur et des périphériques électroniques (microcontrôleurs, modules ESP8266/ESP32, Arduino sans USB natif, etc.).
Analyseur logique
C’est un outil de diagnostic qui permet de capturer, visualiser et analyser des signaux numériques provenant de circuits électroniques. Il est utile pour déboguer des communications série (UART, SPI, I2C) ou vérifier l’état des broches d’un microcontrôleur.
Mon petit poste à souder
Un poste à souder permet de réaliser des connexions solides entre des composants électroniques à l’aide d’étain (soudure).
Le multimètre
Il permet de tester, diagnostiquer et dépanner des circuits en mesurant différentes grandeurs électriques telles que la tension (V), le courant (A) et la résistance (Ω). Je l’utilise principalement pour deux fonctions :
- Mesure de la tension
- La fonction de mesure de tension permet de vérifier l’alimentation d’un circuit ou diagnostiquer des problèmes électriques.
- Test de continuité
- C’est une fonctionnalité pour s’assurer qu’un circuit n’est pas coupé (qu’il y a bien une connexion entre deux points).
1 – A quoi ai-je affaire ?
Pour bien commencer, je me renseigne sur le TP-Link en question. Il s’agit d’un MR6400, version 5.
Je trouve des informations intéressantes :
- Open WRT
- Etapes pour ouvrir le boitier sans tout défoncer.
- Informations relatives à la connexion série.
À partir de là, je comprends qu’il est possible de se connecter, mais il n’y a pas de pinout disponible. À moi de le découvrir, cool !
Carte-mère
En effectuant quelques recherches, j’identifie les 4 points comme étant les connexions UART.
Étant novice en la matière, j’ai regardé de très bonnes chaînes YouTube qui m’ont aidé à comprendre comment identifier et calculer le pinout :
Et un super article montrant les différentes apparences possibles de l’interface UART :
2 – Pinout UART
Maintenant que je sais à peu près où chercher sur le PCB, j’utilise mon multimètre pour mesurer la résistance entre différents points (sans alimenter le PCB).
Ensuite, une fois les résistances des 4 points connues, je mesure la tension. Si vous souhaitez tout comprendre en détail, je vous invite à regarder la vidéo de Make Me Hack ci-dessus.
Le résultat se présente sous la forme d’un petit tableau récapitulatif :
Mémoire flash
Au passage, je prends les références de la puce mémoire et je cherche sa datasheet. Cela me permettra, dans un deuxième temps, d’utiliser mon T48 pour dumper le firmware du TP-Link.
La référence de la puce étant QH64A-104HIP, en trouvant le pinout, je peux déterminer où se trouve le VCC sur celle-ci.
Le VCC étant l’alimentation, je peux ensuite faire un test entre le VCC de la puce et le VCC sur les 4 points pour déterminer lequel des 4 points est le VCC.
Make Me Hack explique très bien cette étape ici (à partir de 10.33″):
Pour résumer, voici le pinout UART du MR6400 V5
3 – Accès UART
Les points de connexion étant bien identifiés, il m’a semblé raisonnable de souder 3 fils dessus afin de les relier à mon adaptateur USB-TTL.
Soudure
J’aime bien souder et désouder, et bien que je manque encore de pratique, l’exercice est à la fois amusant et très instructif. Après quelques minutes et une bonne dose de flux, les connexions TX, RX et GND sont effectuées.
Je branche ensuite :
- TX du PCB → RX de l’adaptateur
- RX du PCB → TX de l’adaptateur
- GND → GND
RX et TX représentent les lignes Réception (Receive) et Transmission (Transmit) dans une communication série (comme UART).
- TX (Transmission) envoie des données.
- RX (Réception) reçoit des données.
Lorsque deux dispositifs communiquent entre eux (par exemple, un microcontrôleur et un PC), le TX du premier appareil doit être connecté au RX du second appareil, et vice versa. Cela permet à chaque appareil d’envoyer et recevoir des données de manière correcte :
Le RX de l’émetteur doit recevoir les données envoyées par le TX du récepteur.
Le TX de l’émetteur envoie les données que le RX du récepteur doit recevoir.
4 – Putty
Je configure Putty en mode série sur mon PC, avec un baud rate de 115200 bit/s.
Et là, « magie » : j’ai la possibilité de lancer un prompt en appuyant sur Enter.
Le shell me demande un login et un mot de passe pour m’y connecter. Je fais donc une recherche sur Google et je tombe sur cet article qui indique que le login est admin et le mot de passe est ‘1234’.
Je suis connecté !
Voilà, ce fut une petite expérience amusante et très instructive. Grâce à mes recherches, j’ai appris pas mal de choses.
Petit bonus : analyseur logique
Je n’ai pas résisté à l’envie de connecter mon analyseur logique pour commencer à comprendre comment utiliser PulseView.
PulseView est un logiciel open-source qui permet d’analyser des signaux numériques capturés à l’aide d’un analyseur logique. Il permet de visualiser et de décoder les signaux en temps réel, facilitant ainsi le débogage et l’interprétation des communications série, SPI, I2C, et bien d’autres. Avec PulseView, il est possible de transformer les signaux bruts en informations exploitables sous forme de graphiques et d’annotations.
Export de pulseview
J’ai tout de même créé un petit script Python qui permet de reconstruire l’export pour plus de lisibilité, dans le sens où je peux désormais effectuer une recherche par mot-clé :
Le code python
# Ouvrir le fichier exporté depuis PulseView
with open("rxdata.txt", "r") as file:
lines = file.readlines()
result = ""
# Parcourir chaque ligne et extraire les caractères après "UART: RX data:"
for line in lines:
if "UART: RX data:" in line:
result += line.split(":")[-1].strip()
# Écrire le texte reconstruit dans un nouveau fichier
with open("output_reconstruit.txt", "w") as output_file:
output_file.write(result)
print("Fichier 'output_reconstruit.txt' généré avec succès.")
Prochaine étape
L’extraction du firmware avec le T48.
Laisser un commentaire