Projets

Cette page détaille différents projets applicatifs que j’ai eu l’occasion de réaliser pendant mon temps libre ou ma scolarité.

InjecSO : Injection de librairie dynamique sous Linux

  • Domaines : Sécurité informatique, reverse engineering
  • Description : L’injection de DLL sous Windows est devenue une technique bien connue de reverse engineering ou de contournement de pare-feu personnel. Cependant, il n’existait à ma connaissance pas d’équivalent sous Linux (à part LD_PRELOAD mais qui reste une technique d’injection statique).  Je me suis donc mis en tête de déveloper un outil permettant d’injecter du code compilé sous la forme d’une librairie partagée .so dans un processus en exécution.
  • Technologies : C, shellcodes x86, librairies dynamiques .so, ptrace
  • Nombre de personnes : 1
  • Date de réalisation : Février 2009
  • Page du projet

XeeK : XSS Easy Exploitation Kernel

  • Domaines : Sécurité informatique, exploitation de vulnérabilités
  • Description : XeeK est un projet personnel en cours de réalisation. Son objectif est de fournir un framework ainsi que des outils permettant d’exploiter facilement les failles de type XSS (Cross-Site Scripting), afin de mettre en évidence leur danger. Il permettra d’exécuter du code JavaScript arbitraire de façon dynamique sur un ou plusieurs navigateurs, concevoir des exploits, espionner la navigation, récupérer des informations à l’insu des victimes. Il sera possible à n’importe qui d’y greffer des fonctionnalités grâce au support de modules (plug-ins). Pour plus d’informations, consultez cet article.
  • Technologies : Javascript, Ajax Comet, PHP, MySQL, CSS
  • Nombre de personnes : 1
  • Date prévue de sortie : Février – Mars 2009

Ajouts de fonctionnalités dans MySQL

  • Domaines : Bases de données, open source, analyse de code et reverse-engineering
  • Description : Dans le cadre d’un cours intitulé Database System Implementation que j’ai suivi au RIT, il nous a été demandé d’ajouter 3 features (fonctionnalités) dans un système de bases de données open source de mon choix. Nous avons choisis MySQL, et les 3 ajouts suivants :
    • Calcul du fill-factor (facteur de groupage) pour le moteur MyISAM — Analyse et reversing du code source de MyISAM afin de comprendre les mécanismes de stockage et d’allocation des blocs sur disque
    • Ajout de fonctions de conversion de zones de temps — Modification de la grammaire du langage reconnu par MySQL et ajout de classes
    • Ajout d’un nouveau type de données timstamps avec zone de temps — Analyse de code, modification de la grammaire, ajout de classes
  • Technologies : C++, Bison/Yacc, MySQL, Understand (logiciel de reverse-engineering)
  • Nombres de personnes : 3
  • Durée : 3 mois
  • Date de réalisation : Novembre 2008

SafeScale

  • Domaines : Grilles de calcul, calcul distribué, tolérence aux fautes, hooking
  • Description : Il s’agit d’un projet de recherche effectué pendant ma 4ème année à l’INSA. Le but était dans un premier temps de concevoir une application effectuant un calcul distribué sur plusieurs machines, puis de concevoir un deuxième programme permettant d’injecter des fautes dans notre première application et de tracer son exécution. Notre injecteur de fautes se veut générique et est capable de fonctionner avec toute application utilisant MPI. Il se présente comme un shell via lequel il est possible de lancer une application distribuée, puis de déclencher des fautes à tout instant et de façon dynamique. Nous avons géré en particulier les retards, corruptions de données et dénis de service. Lorsque l’application s’exécute, des sondes mesurent certaines valeurs en temps réel et tracent un graphique permettant de visualiser les résultats.
  • Technologies : C++, MPI, CORBA, Bison/Yacc, Flex (lexer), Autotools, hooking via LD_PRELOAD (Linux), PHP, MySQL
  • Nombres de personnes : 4
  • Durée : 1 an
  • Date de réalisation : Mai 2008

Ronalgo

  • Domaines : Intelligence artificielle, jeu de Go
  • Description : Le jeu de Go est réputé pour être un des jeux les plus complexe en terme de possibilités. Là où les intelligences artificielles modernes battent les meilleurs joueurs du monde aux échecs, aucune IA n’arrive à la cheville d’un joueur de Go ayant un niveau professionnel. Dans le cadre de mon cours d’intelligence artificielle de 4ème année à l’INSA, il nous a été proposé d’implémenter un joueur pour le jeu de Go. Afin que notre IA soit compatible avec les logiciels de Go les plus utilisés, nous avons implémenté le protocol GTP permettant à un joueur de dialoguer avec une interface graphique. Malheureusement, par manque de temps et suite à quelques problèmes techniques, nous n’avons pas terminé ce projet et notre application finale est un piètre joueur (proche de l’aléatoire…).
  • Technologies/Outils : C++, GTP (Go Transfert Protocol)
  • Nombres de personnes : 7
  • Durée : 2 mois
  • Date de réalisation : Mai 2008

Teapot Colony Wars

  • Domaines : Simulation, 3D, intelligence artificielle, conception, designs patterns
  • Description : Il s’agit également d’un projet de 4ème année, dans le cadre de notre cours de conception orientée objets. L’objectif était de réaliser un simulateur de colonies de fourmis . Ces fourmis doivent rechercher de la nourriture pour survivre dans leur environnement, représenté par un monde en grille. Parmi les contraintes imposées, les fourmis ne peuvent voir que les cases avoisinantes et ont la possibilité de déposer des phéromones pour retrouver leur chemin. Nous avions le choix de l’interface graphique, et nous avons choisi de faire de la 3D en utilisant OpenGL. Il nous a été également proposer d’implémenter plusieurs stratégies comportementales pour les fourmis. Plus d’informations ici.
  • Technologies/Outils : C++, Autotools, OpenGL
  • Nombres de personnes : 2
  • Durée : 6 semaines
  • Date de réalisation : Janvier 2008

Démonstration OpenGL

  • Domaines : Réalité virtuelle, 3D
  • Description : Il s’agit de ma première application C++ et OpenGL. Le but était de découvrir ces technologies, et de réaliser une application illustrant certains aspects de la réalité virtuelle. Notre application simule un monde en 3D dont la carte est généré dynamiquement à partir d’un fichier bitmap. Il est possible de représenter ce monde en utilisant des textures, ou en mode filaire. Dans ce monde se trouve un lac, et il est possible d’observer des ondulations à sa surface en déclenchant de la pluie (générateur de particules).  Nous avons également utilisé un moteur physique afin de simuler de la gravité et de faire intégagir des objets entre eux.
  • Technologies/Outils : C++, OpenGL, Newton (moteur physique)
  • Nombres de personnes : 5
  • Durée : 3 mois
  • Date de réalisation : Mai 2007

Compilateur Yaka

  • Domaines : Compilation, traitement et génération de code
  • Description : Pour illustrer notre cours de grammaires et langages de 3ème année, nous avons eu à réaliser un compilateur reconnaissant un langage fictif (le Yaka). L’application finale traduit du Yaka en assembleur et utilise un assembleur existant pour générer du langage machine, permettant ainsi d’exécuter le programme. Ce projet nous a ainsi permis de mieux comprendre comment un compilateur fonctionne.
  • Technologies/Outils : Java, Javacc (Java Compiler of Compiler), Eclipse
  • Nombres de personnes : 4
  • Durée : 5 mois
  • Date de réalisation : Mai 2007

Intelligence artificielle pour Othello

  • Domaines : Intelligence artificielle
  • Description : En 2ème année j’ai suivi mes premiers cours d’intelligence artificielle et nous avons eu l’occasion de réaliser un projet visant à développer des IA pour le jeu de plateau Othello. Le but était d’illustrer les grands principes de l’IA, tels que les algorithmes génétiques, les réseaux de neurones, et le min-max alpha-béta. Ce projet a été très encourageant car au final, nous étions incapables de battre nos propres joueurs artificiels…
  • Technologies/Outils : Java, Eclipse
  • Nombres de personnes : 4
  • Durée : 1 mois
  • Date de réalisation : Novembre 2005