SSTIC, 3 jours au coeur de la sécurité

logo_sstic.jpg
Pour ma première année au SSTIC, on peut dire que je n’en ressors pas la tête vide, bien au contraire. J’ai appris qu’il fallait mettre de la colle sur mes ports PCI, ne pas faire confiance à l’informatique de confiance, commant refaire une “yes card”, ne jamais ouvrir un pdf inconnu avec Adobe (ou ne jamais compiler un document latex d’une source inconnu…), et surtout, ne pas utiliser de clavier PS2

Mais bon, c’est bien connu, on fais un métier d’avenir

Sans rentrer dans les détails, j’ai particulièrement apprécié :

  • la conférence sur fuzzgrind, un outil qui se base sur valgrind + stp pour explorer des nouvelles branches dans l’exécution du programme. Avec ce système, il nous montre comment passer outre un crackme simple…
  • le XSS : bon, rien de nouveau sous le soleil, mis à part des démos plus sophistiquée qui rappelle à tout le monde de ne jamais cliquer sur un lien sans regarder le lien 🙂 En live, la démontration d’un vol de compte Facebook, et un déface du site même du SSTIC 🙂
  • pour la culture générale, la présentation sur le tracage de traite. On apprend comment une vidéo est signée, et même après réencodage / convergence de plusieurs sources, on retrouve par statistiques ceux à l’origine du piratage de la vidéo… Très sympa !
  • IpMorph ! Comment faire croire à un attaquant que la machine en face de lui est un OpenBSD au lieu d’un Linux, et ce, avec tous les outils de fingerprinting (nmap, hping…).

Sans oublier le Social Event du jeudi soir, où j’ai pu discuter avec pleins de gens. Dont monsieur Scappy :)=

Pour plus d’infos, vous pouvez lire aussi le live blogging de vanhu (ya des jolis nanas, n’hésitez pas !) 🙂

Semaine d’initiation au Parapente terminé !

dscf5545.jpgEn plein coeur des Vosges, j’ai passé une semaine à l’initiation au parapente, avec ma petite Lucie ! Et c’était le pied. Très crevant les 3 premiers jours, entre coups de soleils (on avait pas prévu ça !) et la remonté à pied systématique de la pente école avec le matériel sur le dos… Autant dire que les jambes en ont pris un coup !
Les 2 derniers jours, l’équipe de cumulus88 nous a fait voler 4 fois sur le site de Siebach (200m de dénivelé), et failli voler depuis le Treh (1150m de hauteur, 800m de dénivelé). L’aérologie à l’atterrissage n’était pas bon pour pauvre petit débutant que nous sommes ! Seuls les plus âgés ont décollés…

Vous pouvez faire un tour sur les photos du trip parapente. Vivement la prochaine partie pour décrocher le Brevet Initial !

Map browser avec PyMT, suite …

2009-04-28-212736_2960x1050-0.png

Nouvelle version avec :

  • un calcul correct des bords d’écrans (plus de problème d’affichage sur les cotés)
  • l’affichage des sous niveaux jusqu’au niveau en cours (plus de carré gris s’il manque des images)
  • suppression du cache avec pickle (ca prend du temps, et ca fait lagguer l’interface)
  • utilisation d’une queue pour charger les tiles en parallèle
  • n’autorise qu’une seul création de texture à la fois (évite le laggue s’il on doit créer 30 textures d’un coup)
  • réécriture de l’interface (c’est plus joli non ?)
  • factorisation du code + début de documentation

\o/

Map browser avec PyMT

Depuis longtemps, certains que je ne nommerais pas (en fait si, tout ceux qui font du multitouch et un windows…) s’amusent à se balader sur googleearth et companie, pour montrer à quel point c’est fun de faire mumuse avec ses petits doigts. Bon, si on est sous linux, comment qu’on fait nous hein ? Pauvre petit linuxiens quoi…

J’ai commencé un travail en se basant sur PyMT + ModestMaps, qui a un binding python, et supporte 8 sources différentes (dont Blue Marble, Yahoo, Microsoft, OpenStreetMap…).
Après plus d’une semaine à ne pas comprendre pourquoi la librairie ne marchais pas avec les fonctions proposées (comme par exemple, demander un carré de longitude/latitude… et se retrouver avec un carré légèrement déplacé..), j’ai failli baisser les bras.

Puis non. J’ai zappé la partie “user land” de la librairie, et directement attaqué le “core” de la lib. Et c’est une presque réussite. J’ai rajouter 2/3 trucs dans ModestMaps, comme l’utilisation d’un cache intermédiaire, évitant les downloads à répétitions.

Avec quelques threads de download / cache + une mini interface très très basique, j’obtiens ca :

Blue Marble

2009-04-26-221938_2960x1050_scrot-0.png

Microsoft Hybrid (téléchargement en cours)

2009-04-26-222018_2960x1050_scrot-0.png

OpenStreetMap

2009-04-26-222007_2960x1050_scrot-0.png

Microsoft Hybrid + Zoom

2009-04-26-222125_2960x1050_scrot-0.jpg

Je publie ça une fois que j’aurais réglé :

  • les problèmes de zoom trop important (limite de précision d’un double ?)
  • les calculs des limites autour de l’écran (parfois, on voit le fond de la fenêtre)
  • ajouter des fonctions pour passer des pixels en latitude/longitude
  • cleaner le code, et fait la séparation avec un beau InteractiveWidget
  • faire une interface plus “jolie”

Wait & see !

PyMT 0.2, enfin !

Presque 2 mois d’écart avec la 0.1, voici PyMT 0.2 qui est sorti. Pleins de bonnes choses, mais le succès ramène aussi son lot de soucis.

Ainsi, j’ai pu découvrir une analogie entre le monde du web et le monde d’opengl. Parfois, opengl est ATI ce que le javascript est à IE. Je vous passe les détails, mais si vous êtes possesseur d’une carte ATI, vous passerez votre chemin encore une fois… Mais on travaille dessus !

Sinon, avec cette nouvelle version, j’ai une base pour Noya très fonctionnelle, que je montrerais en vidéo très bientôt !

Au retour du TouchCamp…

C’était déconcertant et géant.

Arrivé un peu en retard le samedi matin (merci la SNCF de m’avoir donné un AR Paris formule Duo, alors que j’étais tout seul), j’arrive à la cantine où pleins de gens étaient en train d’écouter un autre gens. (difficile de retenir une masse de prénom.)

Déconcertant car en fait, c’était un tour de table, et la totalité des gens est passé par la case “je me présente au micro”. Pourquoi pas, c’est ca, un Bar Camp : tout le monde acteur. Et ca continue, on a du remplir sur un grand tableau archaïque (bah oui, c’est THE événement du multitouch, et on utilise la craie !) pour faire l’emploi du temps de la journée.

Sur le tableau, pleins de colonnes représentant les tables multitouchs disponibles dont Touchtou, Immersion, Muchomedia, Surface… Premier défi : trouver les représentants des tables, et voir si je peux démarrer PyMT dessus. D’ailleurs les gens là bas disait “pimp”, ca me donne des idées de slogans (Pimp my table).

Et c’est sur Immersion qu’est tombée la lourde tâche de me laisser un accès à leur table 🙂 La conférence PyMT s’est déroulée en début d’après midi. N’ayant pas pu tester le framework avant sur la table (j’ai du faire un allé/retour à Montgallet: j’avais laissé ma batterie de pc à Lille…), la première dizaine de minutes a été laborieuse. Difficile de commencer la présentation + configurer l’ensemble avec la table. Cela a agacé quelques personnes, mais une fois que la démo a commencée, un max de gens était autour de la table. Un vrai succès, malgré avoir essuyer pas mal de bug en live. Certains sont intéressés et impatient de faire une application sous PyMT.

Il a trop à raconter, je vais terminer ce billet en remerciant grandement Jim’, pour son charisme et son investissement sur ce TouchCamp, c’était une réussite. (et merci pour le reste à toi et ln, j’espère sincérement te revoir bientôt 🙂 )

Python et les decorateurs avec __init__

Question: comment faire pour générer un évenement de chargement après l’initialisation d’une classe, de manière générique ?

Sur cette simple question, prenons un example :

  1. class A(object):
  2. def __init__(self):
  3. print 'init A'
  4.  
  5. class B(A):
  6. def __init__(self):
  7. print 'init B'
  8. super(B, self).__init__()
  9. print 'fin init B'
  10.  
  11. B()

Le programme affiche successivement :

init B
init A
fin init B

Le but est d’exécuter une fonction, à la fin de init B. Pour cela, on peut faire appel au décorateur python.
Voilà de quoi j’ai rêvé cette nuit (mmh…) :

  1. def decorate_onload(f):
  2. def my_init(*args, **kwargs):
  3. inst = args[0]
  4. if hasattr(inst, '__decorate_onload__'):
  5. return f(*args, **kwargs)
  6. inst.__setattr__('__decorate_onload__', True)
  7. f(*args, **kwargs)
  8. print 'launch on_load!'
  9. return my_init
  10.  
  11. class A(object):
  12. @decorate_onload
  13. def __init__(self):
  14. print 'init A'
  15.  
  16. class B(A):
  17. @decorate_onload
  18. def __init__(self):
  19. print 'init B'
  20. super(B, self).__init__()
  21. print 'fin init B'
  22.  
  23. class C(B):
  24. @decorate_onload
  25. def __init__(self):
  26. print 'init C'
  27. super(C, self).__init__()
  28. print 'fin init C'
  29.  
  30. C()

Et ce code magique affiche… :

init C
init B
init A
fin init B
fin init C
launch on_load!

Le print ‘on_load’, est bien appellé seulement quand l’intégralité du widget a terminé de charger !
Comment ca marche ? C’est tout simple :

  1. def decorate_onload(f):
  2. def my_init(*args, **kwargs):
  3. inst = args[0]

Ici, on définit un nouveau décorateur, et on récupère l’instance de la classe en cours d’initialisation

  1. if hasattr(inst, '__decorate_onload__'):
  2. return f(*args, **kwargs)

L’instance de la classe est unique. Si la fonction de chargement est déjà hooker par un init, on ne fait rien.

  1. inst.__setattr__('__decorate_onload__', True)

Sinon, on indique que l’on gère le onload. Cela sera valable au tout premier appel du décorateur sur l’instance => il sera toujours executé par le init de plus haut niveau.

  1. f(*args, **kwargs)
  2. print 'launch on_load!'
  3. return my_init

On exécute le init normalement, et on affiche ‘on_load’. C’est ici que l’on peut remplacer par un appel de fonction sur l’instance de l’object.

Simple, encore fallait-il le trouver.