<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Segmentation fault &#187; projet</title>
	<atom:link href="https://www.segmentationfault.fr/tag/projet/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.segmentationfault.fr</link>
	<description>Projets d’un consultant en sécurité informatique</description>
	<lastBuildDate>Fri, 15 Feb 2019 08:02:10 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>XeeK, framework d&#8217;exploitation pour XSS</title>
		<link>https://www.segmentationfault.fr/projets/xeek-framework-exploitation-xss/</link>
		<comments>https://www.segmentationfault.fr/projets/xeek-framework-exploitation-xss/#comments</comments>
		<pubDate>Thu, 13 Nov 2008 21:27:15 +0000</pubDate>
		<dc:creator>Emilien Girault</dc:creator>
				<category><![CDATA[Développement]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[faille web]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[projet]]></category>
		<category><![CDATA[XeeK]]></category>
		<category><![CDATA[XSS]]></category>

		<guid isPermaLink="false">http://www.segmentationfault.fr/?p=307</guid>
		<description><![CDATA[La faille XSS, ou Cross-Site Scripting, est certainement la plus répandue sur le Web. Tous les débutants dans le domaine de la sécurité informatique ou du hacking la connaissent et savent comment voler un cookie ou afficher un message d&#8217;erreur, mais pensent trop souvent à tort que cette faille se limite à cela (j&#8217;ai déjà [...]]]></description>
			<content:encoded><![CDATA[<p>La faille XSS, ou <em>Cross-Site Scripting</em>, est certainement la plus répandue sur le Web. Tous les débutants dans le domaine de la sécurité informatique ou du hacking la connaissent et savent comment voler un cookie ou afficher un message d&rsquo;erreur, mais pensent trop souvent à tort que cette faille se limite à cela (j&rsquo;ai déjà posté un <a href="http://www.segmentationfault.fr/securite-informatique/la-xss-cette-faille-meconnue/">article</a> sur le sujet). D&rsquo;un autre côté, ceux qui programment un minimum en JavaScript/Ajax savent que ce langage permet de faire des merveilles en matière de pages dynamiques et contrôle de navigateur, mais ignorent souvent les possibilités offertes pour une personne malveillante. C&rsquo;est à partir de ces deux constats que m&rsquo;est venue une idée qui est en train de se concrétiser, et qui tient en un mot : XeeK.<span id="more-307"></span></p>
<h3>[EDIT]</h3>
<p>Le projet a subit de nombreux changements depuis la publication de ce billet. J&rsquo;ai publié la première version du projet <a href="http://www.segmentationfault.fr/projets/release-de-xeek-v0-1b/">ici</a> ; en attendant un tutorial vous pouvez retrouver des informations plus à jour <a href="http://www.segmentationfault.fr/projets/conference-sur-xeek-a-la-ndh-2010/">dans ce billet</a>. Gardez à l&rsquo;esprit que les informations qui suivent (et particulièrement le jargon associé à l&rsquo;outil ainsi que les fonctionnalités) ne sont plus complétement valides&#8230;</p>
<h3>Le projet</h3>
<p>XeeK, pour <em>XSS Easy Exploitation Kernel</em>, est un projet dont l&rsquo;objectif est le suivant : démontrer la puissance de la XSS en proposant un outil pour exploiter facilement ce type de faille. Les premières idées qui ont engendré ce projet me sont venues cet été, mais c&rsquo;est uniquement depuis quelques semaines que j&rsquo;ai vraiment commencé à y travailler.</p>
<h3>Un noyau et des modules</h3>
<p>Certains me trouveront peut-être un peu ambitieux, mais mon but serait de faire de XeeK une sorte de <em>Metasploit</em> pour la XSS. Pour dire les choses autrement, l&rsquo;objectif serait de proposer un framework, c&rsquo;est à dire un ensemble de classes, ou de modules capables d&rsquo;interagir ensemble. En fait, si le K de XeeK signifie <em>kernel</em> (noyau) c&rsquo;est parce qu&rsquo;il sera effectivement composé d&rsquo;un noyau proposant les fonctionnalités génériques de base et d&rsquo;une suite de modules qui pourront s&rsquo;y greffer. Dans l&rsquo;idéal, ces modules pourront être développés par n&rsquo;importe qui. A titre de comparaison, considérez le noyau Linux et ses modules, ou bien Firefox et ses extensions.</p>
<h3>Architecture</h3>
<p>Concrètement, XeeK se composera d&rsquo;une interface Web déployée sur un serveur appartenant à un attaquant, disons hacker.com. XeeK étant censé faciliter l&rsquo;exploitation des failles XSS, il appartient à l&rsquo;attaquant de découvrir ces failles ; je n&rsquo;envisage pour le moment pas d&rsquo;intégrer un scanner de ce type dans l&rsquo;outil. Une fois une XSS trouvée sur un site quelconque, disons victime.com, l&rsquo;attaquant pourra utiliser l&rsquo;interface de XeeK afin de générer un exploit personnalisé et paramétrable. Après avoir défini l&rsquo;exploit, celui-ci pourra être intégré à un lien piégé exploitant la XSS sur victime.com. Il ne restera plus à l&rsquo;attaquant qu&rsquo;à faire cliquer la victime sur ce lien&#8230;</p>
<p>Dans le jargon XeeK, l&rsquo;attaquant commencera par créer une <em>session</em>, choisira sa ou ses <em>victimes</em>, et sélectionnera un <em>scheduler</em>, ou ordonnanceur. C&rsquo;est ce composant qui déterminera comment les actions de l&rsquo;exploit seront exécutées sur le navigateur de la victime. J&rsquo;envisage pour le moment deux types de schedulers :</p>
<ul>
<li><em>Statique</em> — toutes les actions de l&rsquo;exploit seront définies à l&rsquo;avance et intégrées &laquo;&nbsp;en dur&nbsp;&raquo; de façon définitive.</li>
<li><em>Dynamique</em> — l&rsquo;exploit chargé sur le navigateur de la victime ne contiendra pas les actions proprement dit, mais un loader qui sera chargé de récupérer les actions sur le serveur XeeK (hacker.com) de façon dynamique et transparente. Ainsi, l&rsquo;attaquant pourra modifier l&rsquo;exploit et suivre la progression de la victime en temps réel.</li>
</ul>
<p>Les actions exécutées chez les victimes seront susceptibles de retourner des résultats qui seront visualisables directement par le biais de l&rsquo;interface. En fait, XeeK cachera l&rsquo;aspect technique de l&rsquo;exploitation et sera conçu pour simplifier au maximum les choses à l&rsquo;attaquant. Plus précisément, l&rsquo;attaquant aura devant lui une interface ressemblant à un debugger, à partir de laquelle il lance son exploit, observe sa progression et visualise les résultats. La différence avec un vrai debugger est que cet exploit sera exécuté sur les victimes et non sur sa propre machine&#8230;</p>
<h3>Une application : BotNet</h3>
<p>Puisque XeeK supportera plusieurs sessions en simultanée, chacune supportant elle-même plusieurs victimes, on en arrive à une des applications potentielles de l&rsquo;outil : faire office de BotNet. Pour ceux qui l&rsquo;ignorent, un botnet est un réseau de machines zombies contrôlable par un attaquant via un protocole quelconque. Ici, il s&rsquo;agira de simples requêtes HTTP. La différence avec les &laquo;&nbsp;vrais&nbsp;&raquo; botnets est qu&rsquo;ici, le code malveillant s&rsquo;exécutera uniquement lorsque la victime aura son navigateur d&rsquo;ouvert sur la page piégée.</p>
<p>Pour aider à la propagation du botnet, la possibilité la plus simple est d&rsquo;utiliser une XSS permanente, c&rsquo;est à dire quand l&rsquo;injection de code est enregistrée en dur sur le site et affecte tous les visiteurs. Ainsi chaque visiteur tombant sur la page piégée rejoindra automatiquement le botnet à son insu et exécutera le même exploit que ses collègues. Tout cela grâce à une malheureuse petite XSS&#8230;</p>
<p>Imaginez qu&rsquo;un site très connu et utilisé par des milliers de visiteurs soit vulnérable à une XSS permanente. Avec XeeK, il devient possible de lancer une attaque de masse contre tous les visiteurs de la page.</p>
<h3>Fonctionnalités</h3>
<p>Qu&rsquo;est-ce que XeeK saura faire ? A vrai dire, les fonctionnalités définitives ne sont pas encore décidées (vu que les modules seront extensibles), mais voici un aperçu de ce que j&rsquo;envisage.</p>
<ul>
<li>Furtivité du point de vue du visiteur (le site exploité continue à fonctionner sans problèmes).</li>
<li>Exécution de code JavaScript arbitraire.</li>
<li>Envoi de requêtes asynchrones (Ajax) vers le site vulnérable. Une des applications pourraît être d&rsquo;exploiter des éventuelles failles XSRF (<em>Cross Site Request Forgery</em>).</li>
<li>Envoi de requêtes asynchrones vers d&rsquo;autres sites.</li>
<li>Détournement de formulaire. Exemple : lorsque la victime remplit un des formulaires de la page, tout son contenu est envoyé sur hacker.com de façon transparente.</li>
<li>Récupération de cookies.</li>
<li>Récupération du contenu de la page (code HTML vu par la victime).</li>
<li>Plus généralement, récupération de n&rsquo;importe quelle variable accessible par JavaScript et DOM.</li>
<li>Traceur de visiteur. L&rsquo;exécution de l&rsquo;exploit continue même si le visiteur change de page, chaque nouvelle page visitée étant loguée et accessible directement par l&rsquo;attaquant.</li>
<li>Simulation de clic sur des liens / boutons / n&rsquo;importe quel élément graphique des pages.</li>
<li>Fonctionne aussi bien en HTTPS qu&rsquo;en HTTP ; cela ne change absolument rien.</li>
</ul>
<h3>Technologies</h3>
<p>XeeK est pour le moment développé à l&rsquo;aide de PHP, JavaScript, Ajax et MySQL. Bien entendu, les langages liés tels que CSS et HTML sont également utilisés à foison. Pour ce qui est de la compatibilité des navigateurs, pour être sincère je n&rsquo;ai encore utilisé que Firefox. Soyons honnête ; je ne suis ni designer ni un pros des subtilités de chaque navigateur. Mais je tiens à préciser qu&rsquo;avant d&rsquo;effectuer une release, je ferais mon possible pour au moins que la partie &laquo;&nbsp;victime&nbsp;&raquo; de l&rsquo;outil fonctionne sur IE qui est toujours, il faut le rappeler, le navigateur le plus utilisé. Je vise au moins IE7, peut-être IE6 mais il ne faut peut-être pas trop en demander pour une 1ère release <img src='https://www.segmentationfault.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<h3>Release</h3>
<p>Je sens venir la question &laquo;&nbsp;<em>Quand XeeK sera-t-il publié ?</em>&laquo;&nbsp;. Je n&rsquo;ai malheureusement pas encore de réponse pour le moment. XeeK est encore au stade de prototype même si plusieurs fonctionnalités marchent déjà bien. Il me reste à concevoir la partie interface de l&rsquo;outil, améliorer deux/trois petites choses, tester la partie exploitation sous IE&#8230; Comme vous pouvez vous en douter je ne travaille pas sur ce projet à plein temps, j&rsquo;ai aussi des études. Pour donner une estimation, j&rsquo;espère pouvoir publier une première release avant 2009. Mais cela ne constitue pas une garantie&#8230; En effet, je préfère prendre mon temps pour bien faire les choses, plutôt que de sortir quelque chose de bancal le plus vite possible. Au pire, je sortirais une alpha ou béta avant sa vraie sortie.</p>
<p>XeeK sera publié sous license GPL (2 ou 3). En d&rsquo;autres termes, n&rsquo;importe qui pourra utiliser, développer et améliorer l&rsquo;outil à condition qu&rsquo;il publie ses travaux également sous GPL.</p>
<h3>Click and hack</h3>
<p>Certains me reprocheront peut-être :</p>
<blockquote><p><em>Tu n&rsquo;as pas honte, de mettre à disposition des scripts kiddies un outil aussi dangereux, où il suffit de cliquer pour pirater ?</em></p></blockquote>
<p>Je leur répondrai tout simplement non pour plusieurs raisons :</p>
<ul>
<li>Il existe des outils similaires encore lus puissants et plus simples à utiliser. Exemple : Metasploit. Personne ne se plaint de cet outil (enfin pas à ma connaissance) alors qu&rsquo;il permet de rooter une machine sans aucune connaissance technique. C&rsquo;est un outil utilisé par des professionnel pour le <em>penetration testing</em>.</li>
<li>Cet outil n&rsquo;est pas plus &laquo;&nbsp;dangereux&nbsp;&raquo; que les possibilités offertes par la faille XSS. Il essaye juste d&rsquo;utiliser ces possibilités au maximum.</li>
<li>En sortant cet outil et en le faisant connaître, j&rsquo;espère faire prendre conscience à plus d&rsquo;un que les failles XSS sont vraiment dangereuses, ce qui semble ne vraiment pas encore être le cas.</li>
</ul>
<p>Sur ce, je crois que j&rsquo;ai tout dit&#8230; Je vais continuer le développement de ce projet en espérant ne pas mettre trop de temps à le publier. Si vous avez des questions ou suggestions, les commentaires sont là pour ça !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.segmentationfault.fr/projets/xeek-framework-exploitation-xss/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Injecteur de fautes pour application distribuée</title>
		<link>https://www.segmentationfault.fr/projets/injecteur-fautes-parallele/</link>
		<comments>https://www.segmentationfault.fr/projets/injecteur-fautes-parallele/#comments</comments>
		<pubDate>Mon, 24 Mar 2008 13:10:43 +0000</pubDate>
		<dc:creator>Emilien Girault</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[calcul distribué]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[projet]]></category>

		<guid isPermaLink="false">http://www.segmentationfault.fr/projets/injecteur-fautes-parallele/</guid>
		<description><![CDATA[Dans le cadre d&#8217;un projet scolaire, je travaille sur un projet concernant la sécurité des grilles de calcul. Rappelons qu&#8217;une grille de calcul désigne un ensemble d&#8217;ordinateurs interconnectés et qui ne sont pas nécessairement homogènes. Ce type d&#8217;architecture est utilisé majoritairement pour faire tourner des applications nécessitant une très grande puissance de calculs. Avec le [...]]]></description>
			<content:encoded><![CDATA[<p>Dans le cadre d&rsquo;un projet scolaire, je travaille sur un projet concernant la sécurité des grilles de calcul. Rappelons qu&rsquo;une grille de calcul désigne un ensemble d&rsquo;ordinateurs interconnectés et qui ne sont pas nécessairement homogènes. Ce type d&rsquo;architecture est utilisé majoritairement pour faire tourner des applications nécessitant une très grande puissance de calculs. Avec le temps, la taille de ces application tend à augmenter, donc les besoins en matière de sécurité également. Le but du projet sur lequel je travaille en ce moment est de concevoir un injecteur de fautes pour application distribuée. Cet injecteur doit permettre en quelque sorte de faire planter une application tournant en parallèle sur plusieurs machines, afin de mettre à l&rsquo;épreuve sa tolérance aux fautes. Ce billet présente rapidement l&rsquo;architecture de notre logiciel, qui est toujours en développement.</p>
<p>Pour concevoir une application parallèle, on utilise assez souvent la programmation par messages. Dans le cadre de notre projet, nous utilisons la bibliothèque <strong>LAM/MPI</strong> qui fournit toute une API permettant d&rsquo;envoyer des messages à des processus tournant sur des machines distantes. De plus, le but étant d&rsquo;injecter des fautes, nous avons choisit de provoquer ces fautes lors des envois et réceptions de messages. Ainsi nous pouvons facilement simuler aussi bien les pannes logicielles (déni de service) et matérielles (coupure de lien d&rsquo;un réseau, paquet perdu ou corrompu). Pour détourner les fonctions fournies par la bibliothèque LAM/MPI, nous utilisons la variable d&rsquo;environnement <strong>LD_PRELOAD</strong>. Cette variable des systèmes UNIX/Linux permet de charger dynamiquement une bibliothèque au lancement d&rsquo;une application. Le point intéressant est que cette bibliothèque peut redéfinir des fonctions qui existent déjà dans les autres bibliothèques, donc peut potentiellement les appeler tout en modifiant leur comportement.</p>
<p>LD_PRELOAD permet alors de modifier le comportement d&rsquo;une application tout en n&rsquo;ayant pas besoin de la recompiler ! Il est toutefois important de préciser que cette technique ne permet de détourner (<em>hooker</em>) que les fonctions définies dans des librairies dynamiques. C&rsquo;est un point crucial et qui nous a posé quelques problèmes. En effet nous utilisions au départ la librairie MPICH 1, et il se trouve que lorsqu&rsquo;une application est compilée avec, les appels MPI sont liés de manière statique. Un simple appel à la commande ldd permet de le voir. C&rsquo;est pourquoi nous avons choisis d&rsquo;utiliser LAM/MPI à la place.</p>
<p>Ainsi, nous avons développé une bibliothèque dynamique (fichier .so) dont le but est de venir d&rsquo;interposer entre l&rsquo;application parallèle et LAM/MPI. Cette bibliothèque (que nous avons nommé bibliothèque d&rsquo;interposition) redéfinit les fonctions MPI_Send() et MPI_Recv() en injectant des fautes comme des corruptions de données et des dénis de service. Les fautes ne sont pas générées de manière permanentes ; nous utilisons en plus un processus qui tourne en tâche de fond (démon) qui communique avec la librairie par l&rsquo;intermédiaire d&rsquo;un segment de mémoire partagé. Ce démon est en réalité un serveur utilisant CORBA. Son rôle est de rester en attente de requêtes et de dialoguer avec la librairie pour déclencher l&rsquo;injection de fautes. Il surveille également l&rsquo;application ainsi que le système par l&rsquo;intermédiaire de sondes logicielles afin de suivre en temps réel les valeurs de quelques variables, comme la charge CPU, l&rsquo;occupation mémoire, etc. Ces valeurs sont sauvegardées dans une base de données pour être retraitées plus tard par un module de statistiques.</p>
<p>Sur chaque machine tournent donc : une instance de l&rsquo;application distribuée, une instance de la bibliothèque d&rsquo;interposition, et une instance du démon. Mais en plus de tout cela, il faut être capable de déployer l&rsquo;application parallèle. Nous avons donc conçu un module dédié à cela, le simulateur. Il est contrôlable en ligne de commande ou via une interface graphique. Son but est de lancer l&rsquo;application parallèle, les démons et activer le détournement de fonction en exportant la variable LD_PRELOAD sur toutes les machines.</p>
<p>Ce projet, bien que relativement complexe, se révèle très intéressant. Cela nous a permis de découvrir et d&rsquo;utiliser des libraires et des technologies très utiles, comme CORBA, MPI, Boost, MySQL++. Nous utilisons également Flex et Bison pour la conception de l&rsquo;interpréteur de commandes du simulateur.</p>
<p>Au fut et à mesure du développement, je mettrai sans doute en ligne quelques billets exposant de façon plus détaillée la conception de certains des modules.</p>
]]></content:encoded>
			<wfw:commentRss>https://www.segmentationfault.fr/projets/injecteur-fautes-parallele/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Teapot Colony Wars : Le premier simulateur de stratégies comportementales pour théières</title>
		<link>https://www.segmentationfault.fr/projets/teapot-colony-wars/</link>
		<comments>https://www.segmentationfault.fr/projets/teapot-colony-wars/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 20:47:56 +0000</pubDate>
		<dc:creator>Emilien Girault</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[Développement]]></category>
		<category><![CDATA[Projets]]></category>
		<category><![CDATA[3D]]></category>
		<category><![CDATA[c++]]></category>
		<category><![CDATA[projet]]></category>

		<guid isPermaLink="false">http://www.segmentationfault.fr/dev/teapot-colony-wars-le-premier-simulateur-de-strategies-comportementales-pour-theieres/</guid>
		<description><![CDATA[Dans le cadre de mes cours de programmation et de modélisation orientée objets, il nous a récemment été demandé de réaliser un projet en binôme. A vrai dire, nous l&#8217;avons rendu aujourd&#8217;hui&#8230; Le but était de modéliser et de concevoir une application simulant l&#8217;évolution de colonies d&#8217;individus sur un terrain. Le sujet décrivait les règles [...]]]></description>
			<content:encoded><![CDATA[<p>Dans le cadre de mes cours de programmation et de modélisation orientée objets, il nous a récemment  été demandé de réaliser un projet en binôme. A vrai dire, nous l&rsquo;avons rendu aujourd&rsquo;hui&#8230; Le but était de modéliser et de concevoir une application simulant l&rsquo;évolution de colonies d&rsquo;individus sur un terrain. Le sujet décrivait les règles de la simulation et de fonctionnement du monde dans lequel les colonies seraient amenées à évoluer. L&rsquo;objectif n&rsquo;était pas tant de coder une belle interface avec une intelligence artificielle hors du commun, mais plutôt de s&rsquo;attacher à bien concevoir l&rsquo;application, en utilisant les techniques habituelles comme le langage UML et les Designs Patterns.</p>
<p><img src="http://sourceforge.net/dbimage.php?id=158263" alt="Screenshot du projet" hspace="10" vspace="10" width="237" height="148" align="right" /></p>
<p>Avec un ami, nous avons eu une idée commune : tant qu&rsquo;à faire une application de simulation, autant se faire plaisir et la réaliser en 3D. Fans des technologies libres, nous avons donc choisi OpenGL et Glut. Nous avions tous les deux une petite expérience en OpenGL, pour ma part ce fut mon deuxième projet C++/OpenGL, bien que je trouve bien plus complexe que le 1er. Étant donné que nous n&rsquo;avions pas des talents d&rsquo;artistes, nous avons choisi de faire simple pour ce qui était de la représentation du monde et des individus. Les adeptes de Glut ou plus généralement de la 3D connaissent probablement la fameuse <a href="http://fr.wikipedia.org/wiki/Th%C3%A9i%C3%A8re_de_l'Utah">Théière de l&rsquo;Utah</a> utilisée dans un certain nombre d&rsquo;applications 3D. Ce modèle étant déjà présent par défaut dans la bibliothèque GLUT, nous avons décidé de l&rsquo;utiliser pour représenter les individus de nos colonies. Et nous en avons profité pour baptiser notre projet «Teapot Colony Wars».<span id="more-14"></span></p>
<p>Nous avions le choix du langage, et nous avons choisi le C++ non seulement pour sa rapidité, sa portabilité, mais aussi parce que nous souhaitions progresser dans ce domaine. Et tant qu&rsquo;à faire, nous l&rsquo;avons développé dans le but de le diffuser sous licence GPL 2, pour qu&rsquo;il continue à vivre et évoluer si certains veulent le reprendre. De plus, nous avons vraiment eu la volonté de développer un projet en nous rapprochant du monde professionnel, tout en n&rsquo;utilisant que des logiciels libres. Nous avons utilisé Subversion, un excellent outil de gestion de versions qui nous a bien simplifié la tâche pour le développement, ainsi que Doxygen, pour la génération de la documentation. Le rapport de conception a été réalisé en LaTeX, et la compilation de l&rsquo;exécutable a été grandement facilité par l&rsquo;emploi des Autotools (AutoConf, AutoMake, &#8230;).</p>
<p>Au final, Teapot Colony Wars, c&rsquo;est :</p>
<ul>
<li><strong> 96 fichiers sources</strong> (uniquement les .h et .cpp)</li>
<li>Un diagramme de <strong>45 classes</strong></li>
<li>Plus de <strong>9600 lignes</strong> de code C++</li>
<li>Un délai de <strong>6 semaines</strong> pour réaliser le projet (pendant lesquelles nous avons eu des examens&#8230;)</li>
<li>Plus de <strong>280 heures</strong> de travail</li>
<li><strong>268 révisions</strong> dans le dépot Subversion</li>
<li>Une documentation PDF de <strong>449 pages</strong> générée par Doxygen</li>
<li>Un rapport de <strong>28 pages</strong> décrivant la modélisation et nos choix conceptuels</li>
</ul>
<p>Nous avons profité de la livraison du projet pour publier la version 1 sur Sourceforge.net. Voici quelques unes des caractéristiques de l&rsquo;application :</p>
<ul>
<li>Le monde est composé de plusieurs colonies, chacune ayant sa couleur.</li>
<li>Chaque colonie peut créer des individus qui possèdent des caractéristiques propres comme sa taille. Une colonie consomme de la nourriture pour créer un individu.</li>
<li>Le monde est composé d&rsquo;une grille de cellules qui ont chacune des propriétés. Certaines sont inaccessibles (murs), d&rsquo;autres contiennent de la nourriture qui se renouvelle au fur et à mesure de la simulation (certaines sont à renouvellement instantané, mais pas d&rsquo;autres). Certaines cases sont des couloirs et inaccessibles aux individus trop grands.</li>
<li>Les individus évoluent selon certaines stratégies comportementales que la colonie leur impose. Leur but est de trouver de la nourriture et de la ramener à la colonie. Mais à chaque pas, un individu consomme de la nourriture proportionnellement à sa taille.</li>
<li>Chaque individu ne peut voir que les 8 cases adjacentes et a une très petite mémoire : il ne peut se souvenir que de la dernière case qu&rsquo;il a franchie. Mais pour l&rsquo;aider, il peut déposer des phéromones sur son passage. Chaque colonie définit ainsi 3 phéromones qui ne peuvent être comprises que par ses individus. Chaque phéromone a une durée de vie et se dégrade au fur et à mesure, jusqu&rsquo;à disparaître.</li>
<li>Quand deux individus ennemis se croisent, il y a combat. C&rsquo;est le plus fort qui gagne ! Le vainqueur peut alors se nourrir du cadavre de ses adversaires.</li>
<li>L&rsquo;utilisateur peut à sa guise faire une offrande en déposant une source de nourriture sur le terrain.</li>
<li>Il était demandé de tester deux stratégies différentes pour les individus. Les algorithmes heuristiques, qui peuvent être simples mais souvent imparfaits, et les algorithmes génétiques, consistant à définir des gènes pour les individus et effectuer un brassage génétique de la population en sélectionnant les meilleurs.</li>
</ul>
<p>Les commandes souris et clavier du simulateur sont les suivantes :</p>
<ul>
<li> Pavé numérique (4, 6 8, 2) : déplacements horizontaux et verticaux</li>
<li>Molette ou touches + et &#8211; : zoom</li>
<li>Maintien de Ctrl et défilement de la molette (ou + et -) : inclinaison verticale</li>
<li>Maintien de Ctrl + Clic gauche ou droit : rotation à gauche ou à droite</li>
<li>Espace : Activer / enlever le mode pause</li>
<li>Clic gauche : effectuer une itération</li>
<li>Étoile (*) : donner une offrande aux individus, qui apparaîtra sur le curseur de sélection (tore en bleu clair)</li>
</ul>
<p><img src="http://sourceforge.net/dbimage.php?id=158255" alt="Screenshot du projet" hspace="10" vspace="10" width="248" height="155" align="left" />Nous sommes globalement très satisfaits de ce projet, car nous avons pu finir dans les temps, même si nous aurions aimé rajouter quelques fonctionnalités supplémentaires. Mais cela restera tout à fait possible étant donné la grande extensibilité de notre application. En effet, grâce à un usage intensif de toutes les techniques propres à la modélisation orientée objet, comme le polymorphisme et les designs patterns, nous avons construit un ensemble de classes génériques, qui peuvent s&rsquo;apparenter à un framework. Il est ainsi tout à fait possible de rajouter à moindre coût des nouvelles cases, des nouveaux types d&rsquo;individus, changer leur représentation (pour ceux qui n&rsquo;aiment pas les théières&#8230;), changer le système de combat, et même pourquoi pas rajouter de nouveaux mouvements (comme le saut ou la téléportation).</p>
<p>Si cela vous intéresse, vous pouvez télécharger la version 1.0 du projet, tel que nous l&rsquo;avons rendu à nous professeurs. Les sources sont disponibles, ainsi que les exécutables pour Linux et Windows. Attention toutefois pour ce dernier, il semble que la portabilité soit encore un tout petit peu imparfaite ; en effet nous n&rsquo;avons pas encore eu le temps de changer quelques détails qui peuvent bloquer la génération de l&rsquo;exécutable selon le compilateur utilisé. Mais nous allons bientôt remédier à cela&#8230;</p>
<p>Voici les liens pour accéder aux ressources du projet :</p>
<ul>
<li><a href="http://sourceforge.net/projects/colonywars/">Site du projet sur Sourceforge.net</a></li>
<li><a href="http://sourceforge.net/project/showfiles.php?group_id=213004">La page de téléchargement</a></li>
<li><a href="http://colonywars.svn.sourceforge.net/viewvc/colonywars/">Le dépot SVN accessible en ligne</a></li>
<li><a href="http://sourceforge.net/svn/?group_id=213004">Les détails pour effectuer un check-out du SVN</a></li>
<li><a href="http://colonywars.sourceforge.net/doc/">La documentation HTML en ligne</a></li>
</ul>
<p>Pour lancer l&rsquo;application sous Windows, vous avez juste à lancer l&rsquo;exécutable. Sous Linux, pensez toutefois à lancer l&rsquo;application en mode console pour éviter les surprises ; en effet, il faut que le dossier de textures se trouve dans le dossier courant.</p>
<p>Pour compiler le projet sous Linux, assurez-vous de disposer des bibliothèques pour le développement d&rsquo;application graphiques, en particulier Glut. Décompressez l&rsquo;archive dans un répertoire, puis tapez les instructions suivantes :</p>
<blockquote>
<pre>$ ./configure --prefix=$HOME</pre>
<pre>$ make</pre>
<pre>$ make install</pre>
</blockquote>
<p>L&rsquo;application s&rsquo;installera automatiquement dans votre homedir, dans le dossier bin. Si la documentation vous tente, vous pouvez générer le HTML et les fichiers LaTeX en tapant :</p>
<blockquote>
<pre>$ doxygen Doxyfile</pre>
</blockquote>
<p>Ensuite, placez-vous dans le dossier doc/latex et tapez simplement :</p>
<blockquote>
<pre>$ make</pre>
</blockquote>
<p>Le PDF résultat se nomme  «refman.pdf» et sera généré dans le dossier courant. Bonne lecture&#8230;</p>
<p>Un site internet du projet verra peut-être le jour au courant de l&rsquo;année, si je trouve un peu de temps à y consacrer. N&rsquo;hésitez pas à me faire part de tous vos commentaires sur ce projet. Profitez de sa licence et faites le vivre !</p>
]]></content:encoded>
			<wfw:commentRss>https://www.segmentationfault.fr/projets/teapot-colony-wars/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
