RTL SDR et retro-ingénierie : Différence entre versions

De Ensiwiki
Aller à : navigation, rechercher
m (Rousfran a déplacé la page 2016 - RTL SDR et retro-ingénierie vers RTL SDR et retro-ingénierie par-dessus une redirection)
(Aucune différence)

Version du 18 octobre 2017 à 13:33


Introduction

Dans le cadre du projet Réseaux Mobiles, nous avons décidé de nous intéresser à la rétro-ingénierie de signaux radio.

En quelques mots, cela consiste à "écouter" les ondes radio qui transitent dans notre environnement, les enregistrer et les étudier pour remonter aux informations qu'elles véhiculent.

Pour ce faire, nous avons eu recours à un module RTL-SDR : le préfixe RTL fait référence à l'identifiant "rtl" associé à la carte électronique utilisée pour capter les ondes radio, et SDR signifie Software Defined Radio, autrement dit une Radio Définie Logiciellement.

Dans la suite, nous aborderons plus précisément cette dernière, et nous présenterons plus en détail le matériel utilisé. Cependant, nous allons commencer par présenter certaines notions de traitement du signal qui seront essentielles à la bonne compréhension de la suite du propos.

Traitement du Signal - Rappels Théoriques

Cette partie peut être ignorée par tout lecteur déjà familier avec les notions classiques se rapportant à l'émission d'ondes radios, telles que la modulation ou encore les différents codages binaires. Son but est de vulgariser les éléments techniques et scientifiques nécessaires à la compréhension du propos pour les lecteurs qui n'auraient pas les connaissances sus-citées.

Fonctionnement de la transmission par rayonnements électromagnétiques

Les réseaux sans-fil s'appuient sur les rayonnements électromagnétiques, que la Physique modélise comme des ondes : les ondes électromagnétiques. En effet, ces dernières se propagent dans l'air ambiant, sont "facilement" émises et reçues, et font intervenir des paramètres physiques modulables, ce qui permet de véhiculer de l'information. Ci-dessous, la propagation d'une onde électro-magnétique avec atténuation, caractérisée notamment par sa fréquence et son amplitude.

Propagation d'une onde électo-magnétique avec atténuation

Reprenons rapidement chacun des points énoncés à l'instant, en commençant par la propagation dans les milieux ambiants. Cette propagation s'accompagne d'une atténuation de puissance (dépendant de la fréquence de l'onde) par dissipation d'énergie, qui est plus ou moins important selon le milieu traversé. Le fait que cette dissipation soit relativement restreinte dans l'air permet une communication sans fil sur des distances variant de la dizaine de mètres pour le Wi-Fi à la centaine de kilomètre pour SigFox.

Quant à la production d'une telle onde, elle est relativement simple : il suffit de faire circuler un courant alternatif dans un conducteur (généralement rectiligne). Une antenne émettrice d'ondes radio n'est rien d'autre qu'un "morceau" de métal conducteur rectiligne traversé par un courant alternatif. En effet, la circulation du courant se traduit par un mouvement de charges (électrons) au sein du conducteur. Cela induit un champ magnétique (noté \vec{B}), et une répartition de charges non uniformes (des électrons du conducteur "migrent") qui induit un champ électrique (noté \vec{E}). Point important, la fréquence de l'onde produite est identique à la fréquence du courant alternatif utilisé pour l'engendrer.

L'opération inverse, c'est-à-dire la réception d'une onde électromagnétique, est similaire, voire duale. En effet, un courant électrique est induit dans tout conducteur exposé à une onde électromagnétique. Ce courant est une image de celui ayant servi à engendrer l'onde électromagnétique. On a donc transféré un courant (en d'autres termes, de l'information comme nous le verrons dans la suite) de l'antenne émettrice à l'antenne réceptrice. Ci-dessous, une animation représentant la réception d'une onde électromagnétique.

Réception d'une onde électo-magnétique

Dernier point à aborder, les paramètres physiques modulables. Ils seront justement l'objet du point suivant.

Différentes modulations

Principe de la modulation

Afin de transmettre de l'information par le biais d'une onde électromagnétique, il faut pouvoir moduler une de ses grandeurs physiques caractéristiques. Or, l'amplitude et la fréquence des champs produits sont modulables, par le biais d'une modulation de l'amplitude et de la fréquence du courant qui traverse l'antenne émettrice.

Le principe de la modulation tient en quelques lignes. On produit une onde électromagnétique, appelée porteuse, qui est généralement sinusoïdale et de fréquence élevée et sélectionnée (nous allons y revenir). Ensuite, l'on fait varier l'une de ses grandeurs caractéristiques (l'amplitude ou la fréquence) en fonction de l'information à transmettre. Un exemple de modulation est présenté sur l'illustration ci-dessous :

Exemple de modulation

On peut néanmoins se demander pourquoi recourir à l'utilisation d'une onde porteuse lorsque l'on pourrait directement envoyer le signal représentant l'information. Afin de répondre à cette question, il convient d'introduire deux problématiques associées à l'émission d'ondes radios.

D'une part, pour permettre la réception de l'onde émise, il faut l'émettre avec une puissance suffisante pour que l'atténuation due à la propagation ne "détruise" pas le signal. Or, l'information à transmettre est généralement portée par un signal de faible puissance (on peut penser à l'enregistrement de la voix d'une personne par le biais d'un micro. On obtient un courant électrique de faible puissance). D'autre part, il faut s'assurer qu'il n'y aura pas de brouillage. En effet, les ondes électromagnétiques "s'additionnent" : l'amplitude d'un champ électromagnétique en un point de l'espace est la somme des amplitudes de toutes les ondes électromagnétiques qui se superposent en ce point. L'utilisation d'une onde porteuse offre une solution à ces deux problématiques.

En effet, le fait de produire une onde électromagnétique pour porter le signal contenant l'information permet d'injecter de la puissance (car c'est la porteuse qui est réellement émise). De plus, le fait de pouvoir sélectionner/choisir la fréquence de cette porteuse permet de "séparer" les ondes électromagnétiques (l'on sait filtrer les fréquences reçues efficacement, notamment par le biais de filtres passe-bande). Par exemple, si les radios, telles que Virage Radio ou Hot Radio, émettaient directement l'enregistrement de leur émissions, les deux se recouvriraient (on entendrait deux personnes parler en même temps, comme cela se produit dans la vie de tous les jours). À la place, chaque radio se voit attribuer une fréquence d'émission (à Grenoble, pour Hot Radio 102.0 MHz, et 89.4 MHz pour Virage Radio), ce qui correspond à la fréquence des ondes porteuses que leurs stations radios utilisent. L'utilisateur peut alors choisir la radio qu'il veut écouter en sélectionnant la fréquence correspondante (oui, vous réglez un filtre passe-bande lorsque vous changez la fréquence de votre poste radio).

Après avoir introduit globalement le principe de la modulation, nous allons présenter deux exemples de modulation, un en amplitude et un en fréquence.

Modulation en amplitude

L'exemple ci-dessous présente une modulation en amplitude. En d'autres termes, le signal à transmettre module l'amplitude de la porteuse pour obtenir le signal modulé. En détail, on trouve :

  • à gauche, le signal à transmettre ;
  • au centre, la porteuse ;
  • à droite, le signal modulé obtenu.

Afin de rendre l'exemple plus simple à comprendre, la fréquence de la porteuse et l'allure du signal à transmettre s'accordent, et on considère que le signal à transmettre fixe directement l'amplitude du signal modulé (en réalité, l'amplitude du signal à transmettre "s'ajoute" à celle de la porteuse). Néanmoins, un signal à transmettre plus complexe ne posera à priori pas de problème.

Modulation en amplitude (cliquer pour une plus haute résolution)

Modulation en fréquence

L'exemple ci-dessous présente une modulation en fréquence. En d'autres termes, le signal à transmettre module la fréquence de la porteuse pour obtenir le signal modulé. En détail, on trouve :

  • à gauche, le signal à transmettre ;
  • au centre, la porteuse ;
  • à droite, le signal modulé obtenu.

Afin de rendre l'exemple plus simple à comprendre, la fréquence de la porteuse et l'allure du signal à transmettre s'accordent, et on considère que le signal à transmettre fixe directement la fréquence du signal modulé (en réalité, l'amplitude du signal à transmettre est transcrite en une proportion (ie. un pourcentage) de la fréquence de la porteuse qui est ajouté à cette dernière). Néanmoins, un signal à transmettre plus complexe ne posera à priori pas de problème.

Modulation en fréquence (cliquer pour une plus haute résolution)

Comparaisons des modulations en amplitude et en fréquence

Comparaison des modulations en amplitude et en fréquence

Pour finir cette partie traitant de la modulation, nous allons nous intéresser aux avantages et inconvénients des modulations en amplitude et en fréquence.

Premièrement, la modulation en amplitude est plus simple et moins coûteuse à mettre en place que la modulation en fréquence.

De plus, la bande passante nécessaire pour la modulation en amplitude est plus faible que pour la modulation en fréquence (on peut voir la bande passante comme la bande de fréquence minimale qui contient toutes les fréquences contenues dans le signal modulé). En conséquence, on peut faire cohabiter plus de bandes de fréquence avec de la modulation en amplitude. Néanmoins, plus la bande passante d'un signal est grande, meilleure est la qualité atteignable pour le signal émis. Ainsi, la modulation de fréquence tend à produire des signaux de meilleure qualité.

De surcroît, la modulation en amplitude est sensible au bruit (ie. la superposition des ondes électromagnétiques parasites), car ce dernier altère l'amplitude du signal reçu : il peut donc y avoir corruption de l'information transportée. Au contraire, la modulation de fréquence fait fi de l'amplitude du signal reçu, et n'est donc pas sensible au bruit.

Dernier point notable, la modulation d'amplitude impliquant (dans la plus grande majorité des cas) une augmentation de l'amplitude de la porteuse, le signal modulé produit peut se propager plus loin que pour une modulation en fréquence.

Principaux codages numériques

Le dernier point théorique qu'il nous reste à détailler concerne le codage des informations à envoyer. En effet, étant donné que nous nous intéressons principalement à des signaux à destination de dispositifs numériques, les informations échangées sont des données numériques, c'est-à-dire des bits, au sens numérique (0 et 1 logiques). Or, il existe plusieurs façons standards de représenter ces valeurs logiques par le biais des grandeurs modulables, c'est ce que l'on nomme un codage. Tous ont en commun le fait que les bits soient émis périodiquement, et que chaque période corresponde à un bit. Nous allons maintenant présenter trois des codages les plus communs, à savoir les codages NRZ, RZ et Manchester.

Codage "Non Return to Zero" (NRZ)

Le codage Non Return to Zero est le plus simple possible. En effet, il consiste à fixer deux valeurs de la grandeur modulée, et à faire correspondre à la première le 0 logique, et à la seconde le 1 logique. Dans l'exemple ci-dessous, le nombre 76_{(10)} = 0100\ 1100_{(2)} a été encodé avec les correspondances 0V.m\rightarrow0 et 3V.m\rightarrow1 :

Codage NRZ

Codage "Return to Zero" (RZ)

Le codage Return to Zero consiste également à associer une valeur de la grandeur modulée à chaque valeur logique que peut prendre un bit. Néanmoins, cette valeur n'est pas maintenue durant toute la période d'émission du bit. En effet, elle n'est maintenue que pendant la première moitié de la période, la seconde moitié étant "forcée à 0" (en d'autres termes, la seconde moitié de chaque période correspond forcément à un 0 logique). L'exemple ci-dessous correspond également au codage du nombre 76 avec la correspondance 0V.m\rightarrow0 et 3V.m\rightarrow1, cette fois avec un codage RZ :

Codage RZ

Codage Manchester

Par contre, le codage Manchester ne s'inscrit pas dans la même logique que les codages NRZ et RZ. En effet, ce sont les transitions entre les deux valeurs fixées de la grandeur modulable qui sont associées aux valeurs logiques 0 et 1 d'un bit. De plus, ces transitions sont centrées par rapport à la période d'émission du bit. Un exemple sera sûrement plus parlant : ci-dessous figure donc l'encodage du nombre 76 selon le codage de Manchester, avec les correspondances suivantes Transition_{haut\rightarrow bas}\rightarrow 1 et Transition_{bas\rightarrow haut}\rightarrow 0 :

Codage Manchester

On remarque que l'émission d'un bit est composée de deux demi-périodes, chacune correspondant à une des valeurs fixées pour la grandeur physique modulable. En effet, il est nécessaire que chaque période contienne une transition d'une des valeurs vers l'autre, car chaque période doit correspondre à un bit.

Comparaison des différents codages présentés

Afin de clôturer cette partie, nous allons effectuer un petit comparatif des différentes caractéristiques des différents codages. La première remarque qu'il convient de faire concerne NRZ et RZ : du fait de leur simplicité, ils sont clairement les codages les plus abordables et les plus rapides à mettre en œuvre.

Néanmoins, ils sont relativement sensibles aux problèmes de désynchronisation. En effet, de manière à ce que la transmission d'informations entre le récepteur et l'émetteur ait lieu, il est nécessaire que ces derniers soient synchrones (la fréquence de l'émission des bits de données par l'émetteur et la fréquence d’échantillonnage du récepteur sont cohérentes) et synchronisés (les débuts des périodes des signaux émis et reçu coïncident). La synchronisation est d'autant plus importante qu'un décalage, même infime, peut corrompre le signal reçu. Par exemple, dans le cas d'un codage RZ, un décalage d'un quart de période (en supposant que l'échantillonnage se fait au milieu de la première moitié de période) peut conduire à une erreur d'échantillonnage d'un 1 logique en un 0 logique.

C'est pour cela que chaque message envoyé par le biais d'un codage RZ ou NRZ est préfixé par une succession de transition "Haut \rightarrow Bas". En effet, les fronts montant et/ou descendant permettent au récepteur de mesurer le décalage entre ses échantillonnages et les émissions, puis de le corriger pour atteindre la synchronisation.

Or, pour les messages particulièrement long, il peut y avoir une longue période sans front montant et/ou descendant (par exemple, une longue succession de 0 logiques). Le récepteur n'a donc plus la possibilité de vérifier qu'il est bien synchronisé avec l'émetteur.

C'est la grande force du codage Manchester : il y a forcément une transition d'un état vers l'autre, donc un front montant et/ou descendant pour chaque période. Ainsi, le codage de Manchester s'abstrait presque totalement des problèmes de synchronisation.

Gestion des fréquences pour l'émission d'ondes électromagnétiques en France

Les fréquences radioélectriques appartiennent à l'État. L'Agence Nationale des Fréquences (ANFR) est l'établissement publique qui est en charge de gérer lesdites fréquences radioélectriques.

L'ANFR associe des domaines de fréquences à certaines applications. Si un utilisateur souhaite émettre sur une bande réservée, il doit effectuer des démarches auprès de l'ANFR.

Voici les principaux domaines de fréquences avec leur application :

Frise frequentiel.png

Les domaines libres centrés sur 433 MHz et 868 MHz sont ceux qui auront toute notre attention dans la suite.

SDR avec Linux - Tutoriel

Description du Matériel

Radio Logicielle

Afin de pouvoir réaliser des tests sur les différentes technologies sans fil sans avoir besoin de matériel électronique spécifique, nous avons utilisé une radio logicielle (ou SDR pour Software Defined Radio en anglais). Le principe d'une telle radio est de déléguer le traitement du signal à un logiciel au lieu de le réaliser de manière électronique. Par exemple, un filtre passe-bande qui devrait être réalisé par un circuit RLC (une résistance, une bobine et un condensateur) est remplacé par un logiciel qui calcule et applique la fonction de transfert de ce circuit au signal traité.

Il existe deux grands types de radio logicielle : celle qui ne peuvent que recevoir des signaux et celle qui peuvent également en émettre. Dans le cadre de notre projet, centré autour de l'écoute d'ondes, nous nous sommes donc focalisés sur les radio logicielles uniquement réceptrices.

Par ailleurs, il est impossible de s'abstraire totalement de tout matériel électronique. En effet, il est nécessaire d'avoir un tuner, c'est-à-dire un composant capable de recevoir un signal électromagnétique à une fréquence précise, de l'amplifier et de le transmettre à un ordinateur.

RTL-SDR

RTL SDR R820T

La radio logicielle que nous avons utilisée est la radio logicielle RTL qui est un tuner DVB-T TV branchable par clef USB (image ci-contre). Elle est donc normalement faite pour recevoir la télévision sur un ordinateur. Cependant, Antti Palosaari, Eric Fry et Osmocom (http://www.rtl-sdr.com/about-rtl-sdr/) ont découvert qu'il est possible d'obtenir le signal reçu par RTL directement. Ils ont ainsi développé un driver permettant de transformer ce tuner TV très abordable (environ 20 dollars) en radio logicielle.

Les bandes de fréquence recevables par le RTL dépendent du tuner spécifique utilisé. Le tableau suivant récapitule les différentes valeurs possibles. Afin de pouvoir couvrir une bande assez large pour recevoir les différentes fréquences de domotique (433 MHz et 866 MHz), ou encore la radio FM (environ 100 MHz), nous avons pris un RTL utilisant un tuner R820T.

Tuner Elonics E4000 Rafael Micro R820T Fitipower FC0013 Fitipower FC0012 FCI FC2580
Frequency range (MHz) 52 - 1100 and 1250 - 2200 24 - 1766 22 - 1100 22 - 948.6 146 - 308 and 438 - 924

Source: Osmocom

Notre motivation à utiliser cette radio logicielle est triple :

  • Elle est supportée par un très grand nombre de logiciel ;
  • Elle est capable de recevoir les bandes utilisées en domotique ;
  • Elle est très abordable.

Logiciels Utilisés

Nos expérimentations se sont déroulées sous une distribution Debian. Nous avons utilisé principalement deux logiciels libres : GNU Radio Companion et Gqrx. Ces logiciels implémentent de manière logicielle les composants électroniques nécessaires au traitement du signal. Gqrx est basé sur GNU Radio mais il est plus facile d'utilisation que ce dernier. L'utilisation de ces deux logiciels est détaillée dans les sections ci-dessous.

De plus, nous avons utilisé Audacity pour la visualisation des fichiers .wav obtenus grâce aux deux logiciels précédemment cités.

Pour utiliser le RTL, ainsi que ces logiciels, nous avons dû installer cinq paquets disponibles par défaut dans les dépôts de Debian :

  • rtl-sdr et librtlsdr0 : le driver associé au tuner, et sa librairie ;
  • gqrx-sdr et gnuradio : les deux logiciels précédemment décrits ;
  • gr-osmosdr : joue le rôle d'interface entre la radio-logicielle et GNU Radio, il représente un bloc dans GNU Radio.

Gqrx

Fenêtre principale de Gqrx

Le premier outil avec lequel nous avons utilisé la radio logicielle s'appelle Gqrx. Son principal atout est de permettre une prise en main très rapide. Pour l'utiliser aucune connaissance en électronique n'est nécessaire, et seules quelques bases du traitement du signal sont requises.

Sa fenêtre principale, visible ci-dessus, peut être divisée en trois grandes parties :

  • La partie supérieure qui permet de lancer l'écoute (bouton en dessous de l'onglet "files") ;
  • La partie de gauche qui permet la sélection de la fréquence à écouter (en 1) et la visualisation de la cascade de fréquence (partie bleu de l'image). Chaque point de cette cascade de fréquence représente "l'intensité" du signal reçu pour une fréquence et un instant donnés. Ainsi, tout en haut se situent les signaux qui viennent d'être reçus. En bas de la fenêtre, on observe les signaux les plus anciens. Plus l'amplitude du signal reçu est forte, plus la coloration du point associé tend vers le rouge. On peut ainsi remarquer (en 2) qu'un signal (et non pas du bruit) a été reçu ;
  • La partie de droite qui permet de choisir le type de modulation employée (en 3) et d'enregistrer ce qui est obtenu dans un fichier au format .wav (en 4).

Une dernière option de Gqrx, également très utile pour commencer : le gain LNA qui permet d'amplifier les signaux faibles reçus. Il est contrôlable dans la fenêtre "Inputs Controls" (en 5).

Ainsi, grâce à Gqrx, il est possible de rapidement localiser un signal sans connaître au préalable sa fréquence, de la démoduler et de l'enregistrer. Le tout sans aucune notion, ou presque, d'électronique.

GNU Radio Companion (GRC)

Fenêtre principale de GNU Radio Companion

Le second outil que nous avons utilisé s'appelle GNU Radio Companion (GRC). Son utilisation est beaucoup plus complexe que le précédant. Comme on peut observer sur la figure ci-dessus, GRC fonctionne en terme de blocs. Chaque bloc représente une fonction réalisée, parmi notamment : un traitement du signal, une entrée, une sortie ou une interface graphique. L'utilisateur peut définir en C++ ses propres blocs. Ils sont tous reliés entre eux pour former une "chaîne" de traitement du signal appelée flot. Une fois le flot formé, il peut être exécuté. Il est à noter que la couleur des connecteurs représente le type de données traité (voir le tableau ci-dessous pour la correspondance).

Couleur Bleu Orange Vert Rose
Signification Nombre complexe Nombre flottant Nombre entier Chaîne de caractères

Afin de comprendre son fonctionnement plus en détails, nous allons observer la réalisation d'une radio FM. Le fichier source GRC est disponible ici. L'image ci-dessus est l'affichage de ce fichier sous GRC, celle ci-dessous correspond au flot en cours d'exécution. Le flot commence par une source : le RTL SDR (en 1). Celle-ci est ensuite traitée notamment au travers d'un filtre passe-bande et d'un démodulateur en fréquence (en 2). Le signal est ensuite redirigé vers deux sorties : une sortie audio (en 3) et une sortie graphique sous la forme d'une transformée de Fourier ou FFT (en 4).

Ainsi lorsque l'on lance l'exécution du flot, on peut à la fois observer la FFT du signal démodulé reçu et écouter le son produit par ce signal. Enfin, on peut remarquer que la fenêtre d'exécution propose de choisir la fréquence de réception du RTL SDR. Cette fonctionnalité est réalisée grâce aux blocs qui ne font pas partis du flot (en 5). Ceux-ci permettent de définir des variables qui peuvent être changées durant l'exécution, dans notre cas la fréquence de réception.

Fenêtre d'exécution de Gqrx

Ce logiciel permet ainsi d'automatiser toutes les actions liées au traitement d'un signal reçu, puis de retranscrire le résultat au format audio (directement dans les haut-parleur ou dans un fichier wav) ou de le visualiser graphiquement.

Cas Pratique

Introduction (présentation du cas pratique)

Télécommande TM 433 DS-2

Afin de mettre en œuvre les différents éléments théoriques et logiciels vus dans les parties précédentes, nous avons choisi d'essayer de comprendre le protocole d’émission d'une télécommande "simple" de garage. C'est-à-dire comprendre la correspondance entre le signal émis et sa signification.

Le matériel que nous avons utilisé est une télécommande TM 433 DS-2 de chez FAAC (disponible sur Amazon pour environ 20€). Celle-ci possède deux boutons, un pour l'ouverture et un autre pour la fermeture. Afin de synchroniser la télécommande avec une porte de garage, 12 commutateurs sont disponibles. La documentation permet de les configurer.

Déterminer la fréquence d'émission

Dans un premier temps, il faut déterminer la fréquence d'émission du signal afin de pouvoir l'enregistrer. Pour cela, nous avons utilisé le logiciel Gqrx. En effet, celui-ci dispose d'une interface intuitive permettant de repérer d'un coup d’œil si un paquet est émis sur la plage de fréquence écoutée (d'une largeur de 1.5MHz). Grâce à l'attribution des fréquences faîtes par l'ANFR, nous avons donc à notre disposition les différentes fréquences possibles pour l'émission de ce type de signaux (Industriel/Domotique) : 433MHz, 868MHz et 2400MHz.

Nous avons utilisé le protocole suivant :

POUR chaque bande de fréquence possible:
  On se place au début de la bande  
 
  TANT QUE la fin de la bande n'est pas atteinte
    On attend pour s'assurer que l'on ne reçoit que du bruit
    On appuie sur un bouton de la télécommande
      
    SI un paquet est observé
      On attend pour s'assurer que l'on ne reçoit que du bruit
      On appuie sur un bouton de la télécommande
 
      SI un paquet est observé
        On attend pour s'assurer que l'on ne reçoit que du bruit
        On appuie sur un bouton de la télécommande
 
        SI un paquet est observé
          Une fréquence d'émission du signal est trouvée
        FIN SI
      FIN SI
    FIN SI
    On ajoute 1.5MHz à la fréquence d'écoute 
  FIN TANT QUE
FIN POUR

Une fois cet algorithme fini, on utilise pour la suite de notre étude la fréquence trouvée pour laquelle le signal est le plus fort (en termes d'amplitude).

Nous avons appliqué cet algorithme, et nous avons trouvé que la fréquence d'émission la plus forte était 433.88 MHz.

Déterminer la modulation utilisée

Après avoir détecté la fréquence d'émission, nous avons cherché à déterminer la modulation utilisée par la télécommande.

Gqrx dispose d'une option permettant d'enregistrer les signaux reçus en appliquant les démodulations les plus utilisées (AM, FM). Nous obtenons deux fichiers .wav d'un même signal avec les différentes modulations proposées.

Dans un premier temps, nous éliminons les parties comprenant du bruit qui correspondent aux moments d'enregistrement lorsque la télécommande n'émet pas (avant et après la pression du bouton). Ce type de signal est caractéristique (voir figure ci-dessous) : il ne correspond à rien et est aléatoire.

Bruit

Puisque le signal transmet de l'information (identifiant associé à la porte de garage à ouvrir), nous pensons qu'après démodulation, nous devrions obtenir un signal numérique. On observe que seule la modulation en amplitude (image ci-dessous) donne un signal numérique cohérent. Les autres modulations ne donnent aucunes informations (voir image ci-dessous de la démodulation FM).

Démodulation AM
Démodulation FM

Le signal est donc modulé en amplitude.

Déterminer le codage - Reverse-Engineering du protocole de communication

Boutons de la télécommande TM 433 DS-2

Nous arrivons maintenant à la dernière étape : nous disposons d'une télécommande radioélectrique dont nous savons récupérer le signal numérique. Elle comporte 12 commutateurs (voir photo ci-dessus) qui permettent de choisir la porte de garage à ouvrir. Après lecture de la documentation et observation de la télécommande elle-même, nous avons remarqué que chacun des commutateurs est numéroté de 1 à 12. De plus, elle comporte deux boutons. Il nous reste donc à comprendre l’influence des positions des commutateurs et du choix du bouton sur le signal final émis.

Une première observation du signal permet de remarquer qu'il est globalement composé de 2 formes différentes (voir ci-dessous) et que chaque signal émis est composé de 13 formes.

Forme A
Forme B

Tout d'abord, nous avons enregistré plusieurs fois le signal émis par une configuration des commutateurs et un bouton donné. C'est-à-dire que nous avons récupéré plusieurs signaux codant la même information. Nous avons ainsi pu remarquer que le signal émis est toujours le même. Nous sommes donc en présence d'un signal qui peut être rejoué.

A cette étape, nous pourrions enregistrer chacune des configurations de commutateurs possibles. Ainsi, nous serions capable de rejouer n'importe laquelle. Cependant cette démarche pose deux problèmes :

  • 12 commutateurs possibles correspond à 8192 (2^13) possibilités. Le travail est donc très fastidieux ;
  • Le processus de transformation du signal ne sera pas pour autant compris.

Afin de déterminer l'impact de chaque commutateur sur le signal final, nous avons enregistré les 12 signaux correspondants à tous les commutateurs dans une position sauf un (ex: tous OFF sauf 1 à ON puis tous OFF sauf 2 à ON puis ...). Puis, pour déterminer si les commutateurs ont un effet les uns entre les autres nous avons enregistré des signaux en changeant aléatoirement la position de certains commutateurs. Nous avons réalisé ces deux opérations pour chacun des deux boutons afin de déterminer leur impact.

Fiers de tous ces enregistrement (une quinzaine), nous avons pu déterminer que le codage utilisé est le suivant :

  • Un bit 0 (c'est à dire un commutateur à OFF) est représenté par la forme 0 ;
  • Un bit 1 (c'est à dire un commutateur à ON) est représenté par la forme 1 ;
  • Avant le début de la transmission et après la transmission de chaque bit, la forme T est transmise ;
  • Lorsque le bouton du bas à gauche est pressé, la valeur des 4 derniers commutateurs est forcée à 0.
Forme 0
Forme 1
Forme T

On peut remarquer que la forme 0 et la forme 1 correspondent à un codage NRZ. Cependant, nous savons que ce type de codage n'est pas optimal pour une transmission radioélectrique puisque qu'il ne comporte aucun facteur de synchronisation. C'est pourquoi le concepteur de ce protocole a ajouté un facteur de synchronisation après la transmission de chaque bit, à savoir la forme T.

Automatisation du décodage

Enfin, une fois le protocole compris une dernière étape d'automatisation peut être réalisée. Pour cela, le logiciel GNU Radio aurait pu être utilisé. Cependant, le codage employé par le protocole n'étant pas standard, il n'est pas nativement disponible dans ce logiciel. Il aurait donc fallu créer un nouveau type de bloc. Cette tâche n'étant pas simple et requérant beaucoup de connaissance sur GNU Radio, nous avons décidé d'automatiser le décodage par le biais d'un script python.

Ce script python est en fait divisé en deux scripts :

  • Un premier d'écrêtage
  • Un second de traitement

Chacun de ces scripts prend en argument un fichier ".wav" qui est constitué du signal à traiter. Il est à noter que la détection du bruit et sa surpression ne sont pas encore réalisées. Le fichier d'entrée ne doit donc contenir que le signal du paquet.

Écrêtage

Les signaux reçus (voir ci-dessous) ne sont pas, du fait du passage dans l'air et dans les circuits électroniques, parfaitement numérique. C'est à dire que le signal n'est pas partagé entre deux uniques valeurs (haut et bas). Afin de pouvoir les traiter plus facilement, ces signaux sont prétraités.

Pour ce faire, le script commence par calculer la moyenne des points obtenus. Cette heuristique permet d'obtenir le seuil entre valeurs hautes et basses. Une fois le seuil obtenu, le script crée un nouveau signal (nouveau fichier .wav) dont toutes les valeurs au dessus et respectivement au dessous du seuil sont mises à la même valeur.

Signal télécommande reçu
Signal télécommande écrêté
Signal manchester reçu
Signal manchester écrêté

Traitement

Le deuxième script fonctionne de manière similaire au premier : il calcule le seuil pour séparer les valeurs en deux groupes distincts (haut et bas). Puis il groupe les valeurs égales qui se suivent afin d'obtenir le temps entre chaque transition. Il prend ensuite en argument le seuil entre demi temps et temps complet (en nombre de points dans le fichier ".wav"). Il est ainsi capable de différencier les formes 0-T des formes 1-T : 0-T correspond à deux transitions demi temps et 1-T correspond à une transition temps complet.

Signal télécommande reçu