Pirater votre porte de garage : 5 étapes
Pirater votre porte de garage : 5 étapes
Anonim
Piratez votre porte de garage
Piratez votre porte de garage
Piratez votre porte de garage
Piratez votre porte de garage
Piratez votre porte de garage
Piratez votre porte de garage

Qui n'a jamais rêvé de rentrer chez lui simplement avec une application téléphonique, ou de pouvoir écouter et recopier des trams de données ? Je suis heureux de pouvoir partager avec vous ce que j'ai réalisé, et comment j'ai procédé. J'ai commencé ce projet après la deuxième fois que j'ai oublié mes clés…

Bien entendu, l'encodage, le type de modulation, la fréquence de la porteuse, les informations de connexion bluetooth, et les données que je vais montrer en exemple ne sont pas d'origine, je préfère ne pas avoir de visiteurs;-).

Cette application s'applique à tout objet capable de recevoir des informations numériques par ondes électromagnétiques (porte de garage, voiture, certains volets…). L'ensemble du système se compose d'un objet connecté par bluetooth à un téléphone, cet objet pouvant envoyer les mêmes trames que la télécommande associée à ce que l'on veut pirater. J'ai placé cet objet dans mon garage, et je peux m'y connecter de l'extérieur.

Étape 1: Équipement

Équipement
Équipement
Équipement
Équipement

Langages utilisés: C++, MATLAB, Typescript, C, html.

Connaissances de base en électronique numérique et télécommunications/traitement du signal.

Coût: moins de 35 $.

Exigences matérielles:

- NooELEC NESDR: pour la capture des données. Ce module très bon marché effectue une démodulation numérique, d'où sa grande portabilité. Ce modèle est compatible avec MATLAB. (18,95 $)

www.nooelec.com/store/sdr/sdr-receivers/nes…

- Wemos Lolin32 lite: cet esp32 est un microcontrôleur pas cher, équipé du Wifi et du Bluetooth. Nous n'utiliserons pas le Wifi dans cette application, mais cela est largement envisageable. (4,74 $)

wiki.wemos.cc/products:lolin32:lolin32_lit…

- CDSENET cc1101: cet émetteur radio nous offre une flexibilité extrême, de la fréquence porteuse choisie au type de modulation. (2,63 $)

www.aliexpress.com/item/2PC-Lot-E07-868MS1…

- Fils, embases, matériel de soudage, batterie lipo 3,7V pour l'autonomie, éventuellement oscilloscope, et/ou analyseur logique pour le débogage, et accessoirement, un smartphone…

Logiciels requis:

- MATLAB/Simulink: pour la capture des données. D'autres logiciels alternatifs gratuits peuvent être utilisés, comme Audacity pour la visualisation des données. (Licence)

fr.mathworks.com/products.html?s_tid=gn_ps

- la chaîne d'outils esp-idf: elle sera utilisée pour programmer l'esp32. L'ide Arduino peut aussi être utilisé, mais il ne laisse pas autant de liberté que ce que nous allons utiliser. (libre)

esp-idf.readthedocs.io/en/latest/get-starte…

- TI SmartRF Studio: cela nous aidera à configurer les registres cc1101, selon nos spécifications. (libre)

www.ti.com/tool/SMARTRFTM-STUDIO

- Ionic: pour construire l'application. Vous pouvez choisir de créer des applications natives, mais Ionic nous permet d'exécuter notre application sur les appareils Android et IOS, avec un seul code. La performance n'est pas recherchée dans notre cas. (libre)

ionicframework.com/

- Votre idée préférée…

Étape 2: Espionner la télécommande

Espionner la télécommande
Espionner la télécommande
Espionner la télécommande
Espionner la télécommande
Espionner la télécommande
Espionner la télécommande

Nous allons commencer par observer les données que produisent les commandes de la télécommande. Pour ce faire, nous utiliserons un dongle et une antenne rtl-sdr:

fr.mathworks.com/hardware-support/rtl-sdr….

En suivant ce lien, vous trouverez le package MATLAB, ainsi qu'un livre gratuit expliquant tous les prix avec leur explication. Pour résumer ce qui nous concerne, les données de transit se présentent sous la forme d'un signal IQ: une donnée en phase « I » combinée à une donnée en quadrature « Q ». Cette méthode facilite les télécommunications. Nous ne nous intéresserons qu'à recevoir le signal en phase. Nous allons maintenant rassembler les informations physiques et numériques sur la télécommande. Si vous pouvez trouver de la documentation dessus, ce sera plus facile. Je n'en ai pas trouvé. Pour pouvoir observer temporellement le signal, il faut d'abord savoir quelle est la porteuse fréquentielle du signal émis. Nous utiliserons l'exemple fourni avec la documentation du package « Analyse spectrale avec RTL-SDR Radio », pour savoir exactement à quelle fréquence on observe une puissance crête lorsque l'on envoie une commande. Dans mon cas, c'est 868,22 MHz. Les fréquences "standard" pour ce genre d'applications sont de l'ordre de 868 MHz.

Avec ces indications, nous pourrons écrire un code MATLAB pour récupérer les données. Celui-ci est joint en photo et commenté. Le résultat nous permet de trouver le type de modulation: en récupérant l'information brute, en affichant le résultat juste après avoir récupéré la partie réelle du signal, on peut en déduire qu'il s'agit d'un ASK/OOK modulation. En effet, on observe que la fréquence est invariante, cependant, le signal n'a que deux amplitudes: une nulle, et une fixe. Le reste du code nous permet de récupérer l'enveloppe du signal reçu, rendue plus facile à lire pour connaître la trame. Une fois affiché, on peut déterminer la modulation en bande de base: il s'agit d'un codage Manchester (voir photo jointe). On peut aussi en déduire le débit en bauds (symboles par seconde). Toutes ces informations étant recueillies, nous pouvons connaître la trame de données. Dans mon cas, les octets trouvés sont: 249, 39, 75, 178, 45, 200, et répétés plusieurs fois, pour s'assurer que la commande est bien reçue. Heureusement, le code ne roule pas, la trame de données est toujours la même.

Étape 3: envoyer les mêmes trames de données

Envoyer les mêmes trames de données
Envoyer les mêmes trames de données
Envoyer les mêmes trames de données
Envoyer les mêmes trames de données
Envoyer les mêmes trames de données
Envoyer les mêmes trames de données

Le Texas Instruments cc1101 est si flexible que vous atteindrez toujours votre objectif, même si les paramètres que vous avez trouvés à l'étape précédente sont complètement différents des miens. En effet, vous verrez dans la documentation, page 2 (https://www.ti.com/lit/ds/symlink/cc1101.pdf) qu'il permet d'effectuer des modulations NRZ, Manchester, FSK, ASK/OOK, pour atteindre les fréquences autour de 433 MHz ou 868 MHz, et bien d'autres choses. Je vous conseille de lire la documentation pour vous familiariser avec ce module.

Sur ce lien vous trouverez à titre d'exemple les travaux de Loboris concernant la construction de fonctions utilisant ce module:

github.com/loboris/ESP32_CC1101/tree/maste…

Nous allons écrire notre code pour notre esp32 avec la chaîne d'outils esp-idf (voir les liens de la première étape). Vous pouvez ajouter les fichiers du lien dans le sous-répertoire composants de votre projet. Pour bien configurer notre cc1101, nous devrons corriger ses registres. Texas Instruments nous fournit un logiciel qui nous donne la valeur des registres selon notre configuration: SmartRF Studio.

Me concernant, j'indique au logiciel que je souhaite un codage Manchester, que ma fréquence porteuse est de 868,22 MHz, que mon type de modulation est ASK/OOK… Je vous laisse entrer vos paramètres. Dans le cas où votre encodage en bande de base n'est pas disponible, vous pouvez envisager un encodage NRZ, en augmentant correctement le débit en bauds, et en adaptant les données.

Une fois que vous avez défini vos valeurs, vous avez plusieurs choix concernant l'utilisation du module: vous pouvez utiliser les fonctions que je vous ai liées, ou ce que j'ai fait, ne vous inspirer que de ce code, afin de tout configurer de manière plus manière brutale (voir photos ci-jointes), et n'utiliser que ce dont nous avons besoin.

Comme la puce cc1101 communique par SPI, vous trouverez dans le lien de l'exemple de code le fichier d'en-tête "spi_master_lobo.h", contenant des fonctions plus simples pour utiliser le SPI que si vous deviez l'utiliser avec uniquement la chaîne d'outils. Je vous joins en photo le schéma de la communication CC1101 en SPI, photo extraite de la page 30 de la fiche technique CC1101. Les quatre fils présentés sont: CS (Chip Select, ou SS: Slave Select, ou ici CSn), CLK (ou SCLK, l'horloge, fournie par le maître), MISO (ou SO, Master In Slave Out), et MOSI (ou SI, Master Out Slave In). Dans notre cas, le maître est l'ESP32 et l'esclave est le CC1101. Les communications démarrent lorsque la broche CS est faible, en général.

N'oubliez pas d'activer dans les options du compilateur du menuconfig les exceptions C++ pour la compilation.

Étape 4: Connectez-vous au système

Se connecter au système
Se connecter au système
Se connecter au système
Se connecter au système
Se connecter au système
Se connecter au système

Si votre code fonctionne, vous avez fait l'essentiel. Dans cette partie, nous allons nous concentrer sur la façon de créer une application téléphonique connectée au système. La solution la plus intéressante est de se connecter par bluetooth, car elle permet d'utiliser un protocole basse consommation: Bluetooth Low Energy (BLE). Le profil hiérarchique est représenté dans le dessin joint: nous allons lire et écrire la commande dans une Caractéristique d'un Service. Et bien sûr, notre esp32 et notre smartphone sont équipés du bluetooth.

Cette étape est divisée en deux parties: la partie esp32 et la partie app. La photo ci-jointe montre et explique les principales parties des codes.

Vous pouvez générer vos UUID en suivant ce lien:

www.uuidgenerator.net/

Ce sont les identifiants qui permettront d'accéder aux services et fonctionnalités de notre profil BLE.

Concernant le code esp32 BLE, Kolban a fait un excellent travail en rendant compatibles toutes ces fonctions C++ de haut niveau:

github.com/nkolban/esp32-snippets/tree/mas…

Vous pouvez placer ces fichiers dans le sous-répertoire des composants. Sinon, vous aurez besoin de plus de temps pour comprendre comment utiliser BLE avec la chaîne d'outils esp-idf.

En résumé de ce que vous verrez dans le code, nous créons un Serveur, un Service, et une Caractéristique, avec les UUID associés, et nous ajoutons une classe de rappel redéfinie, avec une méthode associée à l'écriture: quand on reçoit le "O" caractère, nous envoyons une commande d'écriture au cc1101.

Bien sûr, n'oubliez pas d'activer Bluetooth dans la config Component du Menuconfig.

Concernant la partie application, nous utiliserons le Framework Ionic. Vous pouvez trouver plus d'informations à ce sujet dans le lien présenté dans la première étape, et pour plus de détails sur l'utilisation du BLE avec Ionic:

ionicframework.com/docs/native/ble/

Et des exemples, écrits par don:

github.com/don/ionic-ble-examples/tree/mas…

Vous pouvez par exemple éditer l'exemple "Connect". Nous scannons les appareils sur une première page, et atteignons une deuxième page si nous sélectionnons notre appareil. On accède alors à une interface où l'on peut ajouter un bouton avec la méthode présentée en photo: il envoie notre commande « O » avec les UUID appropriés. Vous pouvez également ajouter dans le constructeur de la première page la méthode "enable", demandant d'activer le bluetooth au démarrage de l'application.

Je vous recommande vivement d'explorer le site Ionic, et de découvrir tous les Composants (boutons, alertes, cases à cocher…) pour enrichir votre application:

ionicframework.com/docs/components/#overvi…

Étape 5: Optimiser la consommation d'énergie

Optimiser la consommation d'énergie
Optimiser la consommation d'énergie
Optimiser la consommation d'énergie
Optimiser la consommation d'énergie

Nous avons commencé à travailler sur la basse consommation, alors allons-y.

La chaîne d'outils esp-idf nous permet d'utiliser une interface graphique de configuration, le menuconfig: de nombreux paramètres peuvent diminuer la consommation d'esp32. Tout d'abord, comme nous n'avons pas besoin du Wifi, nous pouvons le désactiver dans la configuration des composants. Dans le même dossier, dans FreeRTOS, vous pouvez sélectionner "Exécuter FreeRTOS uniquement sur le premier cœur. Ensuite, dans spécifique à ESP, vous pouvez abaisser la fréquence du processeur à 80 MHz. Toutes les fonctionnalités fonctionnent toujours à cette vitesse d'horloge. Enfin, vous pouvez cochez "Activer le coprocesseur Ultra Low Power (ULP). Cette configuration fait passer la consommation de courant d'une centaine de mA à une trentaine de mA. C'est encore trop…

ESP32 peut gérer le sommeil profond. Seul le noyau basse énergie est allumé et attend un réveil.

Voir ce lien ci-dessous pour plus de détails:

esp-idf.readthedocs.io/en/latest/api-refere…

Malheureusement, dans la dernière version disponible de la chaîne d'outils esp-idf (3.0), les seuls réveils disponibles sont des timers et des interruptions GPIO. Heureusement, Espressif nous promet le réveil BLE dans la prochaine version (3.1).

Vous pouvez également mettre le CC1101 en mode veille, en envoyant à SPI la commande appropriée pour mettre l'appareil hors tension (voir la fiche technique du cc1101, la commande SPWD, page 51). Pour mettre l'appareil en mode veille ou pour le réveiller, vous pouvez mettre bas puis haut la broche Chip Select des broches SPI (plus d'infos dans la fiche technique).

Ces dernières configurations devraient pouvoir faire passer la consommation du système en dessous du milliampère…

Enfin, pour faire durer le système le plus longtemps possible sans recharge, voire atteindre un mois d'autonomie, choisissez la batterie 3,7V avec le plus de milliampères par heure. En mesurant la consommation électrique de votre système, avec l'affichage d'un générateur ou d'un ampèremètre connecté en série avant votre pôle + de votre système, vous pouvez estimer la durée de vie de votre système !