mardi, août 30 2011

metasm, en mieux (ou pas)

Il n'y a que deux choses qui manquent à Python, à mon humble avis : metasploit, et metasm. Or il semblerait qu'il y a quelques jours/semaines, l'un de ces deux manques ait été comblé par miasm, l'équivalent de metasm en python ! J'étais donc obligé de faire au moins un petit billet là dessus :)

Engine - Creative Common by "cbowns" on Flickr
Comment installer miasm ? La page officielle du projet est relativement claire, mais ne s'applique pas immédiatement (en particulier quand on est sous gentoo). Voilà donc la démarche que j'ai suivi, ce n'est peut être pas la meilleure mais "chez moi ça marche"(c). D'abord voyons les dépendances :

  • Grandalf (https://github.com/bdcht/grandalf) in order to render graphical disassembler.
  • Modified libtcc (http://bellard.org/tcc/) to Jit code for emulation mode. see below
  • python-ply for parsing
  • numpy
  • python-virtualenv
  • python-dev
  • python-qt4

Allons y par étape en adaptant pour gentoo :

Grandalf viendra tout seul quand on clonera le méta-répertoire, on ne s'en occupe donc pas.

Concernant la libtcc on va suivre les instructions tout simplement : git clone git://repo.or.cz/tinycc.git puis on édite le Makefile conformément à ce qu'indique le site de miasm, puis make...échec texi2html: Command not found...Pas de problème emerge -v texi2html puis on re-tente le make : victoire ! Il ne reste plus qu'à make install.

Pour "python-ply" il faut en fait installer "dev-python/ply", sauf qu'il est masqué par le keyword x86. On démasque donc et on installe joyeusement : echo "dev-python/ply ~x86" >> /etc/portage/package.keywords && emerge -v ply

Pour "numpy" rien de plus simple emerge -v numpy.

Idem pour "python-virtualenv" qui s'installe sans poser de problème avec un simple emerge -v virtualenv

Pour "python-dev" c'est encore plus simple : rien à installer puisque nous sommes sous Gentoo :)

Enfin "python-qt4" est lui aussi assez simple à obtenir puisqu'il suffit d'un emerge PyQt4[1]

Maintenant on clone le répertoire hg clone https://code.google.com/p/smiasm/ smiasm...fail. Après un emerge -v hg-git ça ne se passe pas mieux...Après quelques recherches la version de mercurial stable sous gentoo est la 1.7, or le support des subrepository GIT n'apparait dans mercurial qu'à partir de 1.8 -_- ....bon...echo "=dev-vcs/mercurial-1.8.2 ~x86" >> /etc/portage/package.keywords && emerge -v =dev-vcs/mercurial-1.8.2...damned ça foire encore. Après un poil de trifouillage il semblerait que ça soit le clonage de grandalf qui foire...probablement à cause du .hgsub du répertoire smiasm qui pointe (à tort?) vers [git]https://github.com/bdcht/grandalf ...Bon on clone grandalf à la main git clone git://github.com/bdcht/grandalf.git, et également miasm parceque "chezmoiçaapasmarché"(c) hg clone https://code.google.com/p/miasm/ miasm -v --traceback ainsi que le README.txt qui est à la racine du repository smiasm et, plus important : pyMakefile et Makefile. Pfiou, tout ça ! Maintenant on revient sur le chemin tracé par le site officiel : on tape donc make && make install dans le répertoire de smiasm..victoire :) !!!

On teste si tout marche bien cd miasm/example/ && python disas_and_graph.py /bin/ls ...FAIL NameError: global name 'route_with_nurbs' is not defined

Bon, on re-trifouille et je vous fait grace des détails. Au final la méthode que j'ai employé (et qui marche sur gentoo et ubuntu 10.4 une fois les dépendances de chaque distro réglées) c'est :

  1. D'abord on se débarasse du problème de TCC en suivant à la lettre les instruction du site officiel smiasm : clone git://repo.or.cz/tinycc.git, ensuite on rajoute "-fPIC" dans les CFLAGS du fichier Makefile (CFLAGS+=-g -Wall -fPIC) puis on compile/installe : ./configure && make && make install
  2. Maintenant on attaque smiasm à proprement parler : On clone une première fois smiams : hg clone http://code.google.com/p/smiasm/, ça se termine avec un message d'erreur mais "pas grave". On télécharge ensuite à la main les fichiers "Makefile" et "pyMakefile" depuis l'accès HTTP au repository (http://code.google.com/p/smiasm/source/browse/)
  3. On clone à la main grandalf parce que le .hgsub de smiasm utilise une notation exotique qui n'est comprise ni par le mercurial gentoo par défaut ni par le mercurial ubuntu 10.4 par défaut : cd smiasm && rm -Rf grandalf && git clone git://github.com/bdcht/grandalf.git grandalf
  4. On fait un rollback de version de grandalf puisque les versions commitées depuis juillet dernier ne semblent plus compatibles avec miasm (disparition de la fonction route_with_nurbs) : git checkout a851b359185132645d9dce3d11037f3263604358
  5. Il ne reste plus qu'à compiler et installer smiasm :) ! cd .. && make && make install

A présent on peut tester le tout cd miasm/example/ && python disas_and_graph.py /bin/ls. Victoire :

miasm - test script

Il ne nous reste plus qu'à dévorer la documentation pointée par Sid[2] et à nous les joies du bas niveau avec encore plus de facilité ! A bientôt donc pour de nouveaux billets passionants (en tout cas j'espère qu'ils réussiront au moins à me passioner lors de leur rédaction lol) !

Notes

[1] Ce qui peut prendre pas mal de temps si jamais vous devez recompiler qt-core :( ...

[2] Merci d'ailleurs, sans ce blog post je ne l'aurai jamais trouvé lol

jeudi, juin 23 2011

Les mains dans le cambouis

Après avoir passé des mois à faire de la sécurité informatique à haute dose on peut avoir envie de se changer un petit peu les idées (mais vraiment juste un peu). Ce genre de moment est l'occasion révée pour ressortir des vieux projets des placards ! Pour ma part j'ai ressorti 3~4 vieux projets et en moins de 2h ils ont tous, sauf un, dérivé vers la sécurité informatique (on ne se refait pas ^^ !). Histoire de jeter malgré tout une petite pierre hors de la thématique usuelle de ce blog je vais donc vous parler du dernier de ces projets (ça reste du Hack, ne vous inquiétez pas ;) )

Robot - Based on a picture published under the Creative Common license by "vmario" on Flickr
Il y a fort fort longtemps dans une contrée pas si éloignée que ça j'ai participé deux années de suite à la coupe de France de robotique. Nos deux participations furent des fiascos mais tant pis, on s'était quand même bien amusé ! Mes responsabilités dans l'équipe se cantonnaient au domaine informatique[1] et il faut bien avouer que c'était pour le mieux car j'étais une quiche en électronique (surtout en comparaison avec les brutes qu'on avait de ce coté là !). Le temps a passé et j'ai toujours considéré que connaitre un peu d'électronique m'ouvrirait pleins de nouveaux horizons d'amusements... Il y a quelques mois de celà j'ai donc craqué et j'ai investi lourdement (au moins...pfiou....facilement...oula....25£ au bas mot :D !) dans un arduino !!! J'ai également ratissé ebay, dealextreme, et oomlout pour obtenir une plaque de prototypage, des cables, des résistances de toutes les valeurs possibles, quelques diodes, et un capteur de distance infra-rouge [2].

Une fois tout ce petit matériel reçu j'ai enfin pu m'amuser à faire clignoter mes LED, à changer les patterns de clignotements en fonction de la distance retournée par le capteur, etc. Puis mon jouet est tombé dans l'oubli, submergé par un ras de marré de sécu informatique. La semaine dernière l'envie de ressorti mon arduino s'est fait sentir et en particulier celle de lui faire commander des moteurs ! Pour le signal de commande aucun problème, l'arduino possède une commande toute faite pour envoyer une PWM sur un port de son choix. Reste donc à acheter des moteurs adéquats, et à trouver une façon de leur envoyer de la puissance.

Pour faire simple j'ai d'abord acheté deux micro moteurs 6V consommant 40mA. C'est extrèmement faible, mais c'est pour une bonne raison : l'arduino est capable de fournir cette puissance là tout seul, sans électronique de puissance supplémentaire :) En choisissant ces moteurs je m'assure donc de pouvoir jouer un petit peu mais probablement pas de faire un robot capable de se déplacer. En effet l'arduino seul fournira à mes moteurs la modeste puissance de 0,2W[3], à titre de comparaison à la coupe de France nos moteurs tournaient autour des 30~40W :-D

Seulement voilà : la livraison de mes moteurs devrait prendre au moins 10 jours :-( ...Du coup je me suis dit qu'en les attendant j'allais réfléchir à une carte de puissance capable d'alimenter de plus gros moteurs (et donc, pourquoi pas, de rendre mon arduino mobile). C'est à ce moment du billet qu'on retombe dans l'informatique (et qu'on compte sur les doigts d'une main le nombre de mes lecteurs qui sont arrivés jusqu'ici lol) : pour confirmer les cartes de puissance que je pourrait imaginer j'ai décidé de les simuler sur ordinateur plutôt que d'envoyer un mail toutes les 10mn pour demander leur avis à mes amis qui sont forts en électroniques. Mais pour simuler un circuit électronique il faut un logiciel de simulation électronique, or il s'avère que ce n'est pas si simple à trouver. C'est donc là que ce billet prend tout son intéret : vous faire part de mon retour d'expérience en la matière et vous éviter de galérer autant que moi si l'envie vous prend de faire mumuse avec un fer à souder virtuel.

Le cahier des charges est simple : il me faut un logiciel gratuit, fonctionnant sous linux, et qui soit capable de simuler tout les petits circuits simples auxquels je pourrai penser. Après quelques recherches sur google j'ai trouvé pas mal de pages faisant des comparatifs des différents logiciels disponibles malheureusement beaucoup des infos présentes sur ces pages étaient vieilles et ne correspondaient plus du tout à la réalité. Du coup j'ai passé plusieurs jours à débrousailler le terrain pour ne finalement conserver que deux logiciels valables : Oregano d'une part, et gEDA d'autre part.


Oregano

Oregano - screenshot by Ozwald

J'ai commencé par Oregano parcequ'il a une interface super user-friendly et semble monolythique (donc simple). A l'usage il est effectivement très agréable mais je lui ai très vite trouvé deux inconvénients :

  • Impossible de trouver comment faire des mesures de courant. Poser des sondes de tension est enfantin, mais les sondes de courant doivent se cacher quelque part au fin fond d'un menu d'option et je ne les ai pas trouvé...
  • régler finement les paramètres de ses composants (en particulier des semi-conducteurs) parait impossible. En pratique c'est possible mais ça n'a rien d'intuitif. En effet, alors que toute l'interface est ultra simpliste, il faut aller éditer l'onglet "model" des propriétés du composant pour y renseigner le model SPICE brute (ce qui est franchement cabalistique et semble contre-nature par rapport au reste de l'interface "clic clic").

Finalement je pourrai l'utiliser...d'autant qu'il permet d'exporter les schéma au format netlist (j'expliquerai ce que c'est un peu plus tard) et que je pourrai donc facilement faire mes mesures de courant. Mais bon...comme je suis passé à gEDA quand je n'arrivais pas à spécifier les caractéristiques d'un pauvre transistor bipolaire, je reste pour l'instant sur gEDA !


gEDA

Alors là c'est du lourd ! gEDA est en fait un conglomérat de plusieurs logiciels spécialisés chacun dans une étape du travail de l'électronique, ce qui lui permet d'être très puissant[4] mais aussi de faire très peur aux débutants :-D En réalité, après m'être penché un petit peu sur le monstre, les fonctions que je souhaite réaliser se résument dans seulement deux tout petit logiciels qui se maitrisent finalement assez vite.

gschem - Screenshot by Ozwald Tout d'abord il y a gschem qui permet de "dessiner" son schéma électronique. Le maniement est beaucoup moins intuitif que celui d'oregano mais au moins il est homogène : que celà soit pour paramétrer un transistor ou une résistance la démarche est la même (à savoir : vous n'avez qu'à ajouter manuellement à votre objet un paramètre de nom "value" qui contient le code SPICE du composant). Cet outil ne sert qu'à dessiner le schéma par contre, vous ne pourrez pas faire de routage avec, et vous n'avez pas à placer de sondes de tensions/courants/autre sur le schéma comme vous devez le faire avec oregano. Une fois le schéma dessiné vous le sauvegarder au format gschem (format par défaut) et vous passez au logiciel suivant...

gspiceui - Screenshot by Ozwald ...gspiceui ! Le petit logiciel gspiceui (qui ne fait pas parti de la suite gEDA d'ailleurs lol) va vous permettre de simuler votre circuit. D'ailleurs si vous êtes sous gentoo pensez à le compiler avec les flags "waveform" et "schematics"[5], si vous êtes sous ubuntu n'utilisez pas la version packagée mais allez plutôt télécharger la dernière[6].

Bref, pour réaliser une simulation avec gspiceui vous devrez importer le schéma réalisé avec gschem (menu File>Import), vous sélectionnez les composants du schéma que vous voulez observer, vous sélectionnez le type de simulation à faire (la simulation temporelle correspond à l'onglet "Transient"), vous choisissez les paramètres temporels de la simulation, les grandeurs que vous voulez observer (courant, tensions, etc.) puis il ne reste plus qu'à créer un fichier de simulation (menu "Simulate>Create"), à lancer la simulation (menu "Simulate>Run"), et à lancer l'appli de visualisation de vos courbes (menu "Simulate>Data viewer").

Une fois le "Data Viewer" lancé vous pouvez glisser/déposer les grandeurs que vous voulez observer depuis la fenêtre flotante contenant la liste de toutes les grandeurs disponibles jusqu'à la zone de traçage de courbe et voilà !

Il ne me reste plus qu'à conclure en vous disant qu'aussi bien oregano que gspiceui s'appuient en fait discrètement sur des moteurs de simulation électronique indépendants (le plus connu étant "SPICE", mais gnucap fonctionnant tout aussi bien si ce n'est mieux (c'est d'ailleurs ce dernier que j'utilise)) ; Que ces moteurs de simulation mangent des fichiers au format "netlist" qui sont générées par oregano ou gspiceui[7] ; Que les deux derniers screenshots (gschem et gspiceui) correspondent justement à un schéma d'alimentation de puissance pour moteur que j'ai moi-même pensé ; Que cet amplificateur de puissance fonctionne ; Qu'il est super simple et tout pourri aussi bien en rendement qu'en fonctionnalités (il ne permet de faire tourner le moteur que dans un seul sens par exemple) ; Mais qu'il fonctionne (oui, j'en suis fier :-p !) ; Et enfin que je vous déconseille de l'utiliser en l'état car sur les screenshots il manque la diode de roue libre.

Allez, on se quite sur la description SPICE d'une diode (pour vous prouver que c'est vraiment cabalistique et que ça ne colle pas du tout avec l'interface bisounours d'oregano) :

MODEL 1N1004 D (IS=0.5UA RS=6 BV=5.20)

Notes

[1] et un petit peu de mécanique quand ça se résumait à manier l'arme ultime du travail propre : le pistolet à colle

[2] le même type que ceux qu'on avait utilisé sur notre robot :)

[3] Souvenez-vous : P = UI. Dans mon cas I=40mA et U=5V (et non pas 6V, car l'arduino sort en 5V tout simplement)

[4] Vous pouvez tout faire avec gEDA, du design de schémas aux plans de routage en passant par les simulations électriques de tout poil

[5] sinon vous ne pourrez pas tracer de courbes, ou vous ne pourrez pas importer les schémas dessinés par gschem

[6] la version packagée sous ubuntu souffre d'un bug tout con qui rend le lancement de simulation impossible si vos paramètres de langue utilisent une virgule au lieu d'un point pour les nombres décimaux...ce qui est le cas en Français

[7] C'est justement lors de la génération des fichiers netlist que le problème de séparation des décimales rend la version de gspiceui packagée Ubuntu (9.98) inutilisable en environnement français

dimanche, juillet 26 2009

p0wned...ou pas

Est-ce-que l'on devient parano à force d'en apprendre de plus en plus sur l'(in)sécurité informatique, ou bien est ce que l'on cherche toujours à en apprendre plus sur l'(in)sécurité informatique parce que l'on est parano ? En tout cas aujourd'hui il m'en est arrivé une belle...

Tux

Aujourd'hui donc, je profite d'avoir un peu de temps devant moi pour regarder les mises à jour disponibles pour mon pc et je trouve :

  • des mises à jour de librairies obscures, elles seront mises à jour en tant que dépendances de plus gros logiciels, je n'y fais donc pas attention
  • des mises à jour de logiciels que j'utilise tout les 36 du mois, je les mettraient à jour "quand j'aurai le temps"
  • des mises à jour de logiciels que je considère comme "critiques" parce que je les utilise souvent et qu'ils sont assez connus pour attirer les exploits dès qu'une faille est publiée (citons par exemple firefox, thunderbird, mplayer, etc.)
  • et en cadeau bonus aujourd'hui : une mise à jour du noyau est disponible (en fait elle devait l'être depuis un moment, ça faisait bien un mois que je n'avais pas fait de mise à jour sérieuse...oui je sais c'est mal)

Bon, je lance quelques mises à jours de logiciels importants, puis la mise à jour des sources de mon noyau, un petit tour dans le menuconfig, je le recompile, hop modules_update, je copie mon tout nouveau noyau tout beau tout rutilant, et je reboot enfin. Et là, au reboot, le gentil petit "tux" qui est normalement en boot logo lors de la séquence de démarrage en haut à gauche de l'écran a disparu, à sa place une espèce de taupe masquée O_O !

Tuz

Du coup je cogite rapidement : je me souviens des serveurs de package de debian qui s'étaient fait rooter il y a quelques années, je remet en doute mon jugement de "gros canulard" concernant anti-sec et leur fameux "openPOWN" qui permettrait d'exploiter un 0day dans openSSH, bref je commence à jouer le parano. Du coup j'éteint mon PC, je débranche son cable réseau, et je le boot sur une backtrack live...après analyse rapide : rien de particulièrement bizarre à part ce logo...et de toute façon serais-je capable de trouver quoi que ce soit d'étrange si je m'était réellement fait rooter ? Pas sur. Du coup je boot un autre pc (sur une live clef usb...on ne sait jamais) et je commence à farfouiller sur le net à la recherche d'information sur cette "taupe masquée", après tout c'est peut être la signature d'un groupe de hack connu...Ca m'a bien pris 20mn pour trouver qu'en fait ce n'était pas une taupe mais un diable de tazmanie, et que je ne m'étais pas fait rooter du tout : c'est un logo mis en place exceptionnellement dans la version 2.6.29 du kernel linux afin de sensibiliser à la survie des diables de tazmanie...grand moment de solitude.

jeudi, avril 30 2009

K.I.S.S.

La philosophie du K.I.S.S.

A priori l'écrasante majorité d'entre vous a pensé à un groupe de rock ou à un baiser à l'anglaise en lisant le titre de ce billet.
A priori l'écrasante majorité d'entre vous s'est trompé sur le sens de ces quelques lettres dans le cadre de ce billet ;) !
Ce billet est en réalité intitulé KISS en référence au proverbe "KISS"[1]. Ce proverbe est en fait l'acronyme anglais de "Keep It Simple, Stupid", que l'on pourrait traduire par "Fais simple, Imbécile !", et qui est donc une apologie de la simplicité.

KISS

Et que doit on garder simple alors ?

Si j'ai choisis d'intituler ce billet "KISS" c'est parce que j'avais envie de vous parler de l'environnement graphique de mon pc et qu'en y réfléchissant j'ai réalisé qu'au cours de ces dernières années j'avais de plus en plus appliqué ce proverbe à mon choix d'environnement graphique.

Pour les quelques égarés qui liraient ce blog et qui n'auraient jamais touché un linux de leur vie je rappele qu'un gestionnaire de fenêtre (ce que j'appele "environnement graphique) c'est la partie de l'OS qui est en charge d'afficher le bureau, les fenêtre, tout le merdier quoi (en très résumé :) ). Sous Windaube il n'y en a qu'un de disponible (toutes vos fenêtres ont la même tête, et il n'est pas envisageable d'en changer), sous linux il y en a plusieurs (du coup on peut en imaginer un où les fenêtre seraient ronde, ou bien un autre où les les boutons "agrandir", "réduire", et "fermer" seraient chacun dans un angle de la fenêtre au lieu d'être les uns à coté des autres en haut à droite, etc.). Et pour les non-égarés qui connaissent tout ça je les imagine maintenant, la bave trollesque aux lèvres, dans l'attente de l'annonce de mon choix entre KDE et Gnome...et je vais les décevoir : je suis utilisateur de Fluxbox ^^ !

Fluxbox c'est un gestionnaire de fenêtre léger, simple, et qui fait son travail de gestionnaire de fenêtre ni plus ni moins. KDE et Gnome, eux, sont des bureaux complets : ils embarquent le gestionnaire de fenêtre mais aussi l'explorateur de fichier et une orde d'autres petits logiciels pour répondre aux besoins de tout les jours. Moi je n'aime pas les logiciels qui essaient de deviner mes besoins de tout les jours, et encore moins ceux qui essaient d'y répondre en ramenant une ordes d'outils logiciels pour ça ![2]

Tools - Creative Common by mtneer_man on Flickr

Le choix du roi

Oui le titre de ce paragraphe peut paraitre prétentieux mais comme je le suis un peu et que de toute façon c'est une expression : je me permets ! Donc, une fois que le choix de Fluxbox fait il m'a tout de même fallut trouver les "petits logiciels qui répondent à mes besoins de tous les jours" (puisque, je me répète, Fluxbox vient sans rien d'autre que la capacité d'afficher des fenêtres) et ce sont bien tout ces choix, affinés au cours des années, qui donnent sa personnalité à mon environnement graphique. En voici la liste, brute de pomme :

  • Thunar : Explorateur de fichier esthétique et avec peu de dépendance (il a détroné "rox" que j'utilisais avant mais qui était quand même franchement moins beau)
  • fbsetbg : prog pour mettre une image en fond d'écran, parce que ça ne vient pas d'office avec Fluxbox lol (je vous l'avais bien dit que Fluxbox il gérait les fenêtre ni plus ni moins ;) )
  • iDesk : pour afficher des icones sur le bureau. En réalité je ne l'utilise plus (je n'ai plus d'icones sur mon bureau, je trouve ça moche et finalement inutile) mais si vous ressentez le besoin d'avoir des icones il est vraiment très bien.
  • conky : pour afficher pleins d'info (principalement du texte brut) en sur-impression sur le fond d'écran. Parce que vu que je n'ai pas d'icone j'ai plein de place sur mon bureau et que c'est sympa d'avoir l'occupation processeur affiché sur son fond d'écran, ou les flux RSS de son site préféré, ou encore la sortie standard d'un script maison codé un soir d'insomnie et qui fait Dieu-seul-se-souvient-quoi :)[3]
  • xcompmgr : pour avoir les effets de vrai transparence (c'est du Compiz ultra light pour ceux qui connaissent...bah ouais compiz ne semble pas marcher sous Fluxbox :( ) mais en fait je ne l'utilise plus non plus parce que grâce à ma super carte graphique ATI et à ses drivers en mousse il mettrait mon processeur à genoux...
  • xpdf : pour visualiser les pdf[4]
  • GImageView[5] : pour visionner rapidement des images
  • Nedit : éditeur de texte graphique pour remplacer vim de temps en temps (j'utilisais Gedit avant, mais Nedit a infiniment moins de dépendance et l'a donc détroné, même si il est franchement laid ^^)
  • Et l'artillerie lourde bien entendu : Firefox, Thunderbird, OpenOffice3, Gimp, et audacious[6]

Voilà, on a fait le tour de 90% des logiciels avec GUI que j'utilise :) Si vous en connaissez d'autre n'hésitez pas à me les signaler, j'aime bien découvrir de nouveaux softs (seule contrainte : peu de dépendances...j'ai pas envie de compiler toutes les libs KDE juste pour avoir Anjuta ;) )

Notes

[1] Proverbe carrément élevé au rang de principe par certains

[2] Toute ressemblance avec un OS commercial ayant pour emblème une fenêtre ne serait que pure coïncidence

[3] Dans le doute affichez la sortie d'un "dmesg | tail", ça a toujours son petit effet en sur-impression sur son fond d'écran :)

[4] Par exemple les papiers passionants qu'on peut trouver suites aux confs comme le SSTIC ou encore WOOT, ou bien entendu la BH

[5] "gimv" en ligne de commande

[6] Bon, ok, audacious ce n'est pas de l'artillerie lourde, mais un peu quand même ^^