{ELM327} – Faire du « Hacking » de voiture à l’aide d’un ODBII bluetooth

Coucou à tous,

 

Bien que mon blog traite souvent de sujet autour du piratage, du contournement de divers systèmes ...
Je suis loin d'être capable de tout maîtriser comme dans les films que vous voyez à la télévision, où un adolescent va te détourner un avion avec sa gameboy  !
Ok Ok, calmons-nous,  rassurez-vous il s'agit là de fiction ... à moins que la gameboy en question soit un raspberry pi connecté sur le Wifi de l'avion et ..... bref je m'éloigne du sujet !

Tout ça pour vous dire qu'on a tous ce rêve de gosse de pouvoir contrôler des objets à distances et faire des trucs super marrants !
La domotique permet désormais de concrétiser ce rêve !
Mais plus loin que la domotique d'une maison où vous pourriez contrôler des caméras, des lumières, les volets, .... n'avez-vous jamais rêvé de contrôler une voiture ? Si c'est le cas ça tombe bien ... sinon cet article est un flop :(

 

ODBII et protocole CAN

J'ai envie de mettre sur le bûcher la personne qui a décidé de ce nom "C.A.N" (Controller Area Network), comment voulez vous trouver de la documentation sur une technologie qui porte un nom aussi court, et qui littéralement parlant veut dire "pouvoir" en anglais !

L'ODBII est une interface de diagnostic composée de 16 broches pour votre véhicule, c'est une petite prise, souvent situé près de votre volant qui vous permet, à vous ou à votre garagiste, de diagnostiquer votre véhicule.
Celui-ci renvoie un certains nombres d'informations, sur votre consommation, votre nombre de tours, le niveau d'essence, les divers problèmes constatés sur votre véhicule, etc ...

Le protocole CAN n'utilise que certaines PIN de votre interface ODBII et permet de recevoir où envoyer des instructions avec votre véhicule. Si vous aimez bien Linux je vous invite à jeter un œil sur la suite d'outils pour linux "can-utils", qui vous permettront de faire de la capture et du rejeux d'instruction :

La méthode théorique :
Vous capturez les données envoyées par votre véhicule, vous faites plusieurs fois une action (accélération, utilisation de votre radio, warning, lumière), et dans le flot de données reçues, vous allez tentez de repérer une instruction qui revient le nombre de fois que vous avez fait l'action.
Lorsque c'est le cas, vous renvoyez l'instruction, et normalement votre véhicule va l’exécuter ! Youhou vous venez de réaliser votre premier hack !

Pour ceux qui souhaitent en savoir davantage sur "can-utils" je vous invite à jeter un œil ici :
http://www.securitynewspaper.com/2018/05/03/hack-car-tool/

 

L'EML327 n'est pas le meilleur mais c'est le moins cher

Comme tout le monde n'a pas un grand budget (moi non plus), je suis parti sur un "plug" ODBII abordable. C'est le plus abordable car vous le trouverez entre 5 et 10 € sur AliExpress (si vous n'avez pas peur des délais de livraison) et entre 10 et 20 € sur Amazon.

Précédemment je vous parlais de la suite d'outils "can-utils", ELM327 n'est pas recommandé :

Cependant tout n'est pas perdu, vous pourrez au travers du port série faire plus ou moins les mêmes choses qu'avec "can-utils"

 

Utiliser la version Bluetooth de l'ELM327

Ce mini tutoriel s'adresse aux utilisateurs de Linux, il ne nécessite l'installation d'aucun logiciel particulier (comme souvent dans mes articles).

La première étape consiste à brancher votre boitier sur la voiture et à mettre le contact.

Premier terminal

Dans un premier temps, vous allez ouvrir un premier terminal, qui servira à vous connecter à votre module ELM327

$ bluetoothctl

La commande "bluetoothctl" ouvrira en mode console une interface pour contrôler vos appareils bluetooth.
Si tout se passe bien, alors vous devriez avoir une liste des différents appareils bluetooth détectés associé à leurs adresses "MAC" respectives.
Vous vous connecterez de la manière suivante :

$ pair  <adresse MAC de l'appareil ODBII>

Normalement vous devriez voir apparaître "ODBII"  dans la liste des appareils Bluetooth, remplacez dans la commande ci-dessus "<adresse MAC de l'appareil ODBII>"  par l'adresse MAC associé à ODBII.
Si tout se passe bien, vous serez alors invité à saisir un code PIN, celui-ci est : 1234

Laissez ensuite ce terminal ouvert dans un coin.

Second terminal

Ouvrez à présent un deuxième terminal, et saisissez la commande suivante :

$ rfcomm --auth connect 99 <adresse MAC de l'appareil ODBII> 1

Cette commande va créer un lien avec votre "plug" ODBII et le rendre accessible ici : /dev/rfcomm99

Laissez ensuite ce terminal ouvert dans un coin.

Troisième terminal

Nous allons ici nous connecter sur le port série de notre boitier ODBII !
Rien de plus simple :

$ screen  /dev/rfcomm99 38400

Et là Bingo vous allez pouvoir commencer à envoyer vos commandes.
Dans un premier temps, je vous invite à exécuter une part une à l’intérieur de ce terminal les commandes suivantes :

ATI
ATL1
ATH1
ATS1
ATAL
ATSP0

Le but de cette manœuvre est de vous rendre l'affichage plus agréable.
Après chaque commande, vous devriez voir apparaître "OK".
Sauf pour "ATI" qui vous retournera normalement des infos sur le "plug" ODBII (dont sa version)

Voici un guide des commandes disponibles selon la version de votre ELM327 :  ELM327_AT_Commands

Toutes les commandes inférieures à votre version sont normalement supportées.

Analyser les données

Il vous est possible d'écouter ce qu'il se passe sur votre voiture avec la commande suivante :

ATMA

Celle-ci va cependant vous renvoyer un cours échantillons qui ne sera pas spécialement très ciblé par rapport à ce que vous recherchez.

C'est donc avec la commande :

AT MR XX

Que vous pourrez cibler un peu plus précisément la partie de votre voiture que vous souhaitez "écouter"
"XX" correspond à un nombre sur 2 chiffres : 01, 02, 03, 04, 05, 06, 07 ... à vous de faire

Rejouer des données

La commande pour rejouer des données est ATSH 

ATSH AA BB CC DD

Cette commande renverra l'instruction à la voiture qui rejouera l'information.

"AA BB CC DD" correspond à une séquence récupérée par "ATMA" ou "AT MR", il ne faut pas prendre la première colonne qui correspond à la priorité des séquences, ni les dernières colonnes qui correspondent à la signature de la séquence.

Plus d'informations sur les commandes

Si vous êtes désireux d'en savoir plus sur les différentes commandes qu'il est possible de faire, je vous partage ici un guide en anglais : ELM327DS
Par exemple en page 39 vous aurez des informations sur "AT SH"

 

Les contrefaçons

Comme souvent il faut savoir que certains petits malins se font un vilain plaisir de faire des contrefaçons qui fonctionnent à moitié... j'y suis parfois sujet sur AliExpress lorsque je commande des composants pour Arduino / Raspberry

C'est vrai qu'il n'est pas évident de discerner un vrai d'un faux ...

Si certaines commandes "AT" censées fonctionner en s'appuyant sur le tableau que je vous ai partagé en lien, ne fonctionnent pas. Adressez-vous au vendeur, soit vous ne faites pas correctement la manipulation, soit il s'agit en effet d'une contrefaçon et si celui-ci est compréhensif il vous le changera.

Si je vous en parle c'est que ça m'est arrivé.
Pour ceux qui souhaiteraient plus d'informations sur ce sujet, je vous invite à jeter un œil ici :
https://timyouard.wordpress.com/2015/09/02/disection-of-a-counterfeit-elm327-obdii-adapter-from-china/

Conclusion

Comme je vous l'ai dit l'ELM327 n'est pas le meilleur outil qui soit.
Cependant il fonctionne et ne coûte pas cher. Cela suffit pour faire ses premières armes ;)

J'ai eu l'occasion d'échanger à ce sujet avec un commerçant sur Amazon qui m'a proposé de m'envoyer une interface Américaine OBDLink SXvoyer pour faire quelques tests

Je vous propose si ça vous branche d'écrire une suite (pas tout de suite) sur la suite "can-utils" ;)

10 comments

  • Hello,

    Merci pour tes articles ils sont vraiment toujours très intéressant, ça fais plaisir de pouvoir lire des articles de qualité.

    C’est vraiment du bon travail, j’espère que tu vas continuer comme ça.

    Merci

    P.

    • Hello Pascal,

      ça me va droit au cœur ;)
      Je fais de mon mieux en tout cas pour que ça continue ainsi.
      Pas mal de petits articles programmés jusqu’à fin novembre ;)
      En général j’en planifie 1 par semaine, sauf cas d’urgence comme
      libssh …
      Bonne lecture ;)

  • Salut,

    J’ai découverts ton blog il y a quelques semaines via Hacker News et quel plaisir de lire tes supers billets !

    Merci et continue de nous régaler ;)

  • Bonjour,

    je voudrais pour commencer par te féliciter pour la qualité de tes articles, c’est un plaisir de les lires,

    je voudrais a mon tour essayer de reproduire cette « expérience » sur une Toyota (la yaris hybride) mais avant je voudrais savoir si il est possible de le faire sur une voiture hybride et si ce dongle: https://www.amazon.fr/Bluetooth-Diagnostic-Automobile-d%C3%A9faillance-v%C3%A9hicule/dp/B079HS1LWB/ref=sr_1_fkmr1_4?ie=UTF8&qid=1541435717&sr=8-4-fkmr1&keywords=eml+327+obd2 et bien compatible pour le faire ?

    merci d’avance, et bonne continuation a toi

    • Coucou DD,

      Oui tu peux le faire sur toutes les voitures fabriquées après 2000 (pour les européennes), concernant les voitures des US je crois qu’il y en a quelques unes avant 2000
      Après, si c’est une hybride, c’est forcément une récente donc oui tu peux le faire ^^
      Bonne continuation ^^

  • Salut ! Merci beaucoup pour ton article !

    Je cherche à me connecter à à ma prise OBD2 qui est Wifi, avec le téléphone et les applications il n’y a pas de problème, mais me connecter avec un ESP32 (arduino wifi) c’est ok sauf pour trouver comment communiquer.. Je suis connecter mais comment lui demander les infos (commande AT etc) ? (j’ai bien sur utilisé les bibliothèque obd2.h etc

     

    Un grand merci pour ton article :)

    • Hello WiLDCaT,

      Je t’avoue que dans l’immédiat je n’ai pas la réponse à ton problème.

      Je n’ai pas essayé car je n’ai pas d’ESP32 ni d’ODBII en Wifi sous la main (uniquement USB et Bluetooth).
      Cela dit, si je n’ai pas vraiment le temps de m’y pencher pour le moment, je serais ravi que tu nous partages ici tes avancées sur ce sujet.

      Pour ce qui est de l’arduino et Wifi, je me suis commandé sur AliExpress des « wemos d1 mini » il y a quelques jours.
      (Aucun rapport avec l’ODBII, mais ça me permettra de compenser le fait que je n’ai pas d’ESP32 ;) )

      Bonne soirée à toi et merci pour tes encouragements !

      Dyrk

  • Bonjour,

    Merci pour c’est info ça donne envie d’essayer.

    Est il possible de passer par l’OBD pour activer la clim ou le chauffage à distance?

    J’ai l’impression qu’il ne s’agit que d’infos. Mais peut on générer cette action?

  • Bonjour,

     

    Tout d’abord merci pour cet article il est vraiment top. Ayant un peu de temps libre je me suis penche sur le sujet et malgré l’achat d’un ELM327, le 3eme terminal que j’ouvre pour lancer la commande « screen /dev/rfcomm99 38400 » m’affiche un écran noir et malgré l’envoi des commandes je n’ai aucune réponse. D’où peut venir ce souci ?

     

    Merci d’avance,

     

    Bünyamin

Laisser une réponse

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site est protégé par reCAPTCHA et le GooglePolitique de confidentialité etConditions d'utilisation appliquer.