siproxd-orange version 0.1.3

Auteur :  x0r Publié le   Nombre de commentaires : 6
Mots-clefs : sip orange voip livephone hack

Mise à jour : RIP siproxd_orange :(

La version 0.1.3 de mon plugin d'interopérabilité pour siproxd, siproxd_orange, est enfin prête !

Cette version résoud quelques problèmes de compilation qui pourraient survenir avec des bibliothèques plus anciennes (notamment libcurl ou glibc).

Elle donne également des messages d'erreur plus clairs lorsqu'on utilise des serveurs DNS autres qu'Orange (ce qui empêche le bon fonctionnement du plugin).

Enfin, elle ajoute un garde-fous en comparant l'URL SIP enregistrée par le client en aval, et le numéro de téléphone de l'utilisateur, et n'accepte de relayer que lorsque les deux sont égaux (ce qui permet d'éviter d'envoyer des messages SIP inutiles pour une authentification qui serait de toute façon condamnée à échouer).

Téléchargements

Vous pouvez télécharger les archives aux adresses suivantes :

Pendant ce temps, Orange jette l'éponge sur l'application PC

On dirait qu'Orange a officiellement cessé de maintenir le logiciel Livephone sur PC.

L'application Livephone
        sur PC n'est plus maintenue
Dommage...

Lorsque j'avais commencé à étudier l'application Livephone en mars 2014, j'avais déjà noté l'incompatibilité de l'application PC avec Windows 8. Outre le fait que je trouvais surprenant le fait qu'une application Windows 7 ne puisse pas fonctionner avec Windows 8, la question se posait déjà quant à l'intention d'assurer in fine la compatibilité avec cet OS.

La version 2.5.8, que j'avais utilisée pour mon analyse, sera donc la dernière version qui existera sur PC.

D'un autre côté, les applications iOS et Android semblent toujours être maintenues, donc Orange a peut-être choisi de se concentrer sur les applications mobiles uniquement.

Dans tous les cas, je me suis rendu compte que siproxd_orange continuait à fonctionner correctement. Ce plugin est issu du reverse engineering de l'application PC, donc je pense qu'Orange n'a pas encore l'intention de complètement couper la version PC de ce service.

Mise à jour du 12 octobre : en fait si, ils vont couper l'accès aux PC, donc je vais devoir reverser l'application Android pour assurer la pérennité de ce plugin. Pour le moment, l'application Android semble très similaire dans son fonctionnement à l'application PC, mais les apparences peuvent être trompeuses... À suivre.

Faire un logo personnalisé pour son Cisco 7940/7960

Auteur :  x0r Publié le   Nombre de commentaires : 9
Mots-clefs : voip cisco 7940 7960 phone custom logo

Je me suis acheté il y a quelques mois un magnifique téléphone Cisco 7960 (et depuis, deux 7940 également, juste parce que cela m'amusait) pour pouvoir faire mes expériences avec Asterisk mais aussi avec siproxd-orange.

Étant donné qu'il s'agit de matériel d'entreprise (après tout, l'appareil a l'air d'être conçu pour fonctionner encore même si on le jette quatre cents fois contre le mur), une des fonctionnalités est d'afficher un logo personnalisé en fond d'écran à partir d'une image au format BMP.

Cet article vous montrera comment faire, même s'il présume que vous avez déjà mis en place l'infrastructure réseau (serveurs DHCP, TFTP et HTTP notamment) permettant de gérer et de configurer automatiquement ces téléphones.

Je me suis cependant rendu compte que toutes les images BMP n'étaient pas acceptées, et qu'il faut donc faire particulièrement attention lorsqu'on exporte l'image depuis GIMP afin de le forcer à utiliser une révision du format BMP compatible avec le téléphone.

Il y a BMP... et BMP.

D'après l'article Wikipédia sur le format BMP (en anglais), le format BMP a connu en réalité plusieurs révisions différentes. En particulier, certaines révisions ont ajouté des éléments à l'en-tête du fichier BMP, comme par exemple les informations de profils de couleur ICC pour garantir l'affichage correct sur tous les types de moniteurs. Ces révisions sont compatibles avec les versions antérieures, et pour peu qu'une implémentation du format soit à peu près propre, elle peut être également compatible avec les révisions ultérieures, en ignorant les extensions ajoutées dans les nouveaux formats.

GIMP, par défaut, exporte en BMP avec toutes ces options activées. En revanche, le téléphone Cisco ne prend pas en charge les révisions les plus récentes du format BMP et vous vous retrouveriez donc avec une horreur comme celle-ci :

Ce n'était pas tout à fait ce que j'avais dessiné...

Avec file(1), on voit bien la différence entre un logo qui ne fonctionnera pas (badlogo.bmp) et un logo qui fonctionne (logo.bmp) :

# file badlogo.bmp logo.bmp
badlogo.bmp: PC bitmap, Windows 95/NT4 and newer format, 90 x 56 x 8
logo.bmp:    PC bitmap, Windows 3.x format, 90 x 56 x 8

Heureusement, il n'y a point besoin d'utiliser une version antédiluvienne de Paint pour fabriquer des logos qui fonctionnent.

En pratique, avec GIMP

Pour faire votre propre logo, ouvrez GIMP et créez une nouvelle image en niveaux de gris, 90 × 56 pixels.

Créer une image de 90 par 56 pixels.

Réalisez ensuite votre logo en niveaux de gris. Il vaut mieux utiliser les couleurs #000000, #404040, #808080 et #ffffff pour votre image ; l'écran du Cisco n'accepte que quatre niveaux de gris. Les autres niveaux de gris seront tramées ("dither") par le téléphone. Mon image ne respecte pas cette contrainte, mais ce n'est pas très grave.

Réalisation du logo dans GIMP.

Exportez ensuite en BMP, en prenant bien soin de cliquer sur « Options de compatibilité » puis sur « Ne pas inscrire d'information d'espace couleur ». Je n'ai pas testé la compression Run-Length, mais nous sommes de toute façon sur un LAN à 100 Mbps et le logo non compressé fait déjà seulement 6 230 octets.

Ne pas oublier de cocher cette case...

Configuration du téléphone

Uploadez ensuite votre logo sur un serveur Web accessible depuis le téléphone. Il ne reste plus qu'à indiquer dans SIPDefault.cnf (ou SIP<adresse_mac>.cnf si vous voulez un logo différent par téléphone) l'URL vers ce logo. Par exemple :

logo_url: "http://voip.example.com/cisco/logo.bmp"

Au prochain reset du téléphone, vous pourrez alors admirer votre travail.

Le résultat final, qui est cette fois correctement affiché.

Monster.fr collecte des adresses e-mail publiques et spamme

Auteur :  x0r Publié le   Nombre de commentaires : 1
Mots-clefs : monster spam harvest harvesting spammeur spamming bot mail privacy github

Il n'y a que peu de choses qui me mettent en rogne dès le réveil, et l'une d'entre elles sont les spams-invitations à rejoindre tel ou tel réseau social professionnel inintéressant (notamment LinkedIn ou Viadeo).

Mais l'un de ces sites-là sort particulièrement du lot, car ils se livrent avec aplomb et sans aucun complexe à des techniques déloyales pour mettre la main sur des adresses e-mail.

Voici en effet un e-mail que j'ai reçu de Monster sur une adresse exclusivement réservée à mon compte Github :

Mail reçu de monster

Inutile de dire que j'étais surpris qu'une adresse exclusivement réservée à un usage Github se soit retrouvé dans la base de données d'un de ces délires socioréticulaires, alors que je fais pourtant tout pour m'en passer.

Intrigué, je suis allé lire la charte de soi-disante "confidentialité" de cette société. Voici ce que je lis :

« Nous pouvons également collecter ou utiliser des informations vous concernant issues de sites à accès public, que vous ayez ou non un compte chez nous. Vous avez la possibilité de faire valoir vos droits sur ces informations, de modifier leurs paramètres de visibilité ou encore de demander leur suppression. Nous ne pouvons cependant pas garantir que d'autres informations vous concernant ne seront pas une nouvelle fois recueillies à partir de sites Web à accès public. »

En d'autres termes, Monster revendique le droit de se rabaisser à de vulgaires spammeurs en employant la même démarche qu'eux, à la différence près qu'ils ne vendent pas de viagra. Vous pouvez toujours leur demander de supprimer votre adresse mail, mais de toute façon ça ne servira à rien.

Il est parfaitement inacceptable qu'une société montre aussi peu de sérieux en employant des méthodes déloyales (et de surcroît illégales) afin d'envoyer des messages non sollicités, et je suis surpris que personne ne se soit aperçu de ça avant moi. Je n'ai pas cliqué sur le lien de désinscription pour deux raisons : tout d'abord parce que je n'ai jamais été client de cette société et que je ne vois donc pas pourquoi cela incomberait à moi d'aller supprimer ces coordonnées, mais aussi parce que le dump texte que me fournit mutt montre que ce lien ne pointe pas vers monster.fr, mais vers des URL à rallonge dont le domaine est mailtrack.me et que cela me paraît étrange.

Le fournisseur mail de cette société étant turboSMTP, j'ai pris le temps d'envoyer un message à leur adresse abuse@ afin de voir si j'aurai besoin d'ajouter une autre ligne à mon .procmailrc ou pas. Leur politique anti-spam ne laisse planer aucun doute : ce genre de méthodes est passible de bannissement. J'ai pris le soin d'y inclure le paragraphe cité ci-dessus de la charte de "confidentialité" de Monster.

Et six heures plus tard, turboSMTP m'indique que le compte a été suspendu. Tant pis pour les utilisateurs légitimes, certes, mais les méthodes de collecte d'adresses mail que je viens de décrire restent difficiles à défendre en 2014, et je pense que je suis loin d'être le seul à avoir été importuné de la sorte. Bon an mal an, c'est donc une bonne chose de faite.

Les secrets du bus CAN de la Renault Clio III

Auteur :  x0r Publié le   Nombre de commentaires : 87
Mots-clefs : renault clio obd2 elm327 diagnostic can bus

J'ai déjà parlé un peu des dongles OBD2 et des quelques expériences que j'ai faites avec ce dongle sur ma voiture.

Cependant, je me suis assez rapidement rendu compte des limitations du dongle OBD2. Par exemple, la liste des paramètres que l'on peut récupérer est assez limitée. J'ai par exemple pu constater que je ne dispose pas des indications du MAF (flux de mélange air-essence à l'admission) sur mon véhicule. Finalement, mis à part la vitesse, le compte-tours et la température du moteur, il n'y a pas grand-chose avec quoi travailler si on veut fabriquer une planche de bord alternative, par exemple.

La norme OBD2 est conçue pour fonctionner quelle que soit la couche physique sous-jacente, de la même manière que le protocole HTTP reste le même, que l'on soit sur un réseau Ethernet, ATM ou MPLS. Dans le cas de ma Clio III, il y a en réalité un véritable réseau informatique avec un trafic assez conséquent (entre 10 et 100 trames par seconde) avec parfois des contraintes temps-réel. Ce réseau (ou bus) s'appelle CAN (Controller Area Network) et est de plus en plus répandu dans les véhicules en circulation. Sur la Clio, il s'agit de la variante avec des adresses de 11 bits. Le débit est de 500 kbps, même si certaines trames semblent être à 250 kbps.

La puce ELM327 de mon dongle possédant une fonction d'écoute, je me suis amusé à regarder ce qui passait sur le bus. Et c'est là que je me suis rendu compte de l'énorme quantité de données qui circule sur le bus. Lorsque le moteur tourne, j'irais même jusqu'à estimer le taux d'occupation du lien à au moins 20%. Devant cette découverte, je me suis senti obligé de me lancer dans une analyse et voir à quoi correspondent toutes ces trames.

Constatant que je ne suis pas la seule personne à être aussi curieuse (et c'est d'ailleurs ce topic qui a titillé ma curiosité initiale), je publierai donc les résultats intermédiaires de mes recherches, dans l'espoir qu'elles pourront être utiles à certaines personnes. Bien entendu, si vous disposez de renseignements complémentaires, j'en serai toute ouïe.

Je commencerai donc par exposer la méthodologie et les outils de ce travail de rétroingénierie, pour ensuite dresser la liste des adresses CAN que j'ai vues passer sur le bus, pour enfin en déduire le format de chacune des trames CAN. Le code source de mes outils est bien entendu public.

Méthodologie

La méthodologie est relativement simple. Il m'a d'abord fallu régler de façon permanente le dongle pour qu'il communique à 230 400 bauds avec l'hôte. Cette mesure est nécessaire afin d'éviter les erreurs "BUFFER FULL".

J'ai ensuite codé un outil qui envoie automatiquement toutes les commandes nécessaires (dont ATH1, ATCAF0 et ATMA) au dongle, et qui écrit toutes les trames reçues sur la sortie standard, sauf celles qui ont un contenu entièrement identique. Cela permet d'analyser plus facilement les trames qui changent de contenu en fonction des actions que je fais.

J'ai ensuite écouté pas mal de trafic réseau afin de distinguer les adresses CAN qui communiquent même contact coupé, celles qui communiquent avec la clé en position "accessoire" et celles qui communiquent avec la clé en position "marche".

L'étape suivante consistait à appuyer sur tous les boutons, actionner tous les leviers et toucher à tous les réglages, afin de voir quels étaient ceux qui modifiaient des contenus de trames CAN.

Adresses CAN obtenues

Les tableaux suivants résument les différentes adresses CAN que je vois passer, la fréquence (très approximative) de rafraîchissement, la vitesse de ligne utilisée et un résumé succinct de leur contenu.

AdresseDébitFréquenceDescription succincte
0x215500 kbps50 s-1?
0x35d500 kbps40 s-1?
0x60d500 kbps40 s-1État d'interrupteurs et de capteurs divers
0x625500 kbps10 s-1?
0x645500 kbps10 s-1Rétroéclairage tableau de bord
0x6e4500 kbps? s-1?
0x715500 kbps3 sKilométrage total et autres
Adresses CAN présentes à l'arrêt
AdresseDébitFréquenceDescription succincte
0x27f500 kbps50 s-1?
0x284500 kbps50 s-1Vitesse angulaire des roues
0x285500 kbps50 s-1Vitesse angulaire des roues
0x2a0500 kbps50 s-1?
0x354500 kbps25 s-1Vitesse de la voiture, distance parcourue
0x511500 kbps10 s-1?
0x551500 kbps10 s-1Température moteur, consommation
0x5c5500 kbps10 s-1Kilométrage; état frein à main
0x5fd500 kbps50 s-1Kilométrage; âge du véhicule
Adresses CAN présentes en position "accessoire"
AdresseDébitFréquenceDescription succincte
0x0c2500 kbps100 s-1Position et vitesse angulaires du volant
0x161500 kbps??
0x181500 kbps100 s-1État du moteur et des pédales
0x1f9500 kbps100 s-1Régime moteur
0x500500 kbps10 s-1?
0x5e4500 kbps100 s-1?
0x651500 kbps10 s-1État ceinture conducteur et airbag passager
Adresses CAN présentes en position "marche"

Il faut néanmoins noter les choses suivantes :

  • les données sont cumulatives; c'est-à-dire qu'en marche, on verra passer l'ensemble des vingt-trois adresses CAN différentes et pas seulement celles qui sont listées dans le tableau correspondant ;
  • la position "marche" correspond à la position de la clé (celle où toutes les diodes du tableau de bord s'allument pendant quelques secondes), et non pas à l'état du moteur (qui peut être arrêté).

J'ai relevé que certaines trames faisaient l'objet d'un contrôle d'intégrité à l'aide d'un checksum en fin de message. Pour calculer le checksum, faire la somme sur 8 bits de tous les autres octets du message et prendre le complément à 1.

Dissection

J'ai remarqué une première chose, et c'est que tout n'est pas forcément relié au bus CAN. Par exemple, le réglage électrique des rétroviseurs ou le réglage de l'heure ne provoquent pas de trafic ou ne modifie pas de trames. On peut donc conjecturer que Renault a adopté un « principe de parcimonie » : si un paramètre n'intéresse pas un autre calculateur ou système dans la voiture, celui-ci ne sera pas diffusé sur le bus CAN. Le câblage coûte certes cher, mais les transceivers CAN aussi.

Voici pour le moment les informations que j'ai pu déduire de mes observations.

Plage 0x000-0x1ff

0x0c2 -> 8108 7FFF 5B 9D
         └─┬┘ └─┬┘    ─┬
           │    │      │
           │    │      └─── Checksum
           │    └────────── Vitesse de rotation du volant (1)
           └─────────────── Angle du volant (2)

(1): soustraire 0x8000 (unité exacte inconnue)
(2): soustraire 0x8000, résultat en incrément de 0,1°

0x161 -> 30 30 65 00 10
         ─┬
          │
          └──────────────── Couple moteur estimé volonté conducteur (1)

(1): multiplier par 2 puis soustraire 100, résultat en Nm



0x181 -> 4174 4C 52 4D 20 3A 00
         └─┬┘    ─┬    ─┬
           │      │     │
           │      │     └─ Position pédales embrayage/frein (1)
           │      └─────── Position pédale accélérateur (2)
           └────────────── Régime moteur (3)

(1): bit 3 = pédale d'embrayage enfoncée
     bit 0 = pédale de frein enfoncée
(2): varie entre 0x10 (relâché) et 0xe0 (en butée)
(3): diviser par 8 pour la valeur réelle



0x1F9 ─> 22 00 3BA1 CA FF
               └─┬┘
                 │
                 └──────── Régime moteur (1)

(1): diviser par 8 pour la valeur réelle

Plage 0x200-0x2ff

0x215 ─> 42 40 1C 03 0F 0F
            ─┬
             │
             └──────────── Position marche arrière (1)

(1): bit 6 = marche arrière enclenchée

Plage 0x300-0x3ff

0x354 ─> 1815 3312 00 00 04 00
         └─┬┘ └─┬┘       ─┬
           │    │         │
           │    │         └─ État frein (1)
           │    └───────── Distance depuis démarrage (2)
           └────────────── Vitesse (3)

(1): bit 4 = pédale de frein enfoncée
(2): multiplier par 0,1 m
(3): multiplier par 0,01 km/h

Plage 0x500-0x5ff

0x551 ─> 7B 26 6A 00 FF 72 00
         ─┬ ─┬
          │  │
          │  └──────────── Carburant utilisé (1)
          └─────────────── Température du moteur (2)

(1): mesuré depuis le dernier démarrage, avec 12 500 unités = 1 L
(2): soustraire 40 pour obtenir la valeur en °C



0x5C5 ─> 40 0 0C633 06 B0 00 13
         ─┬   └─┬─┘
          │     │
          │     └───────── Kilométrage 
          └─────────────── État frein à main (1)

(1): bit 3 = frein à main enclenché



0x5FD ─> 0C633 235618 0 00 20
         └─┬─┘ └──┬─┘
           │      │
           │      └─────── Âge du véhicule (en min)
           └────────────── Kilométrage

Plage 0x600-0x6ff

0x60D ─> 003618 00 41 7C 02 00
         └──┬─┘    ─┬ ─┬ ─┬ ─┬
            │       │  │  │  │
            │       │  │  │  └─ Inputs (1)
            │       │  │  └──── État marche arrière (2)
            │       │  └─────── Température moteur (3)
            │       └────────── Température extérieure (3)
            └────────────────── État capteurs divers (4)

(1): bit 0 = appui sur bouton "haut" du comodo droit
     bit 1 = appui sur bouton "bas" du comodo droit
(2): bit 4 = marche arrière engagée
(3): mesuré en °C (soustraire 40)
(4): bit 23 = coffre ouvert
     bit 22 = porte arrière droite ouverte
     bit 21 = porte arrière gauche ouverte
     bit 20 = porte avant droite ouverte
     bit 19 = porte avant gauche ouverte
     bit 18 = (FP) feux de position allumés
     bit 17 = (FC) feux de croisement allumés
     bit 14 = (CD) clignotant droit allumé
     bit 13 = (CG) clignotant gauche allumé
     bit 11 = (FR-AL) feux de route allumés (ou appel de phare)
     bit 10 = clé en position marche
     bit 9  = clé en position accessoire
     bit 8  = (PA) feux de brouillard avant allumés
     bit 5  = condamnation des portes enclenchée
     bit 4  = condamnation du coffre enclenchée
     bit 2  = (FBA) feu de brouillard arrière allumé



0x645 ─> 00 FF FF 0900
            ─┬    └─┬┘
             │      │
             │      └────────── Vitesse (× 0,01 km/h)
             └───────────────── Intensité rétroéclairage instruments (1)

(1): Varie entre 0x00 (minimum) à 0xfe (maximum), ou 0xff (éteint)



0x651 ─> 04 F0
         ─┬ ─┬
          │  │
          │  └───────────────── État ceinture (1)
          └──────────────────── État airbag (2)

(1): bit 0 = ceinture conducteur non attachée
(2): bit 2 = 0 si clé en accessoire, 1 si marche
     bit 1 = airbag passager désactivé

Plage 0x700-0x7ff

0x715 ─> 0 0C633 18 1E 3A 99 42
           └─┬─┘
             │
             └───────────────── Kilométrage

Conclusion

À ma grande déception, les informations que l'on obtient sont assez superficielles, à l'image de ma méthodologie qui se contente, in fine, de comparer des actions et des réponses à des entrées précises. Je peux néanmoins être satisfait du fait d'avoir trouvé la plupart des éléments que je pourrais afficher sur un HUD maison, comme la vitesse et le compte-tours.

On peut ensuite ranger le reste des valeurs non décodées en deux catégories : d'une part, celles qui dépendent d'options dont ma voiture n'est pas équipée (par exemple les radars de recul qui donneraient des valeurs de télémétrie, etc.) ; d'autre part, celles qui dépendent de situations que je ne peux que difficilement reproduire à moins d'être sur un circuit fermé (déclenchement des systèmes de sécurité comme l'ABS ou les prétentionneurs, par exemple).

Je pourrais peut-être obtenir des informations intéressantes en injectant des fausses trames à l'aide de mon dongle. La peur de bricker accidentellement ma voiture ou de déclencher des dispositifs pyrotechniques comme les airbags me retient cependant de le faire. Je laisserai l'initiative à une personne plus intrépide que moi.

siproxd-orange version 0.1.2

Auteur :  x0r Publié le   Nombre de commentaires : 5
Mots-clefs : sip orange livebox voip livephone hack cisco siproxd linphone paramètres

Mise à jour : RIP siproxd_orange :(

Après avoir corrigé quelques bugs impactant la version 0.1.1 et après avoir mis à jour la documentation, j'ai décidé de packager une version 0.1.2 de siproxd_orange. Merci à Maxime Marais, imval et tous ceux que j'aurais pu oublier pour leurs bugreports, contributions et feedback de manière générale.

Cette version résoud un segfault qui peut se produire dans des conditions encore obscures, met à jour la documentation et corrige certains bugs et omissions dans le script ./configure.

Téléchargements

Vous pouvez télécharger la version 0.1.2 de siproxd_orange ici :

Appel aux contributeurs

Mise à jour du 14 novembre 2014 : après analyse et confirmation par un autre utilisateur, la manipulation décrite ci-dessous n'est pas nécessaire.

J'ai également entendu dire que le plugin siproxd_orange ne fonctionnerait que si l'application Livephone sur PC a été exécuté au moins une fois auparavant, comme si l'application officielle était capable de demander une activation du service. Comme je ne peux plus reproduire cela chez moi, je serais curieux de savoir comment cela se produit. Si vous êtes en mesure de fournir des logs de débogage de siproxd avec le plugin chargé (en supprimant, bien entendu, les informations sensibles), je vous saurai reconnaissant de m'envoyer un exemplaire par mail. Vous pouvez utiliser GPG pour chiffrer votre message, le cas échéant.

Si vous pensez avoir trouvé un bug dans siproxd_orange ou si vous avez une proposition d'amélioration, vos patchs et bugreports sont les bienvenus.