siproxd-orange version 0.2

Mise à jour : RIP siproxd_orange :(

La version 0.2 de siproxd_orange est maintenant disponible !

Cette version est le fruit de beaucoup de reverse engineering, cette fois de l'application Android. D'importants bugs ont été résolus dans cette version : une étape de l'authentification qui change, et l'algorithme (censuré), également nécessaire pour l'authentification, qui comportait des erreurs. La chasse à ces deux bugs, et plus particulièrement le second, était loin d'être de tout repos.

D'autres bugs plus ou moins importants ont également été résolus dans la foulée ; l'un d'entre eux empêchait le bon fonctionnement des appels entrants dans certaines situations.

Téléchargements

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

Étant donné qu'Orange a déjà cessé de mettre à disposition l'application Livephone sur PC et envisage de couper le service sur PC, je croiserai les doigts pour que siproxd_orange continue de fonctionner quoi qu'il arrive.

Posté par x0r à 1 commentaire • Tags : sip orange voip livephone hack

Mettre en place son propre serveur Minitel

Je vous ai déjà expliqué comment relier son Minitel comme terminal Linux, ou alors comment le relier à un Raspberry Pi. Mais s'arrêter là, ce serait oublier que le Minitel est initialement conçu pour consulter des pages Vidéotex avec son modem 1200/75 bauds intégré.

À une époque où le terme « Minitel 2.0 » est utilisé de manière péjorative et où la plupart des terminaux Minitel que l'on trouve sont sur eBay, LeBonCoin, à la déchetterie ou oubliés dans un grenier, quelle idée plus saugrenue que de mettre en place, justement, son propre serveur Minitel ? Après tout, les plus jeunes d'entre nous n'ont pas connu le Minitel. En ayant tenu un stand lors de l'événement « 3615 au revoir », j'ai pu me rendre compte que beaucoup de personnes, même plus âgées que moi, n'ont pas eu l'opportunité de voir fonctionner un Minitel, et de ce fait voir comment on faisait dans les années 80-90 pour réserver un billet de train. Outre le désir de préservation ou de fascination pour les technologies obsolètes, faire cela pour la pure prouesse technique me paraît de surcroît tout à fait justifié.

Schéma de principe
Schéma de principe pour un montage testable chez soi

Le schéma de principe est celui utilisé pour pouvoir tester facilement le montage chez soi sans avoir à dépenser des montants indécents en factures téléphoniques. L'avantage d'utiliser un PBX maison réside aussi dans le fait de pouvoir utiliser une ligne SIP (comme celles d'OVH ou d'Ippi, au hasard) pour que les utilisateurs puissent appeler directement le numéro. Si on ne tient pas à tester, il suffirait juste de brancher le modem 56k à la ligne téléphonique d'Orange, mais nous partirons ici du principe que nous disposions de tout l'équipement du schéma ci-dessus.

Il nous faut donc plusieurs éléments :

  • une application (ncurses ou minicurses) exécutée sur le serveur et qui s'occupe de la présentation des informations sur le Minitel de l'utilisateur ;
  • un serveur sur laquelle tourne cette application ;
  • un modem 56k (ou tout autre modem qui sache gérer le mode V.23bis) compatible avec le jeu de commandes Hayes, branché en série sur le serveur applicatif. Ce modem servira à recevoir les appels téléphoniques des utilisateurs et le serveur décrochera automatiquement pour établir la liaison de données avec le Minitel appelant ;
  • un commutateur téléphonique (aussi appelé PBX) pour le routage des appels et pour la mise en place d'un plan de numérotation interne, ce qui nous permet de tester tranquillement le montage ;
  • un téléphone analogique (oui, analogique) parce que le modem du Minitel ne sait pas numéroter par lui-même (du moins celui des Minitel 1, 1B et 2) ;
  • enfin, vous l'aurez deviné, un Minitel.

Il n'est pas obligatoire d'avoir deux machines physiquement séparées pour le PBX et le serveur applicatif. On peut utiliser la même machine pour les deux rôles. Cela me permettait juste de rendre le schéma plus intelligible.

En ce qui concerne le PBX, rien de compliqué : une machine munie d'une carte OpenVox A400p et d'Asterisk fait largement l'affaire. Prévoir dans ce cas au moins deux interfaces FXS et la possibilité de faire sonner le modem depuis le téléphone analogique (en lui attribuant son propre numéro, comme par exemple 4001 pour le téléphone et 4002 pour le modem).

Branchements matériels

Câblez le montage de la manière suivante :

  1. Branchez la prise T du téléphone en aval de la prise T du Minitel.

  2. Branchez la prise T du Minitel sur le PBX. Il y a de grandes chances que le PBX n'accepte que des prises RJ11 ; on peut alors brancher un câble RJ11 côté PBX sur un adaptateur T vers RJ11 et brancher l'ensemble dessus. C'est certes peu élégant, mais ça marche.

  3. Branchez la prise téléphonique du modem 56k sur le PBX et le câble série sur le serveur applicatif.

Branchement du Minitel vers PBX
Branchement du Minitel sur un PBX

Configuration logicielle

De la même manière que lorsqu'on utilise le Minitel comme terminal série, il vous faudra installer mgetty(8).

La configuration de mgetty(8) fait que ce sera a priori impossible d'utiliser en même temps une application depuis le modem sur un Minitel, ou comme console série comme précédemment. Il vous faudra choisir, ou alors faire ces manipulations sur une autre machine.

Dans cette section, subsituez le nom de votre port série à /dev/ttyUSB0 (j'ai fait mes tests en branchant mon modem sur un convertisseur USB-série).

Dans /etc/mgetty+sendfax/mgetty.config, ajouter une section comme celle-ci :

port ttyUSB0
  speed 1200
  direct no
  data-only yes
  toggle-dtr yes
  need-dsr yes
  port-owner root
  port-group wheel
  port-mode 0660
  login-prompt ''
  login-time 60
  term minitel1b-80
  login-env-ttyprompt-hack yes
  init-chat "" "ATM0E0B2\r" "OK"
  gettydefs 1200v23

Le init-chat est probablement à adapter selon vos besoins et selon votre modem. Renseignez-vous dans la documentation de votre modem. Mon Olitec Self Memory Pro nécessite ATB2 pour forcer la vitesse de ligne à 1200/75 baud. Ajouter également E0 pour désactiver l'écho local et M0 pour désactiver le haut-parleur et expérimenter en silence.

Dans /etc/mgetty+sendfax/login.config, remplacez la dernière ligne par :

*       toto     toto     /chemin/vers/application

où la deuxième colonne représente l'utilisateur sous lequel est exécuté l'application, et la troisième colonne représente l'entrée à ajouter dans utmp(5) (la laisser égale à la deuxième colonne marche bien aussi).

Dans /etc/gettydefs, ajouter (oui, toujours en une seule ligne) :

1200v23# B1200 CS7 PARENB -PARODD GLOBAL #B1200 ISTRIP CS7 PARENB
-PARODD GLOBAL BRKINT IGNPAR ICRNL IXON IXANY OPOST ONLCR CREAD HUPCL
ISIG ICANON ECHO ECHOE ECHOK #@S login: #1200v23

Dans /etc/inittab, ajouter :

s0:12345:respawn:/sbin/mgetty -D ttyUSB0 1200v23

Configuration du PBX

Je ne vais pas vous apprendre comment configurer un plan de numérotation sur Asterisk, mais vous aurez seulement besoin d'une configuration qui permette de faire "sonner" le modem. En d'autres termes, il faut brancher le modem sur une des interfaces FXS de votre PBX, attribuer un numéro de téléphone à ce port (par exemple 4002) et faire en sorte de pouvoir composer ce numéro depuis un autre téléphone branché sur ce même commutateur. C'est vraiment pas plus compliqué que ça !

Lorsque votre modem "sonne", il réagira sûrement en faisant clignoter une ou deux LEDs. Pour en être sûr, connectez-vous directement sur le modem via le port série et vérifiez que le modem envoie des messages RING sur le terminal lorsque vous l'appelez.

Exemple d'application

En guise d'application, n'importe quel programme qui écrit du texte sur stdout et lit des frappes de touches sur stdin fait l'affaire.

#!/bin/bash

stty 1200 istrip cs7 parenb -parodd brkint \
    ignpar icrnl ixon ixany opost onlcr cread hupcl -isig icanon \
    echo echoe echok

# vider l'écran
echo
printf "\x0c"

# mettez le chemin vers votre binaire ici, ou rédigez votre programme
# en shell ci-dessous

# écrire du lorem ipsum à l'écran
# (sans oublier qu'on n'a que 40 caractères par ligne)
echo "Lorem ipsum dolor sit amet, consec-
tetur adipiscing elit. Donec a diam
lectus. Sed sit amet ipsum mauris. 
Maecenas congue ligula ac quam 
viverra nec consectetur ante 
hendrerit. Donec et mollis dolor. 
Praesent et diam eget libero egestas
mattis sit amet vitae augue. Nam
tincidunt congue enim, ut
porta lorem lacinia consectetur."

sleep 10

Libre à vous d'utiliser autre chose qu'un script shell, bien entendu. Il faut juste penser à faire le stty(1) correspondant afin de forcer l'observation du bit de parité paire (dans le cas contraire, la moitié des caractères seront remplacés par des carrés blancs).

L'instant de vérité

Après avoir ajouté la configuration qui va bien dans /etc/inittab, n'oubliez pas un petit init q pour qu'init tienne compte de votre configuration.

Allumez votre Minitel. Composez le numéro correspondant au modem. Si tout se passe bien, vous entendrez peut-être quelques bruits (bips), puis, le plus important, une tonalité aiguë continue (2 100 Hz, plus exactement) que vous reconnaîtrez sûrement si vous avez déjà utilisé un Minitel avant.

Au moment où vous entendez le 2 100 Hz, appuyez sur la touche Connexion/Fin de votre terminal. Le F en haut à droite est alors remplacé par un C clignotant, qui devient fixe au bout de quelques secondes. Enfin, si tout est bien configuré, votre Minitel affiche votre Lorem Ipsum (ou toute autre application que vous y aurez mise à la place). Et c'est exactement comme ça que cela se passait en 1982.

Conclusion

Étant donné que le service Minitel n'existe désormais plus, c'est une partie du patrimoine français qui est en voie de disparition si nous ne trouvons pas le moyen d'archiver, voire reproduire, ce que l'on pouvait faire sur Minitel entre 1982 et 2012.

Mettre en place un serveur Minitel reste donc bien entendu une idée saugrenue, mais le challenge technique derrière reste particulièrement intéressant. Je salue particulièrement ceux qui, dans les années 80 et 90, ont mis en place leur propre serveur privé, sachant qu'ils disposaient à l'époque de machines beaucoup moins puissantes.

siproxd-orange version 0.1.3

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.

Posté par x0r à 6 commentaires • Tags : sip orange voip livephone hack

Faire un logo personnalisé pour son Cisco 7940/7960

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é.

Posté par x0r à 8 commentaires • Tags : voip cisco 7940 7960 phone custom logo

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

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.

Posté par x0r à 1 commentaire • Tags : monster spam harvest harvesting spammeur spamming bot mail privacy github