tag:linuxfr.org,2005:/tags/r%C3%A9troing%C3%A9nierie/publicLinuxFr.org : les contenus étiquetés avec « rétroingénierie »2020-06-09T17:06:27+02:00/favicon.pngtag:linuxfr.org,2005:Diary/391852020-06-05T08:54:14+02:002020-06-05T08:54:14+02:00Lattice et l'open-source, la fin d'un rêve ?Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Cher Journal.</p>
<p>Hier, <a href="https://twitter.com/fpga_dave">David Shah</a>, un des principaux développeur d'outils open source pour les FPGA (<a href="https://github.com/YosysHQ/nextpnr">NextPnR</a>, <a href="https://github.com/SymbiFlow/prjtrellis">Trellis</a>, <a href="https://github.com/daveshah1/prjoxide">prjoxide</a>, ..) postait une citation de la nouvelle licence <a href="https://www.latticesemi.com/">Lattice</a> sur <a href="https://twitter.com/fpga_dave/status/1268497428501725184">twitter</a>:</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7777772e66616269656e6d2e65752f706172746167652f6c6174746963655f6c6963656e63652e706e67/lattice_licence.png" alt="Titre de l'image" title="Source : http://www.fabienm.eu/partage/lattice_licence.png"></p>
<p>Lattice interdit expressément de faire la rétroingénierie du format de ses fichiers de configuration appelé «bitstream».</p>
<p>L'ironie du sort c'est que cette nouvelle licence vient avec un SDK de développement basé massivement sur des logiciels libres et qui ne génère pas les fameux bitstream Lattice).</p>
<p>Bref la réaction stupide de Lattice au mouvement open-source n'est pas vraiment surprenante, c'est assez classique. Mais elle fait toujours mal.</p>
<p>D'autant que la communauté open-source s'est beaucoup engagée dans le support des composants de cette marque avec le support complet des <a href="http://www.clifford.at/icestorm/">ICE40</a>, <a href="https://github.com/SymbiFlow/prjtrellis">ECP5</a> et le support bien avancé des Crosslink-ng.</p>
<p>Ce qui a permit à Lattice de vendre beaucoup de kits de développement (le <a href="https://www.latticesemi.com/icestick">Icestick</a> est régulièrement en rupture de stock) et de baser beaucoup de projet sur leurs composants.</p>
<p>Rappelons quand même que Lattice est un vendeur de composants électronique, pas un vendeur de logiciel. Donc la logique voudrait qu'ils cherchent à ce que leurs composants soient supportés par le maximum de logiciels (opensource ou non).</p>
<p>Bref, une réaction qui ne fait pas rire grand monde :(</p>
<div><a href="https://linuxfr.org/users/martoni/journaux/lattice-et-l-open-source-la-fin-d-un-reve.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/120678/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/martoni/journaux/lattice-et-l-open-source-la-fin-d-un-reve#comments">ouvrir dans le navigateur</a>
</p>
martonihttps://linuxfr.org/nodes/120678/comments.atomtag:linuxfr.org,2005:Diary/379602018-05-27T21:38:38+02:002018-05-27T21:38:38+02:00Rétro-ingénierie et modding de jeu dans un but esthétique - exemple en vidéoLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#en-quoi-cest-int%C3%A9ressant-ou-original">En quoi c'est intéressant ou original ?</a></li>
<li>
<a href="#les-premi%C3%A8res-%C3%A9tapes">Les premières étapes</a><ul>
<li><a href="#dabord-mettre-en-place-un-environnement-permettant-de-bidouiller-et-filmer-en-toute-qui%C3%A9tude">D'abord, mettre en place un environnement permettant de bidouiller et filmer en toute quiétude</a></li>
<li><a href="#installer-quelques-outils-g%C3%A9n%C3%A9riques">Installer quelques outils génériques</a></li>
</ul>
</li>
<li>
<a href="#%C3%87a-y-est-on-peut-commencer-%C3%A0-tout-casser">Ça y est, on peut commencer à tout casser</a><ul>
<li><a href="#premiers-d%C3%A9tournements-du-jeu--le-swap">Premiers détournements du jeu : le swap</a></li>
<li>
<a href="#bon-cest-sympa-mais-je-veux-ajouter-des-trucs-originaux">Bon, c'est sympa, mais je veux ajouter des trucs originaux</a><ul>
<li><a href="#le-format-m2">Le format M2</a></li>
<li><a href="#le-format-wmo">Le format WMO</a></li>
<li><a href="#le-format-blp">Le format BLP</a></li>
<li><a href="#les-%C3%A9ditions-directes-de-fichiers-sans-conversion">Les éditions directes de fichiers, sans conversion</a></li>
</ul>
</li>
<li>
<a href="#le-cas-des-adt">Le cas des adt</a><ul>
<li><a href="#le-sacro-saint-noggit">Le sacro-saint Noggit</a></li>
<li><a href="#la-g%C3%A9n%C3%A9ration-de-terrain">La génération de terrain</a></li>
</ul>
</li>
<li><a href="#jouer-avec-les-skybox">Jouer avec les skybox</a></li>
</ul>
</li>
<li><a href="#petits-d%C3%A9tails-suppl%C3%A9mentaires">Petits détails supplémentaires</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ul><p>Bonjour tout le monde !</p>
<p>Tout d'abord, j'espère que mon message ne sera pas trop considéré comme "publicitaire". Si c'est le cas, brûlez le au lance-flammes. J'espère aussi que la page n'est pas trop lourde, j'ai mis un paquet d'images et de gifs animés dans l'article.</p>
<p>Il y a 8 ans, avec une bande d'amis (regroupés sous le nom de RIdPEF), nous nous sommes lancés dans un projet un peu dingue mais rigolo : filmer le jeu <a href="https://fr.wikipedia.org/wiki/World%20Of%20Warcraft" title="Définition Wikipédia">World Of Warcraft</a>, mais une version totalement modifiée/moddée/customisée/patchée dans le but d'obtenir une vidéo la plus esthétique possible. Nous avons terminé il y a quelques jours, et ce fut une longue aventure, avec des méthodes qui peuvent vous intéresser. C'est pourquoi je me lance dans ce journal. Il ne s'agit pas d'un tutoriel, mais plutôt d'une présentation générale des méthodes et outils utilisés.</p>
<p>Tout d'abord, voici la vidéo, si vous souhaitez la regarder avant de lire cet immense pavé (cliquez sur l'image):</p>
<p><a href="https://www.youtube.com/watch?v=3HPXD8-zE0o"><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f62616e646561754349442e706e67/bandeauCID.png" alt="Coffee Induced Dreams" title="Source : https://static.ridpef.org/files/article_cid/bandeauCID.png"></a></p>
<p>Pour ceux qui ne connaissent pas le jeu, dites-vous que 100% du film (y compris introduction et générique) sont des scènes créées amoureusement et artisanalement dans le jeu World of Warcraft.</p>
<h2 id="en-quoi-cest-intéressant-ou-original">En quoi c'est intéressant ou original ?</h2>
<p>Pour répondre à cette question, il faut d'abord se pencher sur quelques caractéristiques du jeu World of Warcraft. C'est un <a href="https://fr.wikipedia.org/wiki/MMORPG" title="Définition Wikipédia">MMORPG</a>, c'est-à-dire que les joueurs disposent d'un client, grâce auquel ils se connectent sur un serveur, et interagissent dans un monde qui est le même pour tout un chacun.</p>
<p>Il n'est normalement pas possible d'agir vraiment sur le monde, il est semi-figé, c'est à dire qu'il n'évolue que lorsque l'éditeur pousse de nouvelles mises à jour. Aucun outil officiel n'est disponible qui permettrait une quelconque modification du client. Et c'est là que ça devient rigolo.</p>
<p>En gros, nous avons utilisé le savoir et les outils accumulés depuis la sortie du jeu par une bande d'acharnés qui souhaitent modifier le client (certains pour faire des serveurs privés avec du contenu unique, d'autres pour le "fun", etc.). Nous avons aussi participé à cette accumulation d'outils et de savoir.</p>
<p>Et c'est là qu'on touche quelque chose d'assez proche de ce que l'on peut voir parfois dans le monde du logiciel libre : rien de cette vidéo n'aurait été possible sans collaboration, connaissance et documentation partagée (notamment à l'aide d'un <a href="https://wowdev.wiki">wiki</a>), et sans outils "librement" partagés. Je mets "librement" car si la gratuité est de mise dans 99% des cas, et que la plupart des outils créés par la communauté sont libres, quelques uns ont le code source disponible mais sans licence de précisée, et quelques uns sont propriétaires.</p>
<p>Ce journal va servir à montrer de quelle manière nous avons tordu le jeu, et avec quels outils. Parce que c'est rigolo.</p>
<h2 id="les-premières-étapes">Les premières étapes</h2>
<h3 id="dabord-mettre-en-place-un-environnement-permettant-de-bidouiller-et-filmer-en-toute-quiétude">D'abord, mettre en place un environnement permettant de bidouiller et filmer en toute quiétude</h3>
<p>Modifier un jeu en ligne n'est pas quelque chose d'anodin, et peut être très mal vu. Globalement, c'est contre les conditions d'utilisation du jeu, même s'il y a toujours eu une tolérance tant que c'était dans des visées "artistiques". De plus, World of Warcraft étant un jeu qui a beaucoup évolué, beaucoup d'outils ne fonctionnent plus sur les versions récentes. Pour ces deux raisons, nous avons fait le choix d'installer un serveur stabilisé sur une ancienne version de WoW (la 3.3.5 pour ceux qui veulent des détails).</p>
<p>Donc, première étape, compiler et installer <a href="https://www.trinitycore.org/">un serveur</a> pour bidouiller en local sans risque aucun. La création de serveurs (qu'ils soient le plus complet ou plutôt minimaliste) est d'ailleurs un des grands jeux des gens qui veulent s'amuser à comprendre comment les interactions client/serveur fonctionnent sur ce jeu (<a href="https://github.com/Dece/DuratorEmu">un autre exemple</a> plus minimaliste en python).</p>
<p>Ensuite, configurer le client pour s'y connecter, puis préparer le client pour pouvoir filmer sans être limités par les déplacements "normaux" du personnage. Pour cela, une amie nous a concocté un logiciel fort pratique nommé <a href="https://bitbucket.org/Kyssah/ffs/overview">Free Far Sight</a>, même si le code n'est pas libre. Depuis, un autre logiciel (libre celui-ci) a été créé permettant sensiblement les même choses : <a href="https://github.com/noggaholic/bugcraft-studio">BugCraft-Studio</a>. Encore une fois, on est à la limite de ce que <a href="https://fr.wikipedia.org/wiki/Blizzard_Entertainment">Blizzard</a> (l'éditeur du jeu) accepte : ces logiciels font du memory editing, et c'est généralement pas très apprécié sur les jeux en ligne. Mais encore une fois, tant que c'est fait pour un but "artistique", Blizzard est en général assez tolérant. Si vous souhaitez savoir ce que permettent réellement ces logiciels, Khamúl en a fait une démonstration <a href="https://www.youtube.com/watch?v=F_cZaIJUie4">par ici</a>.</p>
<h3 id="installer-quelques-outils-génériques">Installer quelques outils génériques</h3>
<p>Dans les outils de base, il faut citer ce qui permet d'extraire les fichiers du jeu, afin de les bidouiller à volonté. Pour ceci, nous avons besoin des outils basés sur la <a href="https://github.com/ladislav-zezula/StormLib">Stormlib</a> (disponible dans <a href="https://packages.debian.org/source/stretch/stormlib">vos</a> <a href="https://aur.archlinux.org/packages/stormlib/">distributions</a> <a href="https://opensuse.pkgs.org/42.3/opensuse-games/StormLib-devel-9.21-1.1.x86_64.rpm.html">préférées</a>) et aussi <a href="https://github.com/WoW-Tools/CASCExplorer">casexplorer</a>.</p>
<p>Comme nous modifions une ancienne version de World Of Warcraft, nous ne disposons pas directement de tous les derniers modèles ajoutés dans le jeu. Ça n'est pas bien grave, il existe un chouette petit logiciel nommé <a href="http://www.model-changing.net/files/file/62-legion-wotlk-multi-converter/">multiconverter</a>, qui permet de convertir les modèles des versions récentes du jeu en quelque chose de compatible avec la version que nous utilisons.</p>
<p>Nous utilisons aussi une méthode permettant de ne pas avoir à "repacker" nos patchs, ce qui fait gagner pas mal de temps (<a href="http://www.modcraft.io/index.php?topic=1828.msg11824#msg11824">la méthode</a> est rigolote pour ceux que ça intéresse, c'est de la modification du binaire, en y allant à l'éditeur hexa).</p>
<p>Je rappelle que tous ces outils ont été développés au cours du temps par des passionnés ne disposant d'aucune documentation fournie par Blizzard. C'est beau, non ?</p>
<h2 id="Ça-y-est-on-peut-commencer-à-tout-casser">Ça y est, on peut commencer à tout casser</h2>
<h3 id="premiers-détournements-du-jeu--le-swap">Premiers détournements du jeu : le swap</h3>
<p>Ça c'est la discipline historique pour commencer le modding sur WoW. Il s'agit de remplacer un fichier par un autre, tout simplement en le renommant. Par exemple, vous trouvez que tel modèle d'arbre qu'on voit dans telle zone il est moche, et qu'une boîte aux lettres ça serait plus joli, et ben vous renommez votre boîte selon le nom de l'arbre, vous la mettez au bon endroit dans l'arborescence de vos fichiers, et hop. Oui c'est crado, mais c'est efficace. À noter que ça marche pour n'importe quoi : modèle 3d, texture, son, cartes entières, voire continents. C'est d'ailleurs LA méthode pour aller explorer certaines zones du jeu normalement non accessibles : les mettre à la place de zones tout à fait normales.</p>
<p>Allez, un exemple :<br><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f737761702e676966/swap.gif" alt="Exemple de swap" title="Source : https://static.ridpef.org/files/article_cid/swap.gif"></p>
<h3 id="bon-cest-sympa-mais-je-veux-ajouter-des-trucs-originaux">Bon, c'est sympa, mais je veux ajouter des trucs originaux</h3>
<p>En effet, le swapping comme présenté juste au-dessus, même s'il permet beaucoup de choses, est limité aux choses déjà incluses dans le jeu. Si l'on veut ajouter un nouveau modèle 3d, modifier une texture déjà existante, ou créer son propre terrain avec des reliefs originaux, il faut passer aux choses plus sérieuses.<br>
Et là, l'ensemble de ce que je vais vous montrer n'a été possible que grâce à un immense travail de reverse des formats du jeu, et de documentation. Si ça vous intéresse, à peu près tous les formats sont documentés ici sur le fameux <a href="https://wowdev.wiki/Main_Page">WoWdev Wiki</a>.</p>
<p>En gros, il y a trois aspects :</p>
<ul>
<li>Convertir des fichiers de formats "classiques" dans des fichiers compris par le jeu.</li>
<li>Convertir les fichiers de World Of Warcraft dans un format éditable ou modifiable plus facilement.</li>
<li>Modifier directement les fichiers en les laissant dans le format utilisé par le jeu.</li>
</ul><p>Il s'agit donc, pour chaque format (image, modèle 3d, etc), de créer un workflow complet en fonction de ce que l'on désire faire.</p>
<p>Les objets dans Wow sont répartis en deux formats distincts : </p>
<ul>
<li>Le <a href="https://wowdev.wiki/M2">M2</a>, pour tous les objets qui ont besoin d'animations, cela va de la fontaine ruisselante aux monstres et PNJs, ainsi que les petits éléments de décor.</li>
<li>Le <a href="https://wowdev.wiki/WMO">WMO</a>, pour les bâtiments et les très gros objets.</li>
</ul><p>Lorsque nous avons eu besoin d'altérer le modeling ou l'UV-mapping (manière dont les textures sont appliquées) d'un objet existant, il nous a fallu tout d'abord l'exporter en .obj, le re-travailler, puis le convertir à nouveau dans un format de Wow. L'export a été possible grâce à un visualisateur de modèles, <a href="https://wowmodelviewer.net/wordpress/">WowModelViewer</a>.<br>
Pour tous les types d'objets custom utilisés, le modeling et l'UV-mapping ont été réalisés dans Blender. Ne pouvant pas utiliser les shaders à l'export, le texturing a été fait en texture pure sans effets, en général avec des images reprises dans les fichiers du jeu et parfois un peu modifiées, pour garder de la cohérence graphique.</p>
<h4 id="le-format-m2">Le format M2</h4>
<p>Nous avons utilisé plusieurs workflows concurrents, en fonction du besoin de collisions et d'animations que nous avions, car tous les outils ne comprenaient pas les mêmes possibilités.<br>
Pour les objets avec collisions (mais sans animations), nous avons utilisé le convertisseur nommé <a href="http://www.modcraft.io/index.php?topic=5285.0">Obj2M2</a>. <br>
Pour les objets sans collisions, avec ou sans animations, nous avons créé un <a href="https://bitbucket.org/Mjollna/gltf2m2">convertisseur</a> spécialement pour l'occasion, qui effectue une transformation de .gltf (exporté depuis Blender) vers M2.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f6d325f617262722e676966/m2_arbr.gif" alt="m2 avec animation" title="Source : https://static.ridpef.org/files/article_cid/m2_arbr.gif"> <img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f6d325f62616b70616b2e676966/m2_bakpak.gif" alt="m2 sans animation" title="Source : https://static.ridpef.org/files/article_cid/m2_bakpak.gif"></p>
<h4 id="le-format-wmo">Le format WMO</h4>
<p>Pour tous les objets massifs non-animés, nous avons ré-exporté les fichiers de Blender en .3ds, puis converti ce format en WMO grâce à <a href="https://dece.space/dev/mm/">MirrorMachine</a>.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f776d6f2e6a7067/wmo.jpg" alt="Un joli bateau en WMO" title="Source : https://static.ridpef.org/files/article_cid/wmo.jpg"></p>
<h4 id="le-format-blp">Le format BLP</h4>
<p>Le <a href="https://wowdev.wiki/BLP">format BLP</a> (ou les formats, il en existe plusieurs versions) est celui utilisé pour toutes les images du jeu. Il est utilisé à la fois pour les textures, mais aussi pour les différents éléments de l'interface : icônes, barres de chargement, cartes, etc.<br>
Il existe un paquet d'outils permettant de les convertir en png, et de convertir les png en blp. Nous avons utilisé <a href="https://www.hiveworkshop.com/threads/blp-lab-v0-5-0.137599/">BLP Lab</a> et <a href="https://github.com/merfed/Coffee/tree/master/Tools/BLP/BLPConverter">BLPConverter</a>.<br>
Cela permet de créer des textures pour des objets existant en jeu ou pour les modèles que l'on importe.<br>
Un exemple amusant, vous pouvez ici voir un remplacement de la texture utilisée pour la tempête de sable par un truc plus abstrait, avec une skybox noire :<br><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f626c702e676966/blp.gif" alt="Tempête de disques !" title="Source : https://static.ridpef.org/files/article_cid/blp.gif"></p>
<h4 id="les-éditions-directes-de-fichiers-sans-conversion">Les éditions directes de fichiers, sans conversion</h4>
<p>Dans plusieurs cas, nous ne sommes pas passés par des convertisseurs, notamment lorsqu'il s'agissait de bidouiller des choses spécifiques aux formats des fichiers.</p>
<p>Par exemple, les WMO possèdent la possibilité d'avoir de la lumière durant la nuit (utilisé en jeu principalement pour les fenêtres de bâtiments vus de l'extérieur). Nous avons utilisé cette option dans le film.<br>
Dans ce cas, la manipulation est la suivante : il faut repérer la bonne texture sur le <a href="https://wowdev.wiki/WMO#MOMT_chunk">chunk MOMT</a> (il y a dans le chunk un renvoi vers l'offset dans le <a href="https://wowdev.wiki/WMO#MOTX_chunk">MOTX</a> qui contient le nom des textures utilisées) , changer les flags à 0x10 pour activer la couleur émissive, et définir la couleur un peu plus bas (color_1). Au final, voilà le résultat :</p>
<p><a href="https://static.ridpef.org/files/article_cid/wmo_flags_light.png"><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f776d6f5f666c6167735f6c6967687474682e706e67/wmo_flags_lightth.png" alt="Editeur hexa" title="Source : https://static.ridpef.org/files/article_cid/wmo_flags_lightth.png"></a><br><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f776d6f5f6c756d2e6a7067/wmo_lum.jpg" alt="WMO lumineux" title="Source : https://static.ridpef.org/files/article_cid/wmo_lum.jpg"></p>
<p>Notez l'utilisation de templates pour 010Editor permettant de mieux se repérer dans le fichier. Ces templates fort utiles sont encore une fois maintenus par la communauté : <a href="https://github.com/relaxok/wow010">https://github.com/relaxok/wow010</a></p>
<p>Dans d'autres cas, il s'est par exemple agi de modifier la durée de certaines animations. On peut aussi citer le fait d'avoir parfois eu à "nettoyer" des terrains (quand nous nous sommes basés sur des terrains pré-existants) notamment pour supprimer les ombres incrustées dans le relief.<br>
Ou encore, on peut citer l'utilisation de <a href="https://bitbucket.org/Shgck/pywmo">PyWMO</a>, une bibliothèque permettant de manipuler directement les WMO en Python, très pratique pour redimensionner rapidement un modèle sans avoir à passer par les étapes de conversion.</p>
<h3 id="le-cas-des-adt">Le cas des adt</h3>
<p>Les <a href="https://wowdev.wiki/ADT/v18">ADT</a> sont des fichiers représentant des carrés de terrain. Ils comportent plusieurs informations : les reliefs, les textures utilisées au sol, la présence d'eau, l’existence et les coordonnées des objets positionnés (M2 et WMO) sur le carré en question, etc.</p>
<h4 id="le-sacro-saint-noggit">Le sacro-saint Noggit</h4>
<p>Aaaah, <a href="https://bitbucket.org/berndloerwald/noggit3">Noggit</a>. Ce logiciel est une petite merveille, pas toujours pratique à utiliser, parfois un peu capricieux, mais génial. Il s'agit tout simplement d'un éditeur de carte pour World Of Warcraft. Il permet la création ou l'édition de terrain. Avec un relief personnalisé, choix de textures au sol, ajout d'eau, ajout et positionnement/redimensionnement de modèles, et sauvegarde dans un format directement compréhensible par World Of Warcraft.</p>
<p><a href="https://static.ridpef.org/files/article_cid/noggit.png"><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f6e6f6767697474682e706e67/noggitth.png" alt="Le grand Noggit" title="Source : https://static.ridpef.org/files/article_cid/noggitth.png"></a></p>
<p>Que ce soit pour la création d'une nouvelle carte, ou pour l'édition d'une carte pré-existante, ce logiciel a certainement été l'outil que nous avons le plus utilisé pour cette vidéo.</p>
<h4 id="la-génération-de-terrain">La génération de terrain</h4>
<p>Bien que l'édition manuelle de terrain soit toute indiquée dans un grand nombre de cas, il est parfois intéressant de générer des cartes à partir de données externes. C'est le parti pris de <a href="https://bitbucket.org/Mjollna/wowmapgen">WowMapGen</a>, qui utilise des images pour créer le relief, placer les textures et de la couleur sur le terrain, puis indiquer où placer les objets. Le programme a par exemple permis de placer très rapidement plusieurs milliers d'objets identiques avec des variations d'échelle et de rotation. </p>
<p><a href="https://static.ridpef.org/files/article_cid/placement_m2.png"><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f706c6163656d656e745f6d3274682e706e67/placement_m2th.png" alt="Carte de placement d'objets" title="Source : https://static.ridpef.org/files/article_cid/placement_m2th.png"></a><br><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f706c6163656d656e745f6d325f726573756c742e676966/placement_m2_result.gif" alt="Résultat du placement" title="Source : https://static.ridpef.org/files/article_cid/placement_m2_result.gif"></p>
<p>Cependant, le relief créé par WowMapGen comporte des anomalies très longues à corriger manuellement. Cela nous a conduits à utiliser <a href="https://github.com/WowDevTools/Blender-WMO-import-export-scripts">un autre générateur</a> en complément, dont le résultat est beaucoup plus beau, mais qui n'a pas les options de placement d'objets.</p>
<h3 id="jouer-avec-les-skybox">Jouer avec les skybox</h3>
<p>Historiquement, pour changer la couleur du ciel et du brouillard, nous modifions des <a href="https://wowdev.wiki/DB/Light">fichiers pas très lisibles</a>. Heureusement, l'outil de nous utilisons pour gérer les trajets de caméra permet aussi de modifier ces réglages directement. L'inconvénient est qu'il n'y a pas de sauvegarde directement dans le format utilisé par le jeu. Cela nous importe peu quand le but à la fin est uniquement d'avoir une vidéo.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f7374617469632e7269647065662e6f72672f66696c65732f61727469636c655f6369642f6666732e676966/ffs.gif" alt="Changement de skyboxes à la volée" title="Source : https://static.ridpef.org/files/article_cid/ffs.gif"></p>
<h2 id="petits-détails-supplémentaires">Petits détails supplémentaires</h2>
<p>Peut-être vous demandez-vous pourquoi le film s'appelle ainsi ? Tout d'abord, parce que le café, c'est bon. Ensuite, coffee était le terme utilisé au début du jeu pour désigner le modding. On trouve encore <a href="https://github.com/merfed/Coffee/">quelques</a> <a href="https://www.reddit.com/r/wow/comments/242quh/anyone_here_remember_noggaholic/ch3bz0a">traces</a> de ce terme sur internet. "Dreams", c'est simplement parce que ce sont des paysages imaginaires qui sont montrés, et qui n'ont parfois pas grand sens.</p>
<p>Vous pouvez trouver quelques informations en plus sur le petit film, ainsi qu'une galerie de sreenshots par ici : <a href="https://ridpef.org/coffee-induced-dreams">https://ridpef.org/coffee-induced-dreams</a></p>
<h2 id="conclusion">Conclusion</h2>
<p>Ce projet date d'il y a 8 ans, c'est un boulot de malade (on a compté, il y a presque 2 heures de travail par seconde de vidéo), mais on est heureux d'avoir terminé. Il faut en gros penser ce projet comme l'aboutissement de notre travail créatif sur World Of Warcraft, comme une démo technique, mais aussi comme un grand hommage à tout cette communauté qui depuis les débuts du jeu cherche à en comprendre le fonctionnement.<br>
J'espère que cette description de la manière dont nous avons procédé, et la mise en avant d'une partie des outils utilisés vous ont plu ! N'hésitez pas si vous avez des questions, que ça soit sur l'aspect technique ou n'importe quoi d'autre.</p>
<p>Je rajoute quelques liens, vers des pages traitants de ces sujets :</p>
<ul>
<li>
<a href="https://ridpef.org">Le site de la RIdPEF</a>, notre communauté. et son <a href="https://forum.ridpef.org">forum</a>
</li>
<li>
<a href="https://wowdev.wiki/Main_Page">le WoWdev Wiki</a>, une mine d'information concernant la manière dont le jeu est fait.</li>
<li>
<a href="http://www.modcraft.io/">Modcraft</a>, un forum anglophone sur ce sujet.</li>
<li>
<a href="http://www.model-changing.net/">Model-changing.net</a>, une autre communauté anglophone.</li>
<li><a href="https://www.youtube.com/watch?v=3HPXD8-zE0o">Le lien vers la vidéo</a></li>
<li><a href="https://www.youtube.com/watch?v=Es2nvAgdk94">Une vidéo que montre l'envers du décor de certaines scènes</a></li>
</ul><p>Merci à tous les copains de la RIdPEF pour m'avoir suivi dans tout ça ! Et merci à Mjollna pour m'avoir aidé à pondre ce journal.</p><div><a href="https://linuxfr.org/users/zhao/journaux/retro-ingenierie-et-modding-de-jeu-dans-un-but-esthetique-exemple-en-video.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/114572/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/zhao/journaux/retro-ingenierie-et-modding-de-jeu-dans-un-but-esthetique-exemple-en-video#comments">ouvrir dans le navigateur</a>
</p>
Zhaohttps://linuxfr.org/nodes/114572/comments.atomtag:linuxfr.org,2005:Post/386552017-11-06T15:41:36+01:002017-11-06T15:41:36+01:00Port série et rétro ingénierie.<p>Bonjour.<br>
Ayant aujourd'hui un statut de «trouveur de solution originales» en milieux professionnel, on viens de me donner un défi plutôt intéressant à relever, mais sur le quel j'ai aujourd'hui quelques soucis.</p>
<h2 id="le-problème">Le problème</h2>
<p>Nous avons aujourd'hui des armoires à clef électroniques pouvant à la demande délivrer, suivre et réceptionner des clefs. L'armoire communique en série (RS232) avec un ordinateur sur le quel tourne un logiciel (propriétaire et au coût de licence non négligeable) de gestion avancé.</p>
<p>L'idée essentielle serais de pouvoir remplacer toute la partie gestion par quelque chose de plus simple et moins couteux (et si je peu faire plus libre au passage, ça m'arrangerais bien)</p>
<p>J'ai utilisé l'utilitaire «Port Mon» sous Windows pour analyser les trames série entre le logiciel de gestion et le logiciel d'origine, le tout me semblant assez simple et logique.</p>
<h2 id="gnulinux-en-série">Gnu/Linux en série</h2>
<p>Un peu trop jeune dans le domaine de l'informatique pour avoir massivement bidouillé ces bon vieux ports série, je ne sais pas comment faire pour tester, manuellement, le bout de protocole sur le quel je joue aux devinettes.</p>
<p>Comment faire pour envoyer des trames à cette armoire communiquant en série, et pour recevoir ces réponses ?</p>
<p>Quelle sont les bonnes méthodes pour faire de la rétro-ingénierie sur un protocole série ?</p>
<p>Les quelques méthodes que j'ai essayé jusque ici n'ont rien donné. Mais je suis sur de manquer de bases dans ces domaines.</p><div><a href="https://linuxfr.org/forums/general-general/posts/port-serie-et-retro-ingenierie.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/113028/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/general-general/posts/port-serie-et-retro-ingenierie#comments">ouvrir dans le navigateur</a>
</p>
SlowBrainhttps://linuxfr.org/nodes/113028/comments.atomtag:linuxfr.org,2005:Diary/360342015-08-11T16:46:07+02:002015-08-11T16:46:07+02:00Petite prévision pour l'avenir. Oracle !Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Plop,</p>
<p>Petite news rigolote à propos d'Oracle qui avec un peu de cynisme représente assez bien l'entreprise.</p>
<p>Au départ, la lecture du billet assez abrasif sur leur blog m'avait juste fait sourire. Mais maintenant qu'il n'est plus disponible, je me dis que c'est dommage de ne pas en faire profiter la communauté.</p>
<p><a href="https://web.archive.org/web/20150811052336/https://blogs.oracle.com/maryanndavidson/entry/no_you_really_can_t">https://web.archive.org/web/20150811052336/https://blogs.oracle.com/maryanndavidson/entry/no_you_really_can_t</a></p>
<p>En gros, Oracle parle du fait que c'est mal et qu'il ne faut pas s'essayer à la rétro-ingénierie sur leur code. Les problèmes de sécurités sont réglés de leur côté. Si jamais vous tombez dessus par rétro-ingénierie, ils le régleront mais ne vous attendez pas à des remerciements de leur part. D'ailleurs en tant que client, ce n'est pas votre boulot.</p>
<blockquote>
<p>A customer can’t analyze the code to see whether there is a control that prevents the attack the scanning tool is screaming about (which is most likely a false positive)</p>
<p>A customer can’t produce a patch for the problem – only the vendor can do that</p>
<p>A customer is almost certainly violating the license agreement by using a tool that does static analysis (which operates against source code)</p>
<p>Q. What does Oracle do if there is an actual security vulnerability?</p>
<p>A. I almost hate to answer this question because I want to reiterate that customers Should Not and Must Not reverse engineer our code. However, if there is an actual security vulnerability, we will fix it. We may not like how it was found but we aren’t going to ignore a real problem – that would be a disservice to our customers. We will, however, fix it to protect all our customers, meaning everybody will get the fix at the same time. However, we will not give a customer reporting such an issue (that they found through reverse engineering) a special (one-off) patch for the problem. We will also not provide credit in any advisories we might issue. You can’t really expect us to say “thank you for breaking the license agreement.” </p>
<p>I do not need you to analyze the code since we already do that, it’s our job to do that, we are pretty good at it, we can – unlike a third party or a tool – actually analyze the code to determine what’s happening and at any rate most of these tools have a close to 100% false positive rate so please do not waste our time on reporting little green men in our code.” </p>
</blockquote>
<p>Nous n'avons pas besoin d'analyser leur code. Ce sont des bons, c'est leur boulot, ils savent de quoi ils parlent.</p>
<p>L'histoire aurait pu s'arrêter là… après tout c'est leurs droits, leurs logiciels… et oui, ils ne doivent pas être si mauvais…</p>
<p>Peu de temps après leur communiqué et alors qu'il demande d'arrêter l'utilisation de logiciel d'analyse comme <a href="http://www.veracode.com/">veracode</a> pour l'analyse de la sécurité de leur application internet, une belle petite faille est découverte. On peut exécuter du code javascript sans problème dans leur champ de saisie d'url lors de la publication d'un commentaire.</p>
<p><a href="https://twitter.com/thegrugq/status/631056841670135808">https://twitter.com/thegrugq/status/631056841670135808</a></p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f7062732e7477696d672e636f6d2f6d656469612f434d486e744a6d584141416d2d42632e706e67/CMHntJmXAAAm-Bc.png" alt="twitter" title="Source : https://pbs.twimg.com/media/CMHntJmXAAAm-Bc.png"></p>
<p>Bref, la classe.</p><div><a href="https://linuxfr.org/users/thom/journaux/petite-prevision-pour-l-avenir-oracle.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/106479/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/thom/journaux/petite-prevision-pour-l-avenir-oracle#comments">ouvrir dans le navigateur</a>
</p>
Thomhttps://linuxfr.org/nodes/106479/comments.atomtag:linuxfr.org,2005:News/364992015-06-08T10:37:11+02:002015-06-08T10:39:32+02:00Sortie de radare2 0.9.9 - Almost thereLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Vous l'attendiez, elle est enfin arrivée, la nouvelle version de radare2, la 0.9.9, nom de code "Almost there"!<br>
Radare est un framework complet d'analyse et de désassemblage de binaires. Plutôt que de vous inviter à lire <a href="https://github.com/radare/radare2/commits/master">chaque commit</a>, voici un résumé des nouveautés dans la seconde partie.</p></div><ul><li>lien nᵒ 1 : <a title="http://radare.today/radare-0-9-9/" hreflang="en" href="https://linuxfr.org/redirect/94306">La nouvelle originale</a></li><li>lien nᵒ 2 : <a title="http://radare.org/r/" hreflang="en" href="https://linuxfr.org/redirect/94307">Le site officiel</a></li><li>lien nᵒ 3 : <a title="http://rada.re/get/changelog2-0.9.9" hreflang="en" href="https://linuxfr.org/redirect/94308">Le changelog détaillé</a></li></ul><div><h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#quelques-nombres">Quelques nombres</a></li>
<li><a href="#console">Console</a></li>
<li>
<a href="#nouvelles-architectures">Nouvelles architectures</a><ul>
<li><a href="#i4004">i4004</a></li>
<li><a href="#lh5801">LH5801</a></li>
<li><a href="#z80">z80</a></li>
<li><a href="#pebble">Pebble</a></li>
</ul>
</li>
<li><a href="#am%C3%A9lioration-du-moteur-danalyse">Amélioration du moteur d'analyse</a></li>
<li><a href="#changements-au-niveau-des-commandes">Changements au niveau des commandes</a></li>
<li><a href="#corrections-de-bugs">Corrections de bugs</a></li>
<li><a href="#esil">ESIL</a></li>
<li><a href="#recherche">Recherche</a></li>
<li><a href="#graphes-ascii">Graphes ASCII</a></li>
<li><a href="#enseignement">Enseignement</a></li>
<li>
<a href="#d%C3%A9bogueur">Débogueur</a><ul>
<li><a href="#windbg">WinDBG</a></li>
<li><a href="#tracing">Tracing</a></li>
</ul>
</li>
<li><a href="#web-interface">Web interface</a></li>
<li><a href="#r2pipe">r2pipe</a></li>
<li>
<a href="#misc">Misc</a><ul>
<li><a href="#build">Build</a></li>
<li><a href="#tv">TV</a></li>
</ul>
</li>
<li><a href="#captures-d%C3%A9cran-bonus">Captures d'écran bonus</a></li>
</ul><h2 id="quelques-nombres">Quelques nombres</h2>
<p>Grâce à plus de 50 contributeurs sur environ 1700 commits, voici ce qui a changé :</p>
<pre><code class="bash"><span class="nv">$ </span>git checkout 0.9.9 <span class="o">&&</span> git diff 0.9.8 --shortstat
<span class="m">839</span> files changed, <span class="m">156490</span> insertions<span class="o">(</span>+<span class="o">)</span>, <span class="m">18885</span> deletions<span class="o">(</span>-<span class="o">)</span></code></pre>
<h2 id="console">Console</h2>
<p>La meilleure manière d'utiliser radare2, c'est à travers son shell. C'est pourquoi l'équipe a passé beaucoup de temps à la polir. Les utilisateurs sous Windows seront ravis d'apprendre que radare2 <a href="https://www.youtube.com/watch?v=pnZRsmY6xsw">fonctionne</a> maintenant sans soucis sur leur plateforme, et atteint presque la parité en matière de fonctionnalités par rapport aux <strong>vrais</strong> systèmes d'exploitation, avec d'incroyables nouveautés comme le support des touches fléchées, ou encore du <em><code>^c</code></em>!</p>
<p>Grâce à un contributeur <a href="https://gist.github.com/XVilka/8346728">fan</a> de couleurs, radare2 supporte maintenant la norme Truecolor, vous permettant de définir un thème visuel en choisissant parmi 16,777,216 couleurs!</p>
<p>Parmi la pile d'améliorations, on peut également trouver deux nouvelles variables, <em>scr.wheelspeed</em> et <em>scr.responsive</em> qui améliorent la navigation.</p>
<p>Il est de notoriété publique que la courbe d'apprentissage de radare2 est <s>affreuse</s> un peu raide. La bonne nouvelle, c'est que l'équipe a vérifié que chaque commande avait sa documentation (il suffit d'ajouter <code>?</code> à la fin d'une commande pour avoir des informations à son sujet). Fini les commandes énigmatiques !</p>
<h2 id="nouvelles-architectures">Nouvelles architectures</h2>
<h3 id="i4004">i4004</h3>
<p>Revenons, si vous le voulez bien, en 1971. À cette époque, Intel sortait le premier microprocesseur programmable, sous le nom de <a href="https://en.wikipedia.org/wiki/Intel_4004">i4004</a>.</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4665622f43343030345f2d496e74656c2d2e6a7067/C4004_-Intel-.jpg" alt="i4004 CPU" title="Source : http://radare.today/content/images/2015/Feb/C4004_-Intel-.jpg"></p>
<p>Processeur ultra-rapide, du haut de ses 740kHz, capable d'adresser directement 640 bytes de RAM, c'était une technologie de pointe à son époque, et maintenant, 34 ans plus tard, radare2 le supporte enfin.</p>
<h3 id="lh5801">LH5801</h3>
<p>Maintenant que nous avons remonté le temps, connaissez-vous le <a href="http://www.old-computers.com/museum/computer.asp?st=1&c=965">LH5801</a> ?</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4170722f7368617072652e4a5047/shapre.JPG" alt="pocket computer" title="Source : http://radare.today/content/images/2015/Apr/shapre.JPG"></p>
<p>C'est un processeur 8bit qui fut utilisé dans le premier ordinateur de poche !</p>
<h3 id="z80">z80</h3>
<p>Le précédent désassembleur <a href="https://en.wikipedia.org/wiki/Zilog_Z80">z80</a> était sous licence GPL, avait des commentaires en allemand (comme <a href="https://bugs.documentfoundation.org/show_bug.cgi?id=39468">LibreOffice</a> et <a href="https://plus.google.com/+LennartPoetteringTheOneAndOnly/posts/VUzeRLf5g5m">systemd</a> !). Le nouveau est plus propre, plus correct, 75% plus petit, et sous licence LGPL ! Que demander de plus.</p>
<h3 id="pebble">Pebble</h3>
<p>Si vous avez une <a href="https://getpebble.com/">montre Pebble</a>, il est <a href="https://github.com/radare/radare2/commit/e35d55e18ab2bfe1d38b4a9398222531982f070a">maintenant</a> possible de déboguer ses applications avec radare2.</p>
<h2 id="amélioration-du-moteur-danalyse">Amélioration du moteur d'analyse</h2>
<p>Les méthodes d'analyse de type <em>nop-skip</em>, de détection de variables locales, d'utilisation du PLT ELF et du mode Thumb sont maintenant supportées sur les architectures ARM et ARM64. Les drapeaux locaux et les labels de fonctions sont également activés par défaut pour l’intégralité des architectures.</p>
<p>Les informations de relocation de type PE sont maintenant affichées de manière plus claire :</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4170722f72656c6f63322e706e67/reloc2.png" alt="PE RELOC" title="Source : http://radare.today/content/images/2015/Apr/reloc2.png"></p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4170722f72656c6f632e706e67/reloc.png" alt="PE RELOC 2" title="Source : http://radare.today/content/images/2015/Apr/reloc.png"></p>
<p>Un exemple de support (basique) de l'architecture <img src="//img.linuxfr.org/img/68747470733a2f2f656e2e77696b6970656469612e6f72672f77696b692f45545241585f43524953/ETRAX_CRIS" alt="CRIS" title="Source : https://en.wikipedia.org/wiki/ETRAX_CRIS"> :<br><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4170722f637269732e706e67/cris.png" alt="Cris anal" title="Source : http://radare.today/content/images/2015/Apr/cris.png"></p>
<p>En parlant d'analyse, saurez-vous <a href="https://twitter.com/radareorg/status/580289536892252160">trouver</a> les améliorations sur l'architecture Dalvik ?</p>
<h2 id="changements-au-niveau-des-commandes">Changements au niveau des commandes</h2>
<p>Quelques commandes ont changé, non pas pour le plaisir d’embêter les utilisateurs, mais au contraire pour les rendre plus faciles à appréhender. Si vous remarquez un changement désagréable dans vos habitudes, n'hésitez pas à ouvrir un rapport de bug à ce sujet.</p>
<p>Il y a également eu quelques ajouts, surtout au niveau des sous-commandes de type <em>p</em>, saurez-vous les trouver ? ;)</p>
<h2 id="corrections-de-bugs">Corrections de bugs</h2>
<p>La suite de tests du projet devient de plus en plus importante, mais ça ne l’empêche pas de se <a href="https://travis-ci.org/radare/radare2">lancer</a> avec diligence sur chaque nouveau commit, évitant les régressions, auparavant si nombreuses. Le nombre de défauts remontés par coverity a été réduit de plus de 75%, abaissant leur nombre à moins de 150.</p>
<p>On peut également noter que des bugs remontés par <a href="http://www.shellcheck.net/">shellcheck</a>, <a href="http://cppcheck.sourceforge.net/">cppcheck</a>, <a href="http://valgrind.org/">valgrind</a> et compagnie ont également été exterminés !</p>
<h2 id="esil">ESIL</h2>
<p>Comment oublier <a href="https://github.com/radare/radare2/wiki/esil">ESIL</a>, le <a href="https://fr.wikipedia.org/wiki/Langage_interm%C3%A9diaire">langage de représentation intermédiaire</a> du projet.</p>
<p>Un contributeur féru de gameboy s'est acharné à en développer les spécifications, et à vouloir émuler complètement sa plateforme préférée avec; pendant que d'autres ont préféré se concentrer sur l'architecture x86, MIPS ou encore ARM. L'émulation et l'analyse avancée se rapprochent de plus en plus ! </p>
<p>Deux nouveau contributeurs (qui sont maintenant des étudiants GSoC sous l'ombrelle du projet) ont repectivement ajouté, pour leur première contribution, un transpileur ESIL vers <a href="http://blog.zynamics.com/2010/03/07/the-reil-language-part-i/">REIL</a>, ainsi qu'une implémentation d'ESIL pour l'architecture <a href="https://github.com/radare/radare2/blob/master/libr/anal/p/anal_8051.c">8051</a>. Par mal pour une première contribution.</p>
<h2 id="recherche">Recherche</h2>
<p>Le moteur de recherche de <a href="https://en.wikipedia.org/wiki/Return-oriented_programming">gadgets ROP</a> supporte maintenant les expressions régulières ! Il convient de noter que le caractère de séparation n'est plus <code>,</code> mais <code>;</code>, ce qui force l'utilisation de guillemets doubles autour de la commande, <code>;</code> étant normalement utilisé pour séparer les commandes dans radare2.</p>
<p>Certaines personnes utilisent radare2 au lieu de <a href="http://binwalk.org/">binwalk</a> pour lancer libmagic sur des fichiers de format inconnu. C'est pourquoi la commande <code>/m</code> a été optimisée en vitesse et efficacité.</p>
<h2 id="graphes-ascii">Graphes ASCII</h2>
<p>Radare2 supporte depuis quelques temps les graphes ASCII dans la console; avec cette nouvelle mouture, les couleurs font leur apparition :</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4665622f723267726170686c6f6f702e706e67/r2graphloop.png" alt="couleurs" title="Source : http://radare.today/content/images/2015/Feb/r2graphloop.png"></p>
<p>Elles sont bien évidement supportées dans les minigraphs :</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4665622f6d65682e706e67/meh.png" alt="Coloured minigraph" title="Source : http://radare.today/content/images/2015/Feb/meh.png"></p>
<p>Un nouveau rendu des arêtes de graphes a fait son apparition, et comme l'équipe aimait les deux, plutôt que de trancher, elles ont été intégrées ensemble, et il est possible de passer de l'une à l'autre avec la touche <code>e</code>.</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4665622f723267726170686d61696e2e706e67/r2graphmain.png" alt="Graph edge styles" title="Source : http://radare.today/content/images/2015/Feb/r2graphmain.png"></p>
<h2 id="enseignement">Enseignement</h2>
<p>Radare2 n'est pas uniquement utilisé pour faire de la retro-ingénierie sur des architectures étranges, ou écrire des exploits tordus, il sert également à enseigner l'informatique !</p>
<p>Radare2 vient avec une base de plus de 250 fortunes, et bien que les développeurs soient convaincus que toutes sont drôles, certaines sont de mauvais goût, voire franchement inappropriées. C'est pourquoi l'option <code>cfg.fortunetype</code> a été introduit. Il permet de filtrer les fortunes selon trois critères (qui peuvent se combiner) : <em>tips</em>, <em>nsfw</em> et <em>fun</em>. Elle devrait mettre fin aux moments de gêne et d’embarras durant les présentations ;)</p>
<p>Tout le monde ne peut pas se targuer d'être un expert dans d'obscures architectures exotiques, c'est pourquoi radare2 a une option <code>asm.pseudo</code>, permettant d'afficher les instructions dans une représentation plus évidente.</p>
<p>Il est également possible d'essayer le proto-pre-alpha décompilateur à l'aide de la commande <code>pdc</code></p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4170722f6465636f6d702e706e67/decomp.png" alt="decompiler" title="Source : http://radare.today/content/images/2015/Apr/decomp.png"></p>
<h2 id="débogueur">Débogueur</h2>
<h3 id="windbg">WinDBG</h3>
<p>Un contributeur patient a ajouté le support de WinDBG, le débogueur ring-0 de Windows. Ce qui signifie qu'il est maintenant non seulement possible de tritouiller des drivers avec radare2, mais également des machines virtuelles ! Imaginez, arrêter l’exécution d'une machine Windows, modifier des instructions, et reprendre l'execution pas-à-pas, depuis radare2…</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4665622f77696e6462672e6a7067/windbg.jpg" alt="WinDBG support" title="Source : http://radare.today/content/images/2015/Feb/windbg.jpg"></p>
<h3 id="tracing">Tracing</h3>
<p>Il est maintenant possible d'effectuer du tracing dans radare2, les instructions se décalant davantage à chaque utilisation :</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4170722f74726163696e672e706e67/tracing.png" alt="tracing" title="Source : http://radare.today/content/images/2015/Apr/tracing.png"></p>
<h2 id="web-interface">Web interface</h2>
<p>L'interface web de radare2 supporte maintenant:</p>
<ul>
<li>une minimap, à la IDA</li>
<li>des graphes interactifs</li>
<li>encore plus de menus contextuels</li>
<li>un support des projets</li>
<li>une vue hexadécimale</li>
<li>une édition de types primitifs</li>
<li>un renommage des variables</li>
<li>un support des debuggers</li>
<li>du tracing</li>
</ul><p>Le tout, à une vitesse folle !</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4665622f747261636567726170682e706e67/tracegraph.png" alt="tracegraph" title="Source : http://radare.today/content/images/2015/Feb/tracegraph.png"></p>
<h2 id="r2pipe">r2pipe</h2>
<p>Comme le développement de radare2 avance à bon train, au lieu d'utiliser des bindings traditionnels, la méthode recommandée pour appeler radare2 depuis un autre langage que le C est d'utiliser r2pipe, qui est grosso-modo un wrapper autour du shell.</p>
<p>En parlant de bindings, saviez-vous qu'en ajoutant <code>j</code> à chaque commande, radare2 retournera les informations sous forme de JSON ? Si vous vous amusez à parser les sorties de radare2 à la main au lieu d'utiliser le JSON, vous risquez de passer <em>un mauvais quart d'heure</em>.</p>
<p>Actuellement, nous supportons Python (2 et 3), Go et NodeJS; mais aussi D, C#, Java, Ruby, Perl, vala, NewList, Shellscript, Rust, …</p>
<p>Les packages pour r2pipe sont disponibles via <code>pip</code> pour Python, <code>gem</code> pour Ruby et <code>npm</code> pour Node.js.</p>
<p>Il s'agit d'une simple interface permettant d'envoyer des commandes r2 à travers un pipe, une connection tcp ou http, et de recevoir le résultat sous forme de string, ou comme évoqué précédemment, de JSON. Il est intéressant de noter qu'il est également possible d’appeler des scripts r2pipe directement depuis de shell de radare2, grâce à la commande <code>.</code>, un peu comme dans bash.</p>
<h2 id="misc">Misc</h2>
<p>La plupart des développeurs de radare2 utilisent <a href="http://emacs.rehab/">vim</a>, mais certains utilisent <a href="https://www.gnu.org/software/emacs/">emacs</a>, c'est pourquoi il est maintenant possible d'utiliser les raccourcis vim <strong>et</strong> emacs dans radare2!</p>
<p>Le projet possède (encore) un nouvel assembleur x86, plus efficace, plus court, et plus joli !</p>
<h3 id="build">Build</h3>
<p>Le temps de build a été significativement réduit (près de 30% sur Windows !); c'est pourquoi il ne faut maintenant plus que <a href="https://twitter.com/radareorg/status/588124975976095745">3m37s</a> pour compiler la version git de radare2 sur un <a href="http://www.ubuntu.com/phone/devices">UbuntuPhone</a>.</p>
<h3 id="tv">TV</h3>
<p>Saviez-vous que radare2 a été aperçu sur une chaîne de télévision nationale (espagnole) grâce à <a href="https://twitter.com/GabrielGonzalez">Gabriel Gonzalez</a> d'<a href="https://twitter.com/IOActive">IOActive</a>.</p>
<p>À propos, si vous utilisez radare2, n'hésitez pas à vous <a href="http://radare.today/who-uses-r2/">signaler</a> ;)</p>
<h2 id="captures-décran-bonus">Captures d'écran bonus</h2>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4665622f723267726170686c696e65732e706e67/r2graphlines.png" alt="Edge style comparison" title="Source : http://radare.today/content/images/2015/Feb/r2graphlines.png"><br>
Comparaison des deux styles de graphes</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4665622f72322d33442d6c6f676f2e706e67/r2-3D-logo.png" alt="R2 3D logo" title="Source : http://radare.today/content/images/2015/Feb/r2-3D-logo.png"><br>
Le logo de radare2, dans radare2, sous forme de stéréogramme</p>
<p><img src="//img.linuxfr.org/img/687474703a2f2f7261646172652e746f6461792f636f6e74656e742f696d616765732f323031352f4170722f6d617a64612e6a706567/mazda.jpeg" alt="Mazda" title="Source : http://radare.today/content/images/2015/Apr/mazda.jpeg"><br>
Évidement que radare2 tourne sur les Mazda. Oui, Mazda, les voitures.</p></div><div><a href="https://linuxfr.org/news/sortie-de-radare2-0-9-9-almost-there.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/105995/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/sortie-de-radare2-0-9-9-almost-there#comments">ouvrir dans le navigateur</a>
</p>
jvoisinpalm123tuiu polBenoît Sibaudpatrick_ghttps://linuxfr.org/nodes/105995/comments.atomtag:linuxfr.org,2005:News/347952013-11-12T11:41:10+01:002013-11-12T11:41:10+01:00Sortie de radare2 0.9.6Licence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<div><p>Si vous avez déjà utilisé GDB et objdump pour analyser des binaires dont vous n'aviez pas les sources, vous avez déjà dû pester. En effet, les outils GNU ne sont pas vraiment fait pour ça. Mais que faire d'autre ? Céder aux sirènes d'<a href="https://www.hex-rays.com/products/ida/index.shtml">IDA Pro</a> ? Que nenni, car voici la nouvelle version de radare2 !</p>
<p>Radare2, c'est un framework complet pour analyser des binaires :</p>
<ul>
<li>Multi-architectures : GNU/Linux, Android, *BSD, OSX, iPhoneOS, Windows{32,64} et Solaris</li>
<li>Multi-platformes : 8051, x86{16,32,64}, dalvik, avr, arc{4,compact}, arm, aarch64, c55x+, java, powerpc, sparc, mips, bf, pe{32,64}, te, [fat]mach0{32,64}, elf{32,64}, bios/uefi, dex and java classes </li>
<li>Scriptable en : Vala, Go, Python, Guile, Ruby, Perl, Lua, Java, JavaScript, sh, ..</li>
<li>Un éditeur hexadécimal</li>
<li>Un (dés)assembleur (récursif !), avec une coloration syntaxique</li>
<li>Un débogueur natif, mais il est possible d'utiliser GDB en backend, ou un débogueur brainfuck !</li>
<li>La possibilité d'afficher des données sous de multiples formats: int, float, désassemblé, timestamps, …</li>
<li>La possibilité de faire des recherches par patterns, des checksums, …</li>
<li>Un support des disques, processus, fichiers et flux.</li>
<li>Du <em>binary diffing</em> (comparaison de binaires), que ce soit sous forme <em>traditionnelle</em>, ou sous forme de graphes</li>
<li>Analyse de code, que ce soit niveau opcodes, blocks, ou fonctions</li>
<li>Une machine virtuelle basique, permettant d'émuler du code</li>
<li>Une interface web !</li>
</ul></div><ul><li>lien nᵒ 1 : <a title="http://rada.re" hreflang="en" href="https://linuxfr.org/redirect/88413">Site officiel</a></li><li>lien nᵒ 2 : <a title="http://rada.re/get/r2-096.html" hreflang="en" href="https://linuxfr.org/redirect/88414">Annonce originale</a></li><li>lien nᵒ 3 : <a title="https://github.com/radare/radare2" hreflang="en" href="https://linuxfr.org/redirect/88415">Dépôt git</a></li><li>lien nᵒ 4 : <a title="http://xvilka.me/r2-r2.png" hreflang="xx" href="https://linuxfr.org/redirect/88416">Capture d'écran</a></li></ul><div><h2 id="les-nouveautés">Les nouveautés</h2>
<h3 id="en-chiffres">En chiffres</h3>
<ul>
<li>1 développeur</li>
<li>8 mois</li>
<li>18 contributeurs</li>
<li>215 tests en plus</li>
<li>603 commits</li>
<li>33272 lignes de code en plus</li>
</ul><h3 id="en-fonctionnalités">En fonctionnalités:</h3>
<ul>
<li>De nouvelles architectures supportées: ARM aarch64, TI c55x+, 8051, Javascript (emscripten), ARCcompact</li>
<li>De multiples améliorations sur les assembleurs/désassembleurs pour ARM, ARC, X86, Dalvik, Java (dont la v7) et Brainfuck.</li>
<li>Support de l'ASLR</li>
<li>Les ROM PC BIOS et UEFI sont maintenant correctement reconnues</li>
<li>Il est possible de définir des structures et des énumérations en C (avec la commande "t"), et des les importer dans radare2. Mieux encore, il sera bientôt possible de faire de même pour les fonctions et des structures conditionnelles.</li>
<li>De nouveaux bindings: support des ctypes Python, de Java JNI, et même de D.</li>
<li>Un support complet de l'UTF8, qui apporte une plus belle interface.</li>
<li>Plus de raccourcis à la vim !</li>
<li>Les signaux peuvent maintenant être capturés et passés (ou non) au processus débogué.</li>
<li>Il est maintenant possible de déboguer des binaires 32 bits sur du x86-64</li>
<li>Pas mal de restructurations internes.</li>
<li>Un serveur web intégré est maintenant présent, ce qui permet de profiter plus simplement de l'interface web.</li>
<li>La commande "pxa" permet d'afficher d'annoter/colorier/commenter/définir des structures dans un hexdump.</li>
<li>Beaucoup de bugs ont été corrigés.</li>
</ul><h3 id="les-tests-cest-chouette">Les tests, c'est chouette</h3>
<p>Il s'agit de la première version à faire un usage intensif de la suite de tests, ce qui va permettre d'éviter bon nombre de régressions. D'ailleurs, vous êtes encouragés à fournir un test avec vos rapports de bugs :)</p>
<h2 id="support">Support</h2>
<p>Radare2 étant développé rapidement, il n'a pour l'instant qu'une maigre documentation, mais elle commence doucement à prendre forme, et des tutoriels sont publiés de temps en temps. N'hésitez pas à venir sur #radare (sur freenode) pour poser des questions si vous avez du mal.</p></div><div><a href="https://linuxfr.org/news/sortie-de-radare2-0-9-6.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/100309/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/sortie-de-radare2-0-9-6#comments">ouvrir dans le navigateur</a>
</p>
jvoisinBenoît Sibaudtuiu polFlorent Zaraclaudexhttps://linuxfr.org/nodes/100309/comments.atomtag:linuxfr.org,2005:News/345082013-08-19T18:03:53+02:002013-08-19T18:03:53+02:00Les journaux LinuxFr.org les mieux notés de l'été 2013Licence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<div><p>LinuxFr.org propose des dépêches et articles, soumis par tout un chacun, puis revus et corrigés par l'équipe de modération avant publication. C'est la partie la plus visible de LinuxFr.org, ce sont les dépêches qui sont le plus lues et suivies, sur le site, via Atom/RSS, ou bien via partage par messagerie instantanée, par courriel, ou encore via médias sociaux.</p>
<p>Ce que l’on sait moins, c’est que LinuxFr.org vous propose également à tous de tenir vos propres articles directement publiables, sans validation <em>a priori</em> des modérateurs. Ceux-ci s'appellent des journaux. Voici un florilège d'un dizaine de ces journaux parmi les mieux notés par les utilisateurs… qui notent. Lumière sur ceux du 1<sup>er</sup> juillet au 15 août, abusivement appelé été ici.</p>
<ul>
<li>
<a href="//linuxfr.org/users/octane/journaux/hs-48h-chez-un-editeur-logiciel-en-2013">[HS] 48h chez un éditeur logiciel en 2013</a> par octane ; </li>
<li>
<a href="//linuxfr.org/users/mupuf/journaux/retro-ingenierie-de-la-gestion-d-energie-sur-les-cartes-graphiques-nvidia">Rétro-ingénierie de la gestion d'énergie sur les cartes graphiques NVIDIA</a> par Martin Peres ;</li>
<li>
<a href="//linuxfr.org/users/Gof/journaux/comment-fonctionne-bitcoin">Comment fonctionne Bitcoin</a> par Gof ;</li>
<li>
<a href="//linuxfr.org/users/GuieA_7/journaux/sortie-de-rust-0-7">Sortie de Rust 0.7</a> par GuieA_7 ;</li>
<li>
<a href="//linuxfr.org/users/palkeo/journaux/un-firefox-qui-respecte-votre-vie-privee">Un Firefox qui respecte votre vie privée</a> par palkeo ; </li>
<li>
<a href="//linuxfr.org/users/palkeo/journaux/mon-projet-feedspot">Mon projet : Feedspot</a> par palkeo ; </li>
<li>
<a href="//linuxfr.org/users/erdnaxeli/journaux/google-veut-reduire-la-latence-sur-internet-avec-quic">Google veut réduire la latence sur Internet avec QUIC</a> par erdnaxeli ;</li>
<li>
<a href="//linuxfr.org/users/dtschump/journaux/quelques-nouveaux-filtres-images-dans-g-mic">Quelques nouveaux filtres images dans G'MIC.</a> par David Tschumperlé ;</li>
<li>
<a href="//linuxfr.org/users/Kekun/journaux/lxde-razor-qt-et-qt-et-gtk">LXDE, Razor-qt et Qt (et GTK+)</a> par Kekun ;</li>
<li>
<a href="//linuxfr.org/users/fredx/journaux/ce-qu-on-demande-a-un-developpeur-aujourd-hui">Ce qu'on demande à un développeur aujourd'hui</a> par Pierre Tramonson ;</li>
<li>
<a href="//linuxfr.org/users/Taurre/journaux/oui-mais-si-on-oublie-la-reponse-a-sa-question-secrete">Oui, mais si on oublie la réponse à sa question secrète ?</a> par Taurre ;</li>
<li>
<a href="//linuxfr.org/users/fork_bomb--2/journaux/mozilla-org-ne-respecte-pas-l-option-do-not-track-de-firefox">mozilla.org ne respecte pas l'option "Do Not Track" de Firefox.</a> par fork_bomb ;</li>
<li>
<a href="//linuxfr.org/users/yeKcim/journaux/reseau-domestique-interactions-entre-differents-pc-et-telephones">Réseau domestique : Interactions entre différents PC et téléphones</a> par yeKcim ;</li>
<li>
<a href="//linuxfr.org/users/MrSpackMan/journaux/slackware-a-vingt-ans">Slackware a vingt ans</a> par MrSpackMan ;</li>
<li>
<a href="//linuxfr.org/users/patrick_g/journaux/le-tourbillon-mysterieux-des-mondiaux-de-natation">Le tourbillon mystérieux des mondiaux de natation</a> par patrick_g.</li>
</ul></div><ul><li>lien nᵒ 1 : <a title="http://linuxfr.org/redaction" hreflang="fr" href="https://linuxfr.org/redirect/87385">Participez à l'écriture d'un article</a></li><li>lien nᵒ 2 : <a title="http://linuxfr.org/journaux/nouveau" hreflang="fr" href="https://linuxfr.org/redirect/87386">Écrivez votre journal</a></li><li>lien nᵒ 3 : <a title="http://linuxfr.org/news/nouveau" hreflang="fr" href="https://linuxfr.org/redirect/87387">Proposez une dépêche</a></li></ul><div></div><div><a href="https://linuxfr.org/news/les-journaux-linuxfr-org-les-mieux-notes-de-l-ete-2013.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/99395/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/les-journaux-linuxfr-org-les-mieux-notes-de-l-ete-2013#comments">ouvrir dans le navigateur</a>
</p>
Benoît Sibaudhttps://linuxfr.org/nodes/99395/comments.atomtag:linuxfr.org,2005:Diary/328262012-07-12T22:14:35+02:002012-07-13T00:47:39+02:00Rétro ingénierie EpsonLicence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<h2 id="sommaire">Sommaire</h2>
<ul><li>
<a href="#toc_0">Reverse Engineering</a>
</li>
<li>
<a href="#toc_1">Jour 0</a>
</li>
<li>
<a href="#toc_2">Conclusion</a>
</li>
<li>
<a href="#toc_3">Post étude</a>
<ul><li>
<a href="#toc_4"></a>
</li>
</ul></li>
</ul><p>Bonjour à tous !</p>
<p>Cette année je me suis amusé à faire de la rétro ingénierie, comme je ne savais pas comment on faisait ,je me suis dit que ça serait une occasion de découvrir. Du coup, j'ai noté pas mal de trucs et je fais partager mes notes. J'espère que ça pourra intéresser des gens.<br />
Le sujet d'étude : un vidéo projecteur EPSON, il utilise un protocole réseau spécial pour déporter l'affichage (comme ça pas besoin de câble VGA). Le protocole de déport d'affichage en lui même, c'est du RFB, mais tout le protocole de découverte et de connexion est propre à EPSON.</p>
<p>Voilà, bonne lecture pour ceux qui sont intéressés. (note, je n'ai fait aucune modifications sur ce que j'ai écrit il y a pas mal de temps, pour garder un peu l'esprit du truc, mais maintenant, le début me paraît un peu stupide maintenant, mais j'en savais moins que maintenant sur le protocole). C'est pas très structuré du coup, désolé.</p>
<h2 id="toc_0">Reverse Engineering</h2>
<p>Bon, demain je commence le travail sur un projecteur Epson afin d'essayer d'analyser le protocole utilisé et ainsi, pouvoir créer un logiciel permettant de s'y connecter.</p>
<h2 id="toc_1">Jour 0</h2>
<p>Bon, on commence ! Installation d'une machine virtuelle Windows XP. Elle accueillera le Epson NSC qui permet de se connecter au vidéo projecteur. Après cela, installation des VirtualBox tools, de Firefox et surtout de Wireshark, qui risque de grandement m'aider pour analyser les paquets qui passent.</p>
<p>Préparons un peu le terrain. Je lance le logiciel Epson et sélectionne configuration avancée. Là, il me dit qu'il recherche d'éventuels vidéoprojecteurs sur le réseau. Pas de bol pour lui, il n'y en a pas. Par contre, on peut voir grâce à Wireshark qu'il a bien essayé de contacter un vidéoprojecteur. Le résultat : 21 segments UDP vers 255.255.255.255 sur le port 3620 (après vérification, l'IANA confirme qu'il s'agit du port utilisé par EPSON pour leurs vidéoprojecteur). Le port source change à chaque fois en s'incrémentant. Tous les segments contiennent le même contenu : la chaîne EEMP0100 suivie de l'adresse IP du client et enfin un SOH (0x01) suivi d'une suite de caractères nuls (surement des caractères de bourrage).</p>
<p>Lorsqu'on lance une recherche manuelle sur un vidéoprojecteur, avec l'IP de ma machine, des segments UDP sont envoyés alternativement en broadcast et en unicast (vers l'IP que j'ai donnée). Les segments envoyés en unicast diffèrent des segments envoyés en broadcast puisque le dernier caractère avant la suite de caractères nuls est un STX (0x02). Ce mot permet certainement au vidéoprojecteur de savoir si le segment reçu lui est destiné ou si il a été envoyé en broadcast. En plus des segments UDP, des requêtes de connexion TCP sont envoyées (SYN) sur l'IP de ma machine, port 3620.<br />
En gros, un vidéoprojecteur, ça écoute en TCP et en UDP sur le port 3620. <br />
Par contre, en utilisant NETSTAT, je remarque que le logiciel de connexion semble n'écouter aucun port … Soit je ne sais pas me servir de netstat sous Windows, soit il y a quelque chose qui m'échappe : comment un vidéoprojecteur peut il répondre pour signaler sa présence ? </p>
<p>Ah, tiens, en y regardant d'un peu plus près, le logiciel de connexion écoute le port 3620 en UDP lorsque l'on effectue une recherche de vidéoprojecteur. C'est par ce biais qu'un vidéoprojecteur peut signaler sa présence. L'écoute s'arrête en même temps que la recherche, c'est pour cela que je n'ai pas vu ce comportement plus tôt. Petit mémo : netstat sous windows : -a pour connaître les écoutes, -b pour savoir à quel binaire elles sont associées et -n pour avoir les ports en nombre (donc sans avoir le nom du service associé) (netstat -n -b -a).</p>
<p>Maintenant, on va essayer de le rendre un peu plus bavard ce logiciel : créons un petit script Python qui va accepter les connexions TCP.<br />
Voilà, la connexion TCP s'effectue sans encombre, ensuite, c'est le client qui commence à parler, il envoie les mêmes données que tout à l'heure, sauf que cette fois ci c'est dans une connexion TCP. Je suppose que l'UDP ne sert donc qu'à effectuer des broadcasts et qu'on peut l'ignorer pour se concentrer sur cette connexion TCP.</p>
<p>Bon, voilà, je ne vois pas ce que je pourrais faire de plus en n'analysant que le trafic réseau (en touchant un peu au binaire, je pourrais essayer de déclencher certaines fonctions et voir à ce à quoi je pourrais m'attendre (ex : quel message est envoyé lorsque je clique sur se connecter (bouton grisé lorsqu'il n'y a pas de vidéo projecteur), je n'ai pas les compétences pour ça et je préfère me cantonner aux analyses réseaux). Allez, une dernière chose : à tout hasard, j'essaie de renvoyer le segment de découverte envoyé par le client … Bon, ok, il coupe la connexion (et ce même si je modifie l'IP), ça rigole pas.</p>
<p>Ah, enfin, détail important : c'est du little endian.</p>
<p>Allez, je vais m'arrêter là en commençant à écrire le client en insérant la gestion du segment de découverte. Petite note pour Epson afin de finir : dans votre protocole, vous envoyez l'adresse IP du client au serveur… Vous avez déjà entendu parler du modèle OSI ? ;-) Heureusement que j'ai trouvé cette information par hasard tout à l'heure sur le forum d'Ubuntu-fr, sinon je serais encore à plancher dessus !</p>
<p>[…]<br />
Youpee, j'ai enfin accès à un vidéo projecteur ! Bon, ne traînons pas, voyons immédiatement ce qu'il répond à notre cher programme. Ok, alors déja ça commence pareil, mais avec un 3. Ça doit être le code de réponse. Ah, et aussi, après, il y a beaucoup plus de données. Déja, il y a 3 caractères nuls, suivis d'un nombre : c'est certainement un entier codé sur 32bits : 74, c'est peut être un numéro de version du protocole, je ne sais pas. <br />
Plus loin, on voit une chaîne correspondant au nom du vidéoprojecteur. Tiens, du coup, le 74, c'est peut être simplement une longueur ! Après le 74, il y a 77 octets dans le message … Maintenant, je vais faire une hypothèse. le "type" du message (ici à 3) trouble l'alignement des bits. On y ajoute donc 3 octets vides de bourrage. <br />
Après quoi on met la taille du segment (74) puis encore 3 octets de bourrage, et là, après ces 3 octets, on retrouve bien une taille de 74 octets ! Attention, il ne s'agit bien sûr que d'une hypothèse. Mais ça parait crédible. De plus, lorsque le client envoie un message au vidéoprojecteur, il envoie le code, suivi de 3 \x00 (bits de bourrage pour être aligné sur 32bits) puis une suite de 4 \x00. Donc une longueur de message de 0, ce qui est vrai puisqu'après cet entête, il n'y a plus rien. </p>
<p>En fait, je crois que j'ai découvert non pas un type de segment, mais je pense que j'ai plutôt percé le secret de l'entête des segments. <br />
Le plus dur maintenant : savoir à quoi correspondent les codes. Bon, j'espère que je ne me trompe pas. Du coup, le code et la taille sont codés sur 32bits (mais c'est du little endian).</p>
<p>Bon, maintenant, réfléchissons un peu. Qu'est ce que le vidéo projecteur pourrait envoyer au client ? Bon, déjà, l'état : en veille, actif, locké… Ensuite, son nom, mais on l'a déjà vu. Après, dans pleins de protocoles, on envoie la version du protocole pour que les entités se mettent d'accord entre elles. Mais je serais bien tenté, après réflexion, de dire qu'ici, cette vérification n'est pas faite. En effet, lorsque l'on utilise une trop vieille version du logiciel, on apprend que la version est trop vieille seulement à la connexion. <br />
Bon, il y a une suite de nombres pas très clair, ils n'ont aucune signification pour moi … On verra plus tard ! </p>
<p>Là, on va essayer de se connecter pour voir le changement d'état sur un autre ordinateur : on verra ainsi qu'est ce qui change. Bon, mon autre VM ne fonctionne pas, tant pis, on reviendra là-dessus plus tard. Essayons de voir un peu ce qu'il passe lors de la connexion au vidéoprojecteur. </p>
<p>Le client envoie un segment UDP au vidéo projecteur : le code c'est 4. <br />
Plein de nombres dans ce message de 74 octets, je ne reconnais rien, il y a une suite de nombre (ascii), mais je ne vois pas ce que cela peut représenter (ni même si ça a bel et bien un sens). Par contre, je vois une adresse IP un peu après. Pas la mienne, ni celle du vidéo projecteur. Par contre, c'est l'IP du routeur de ma route par défaut. Je me demande bien pourquoi le vidéo projecteur a besoin de ça … et de toute façon, il la connaît déjà puisqu'il obtient son IP via le DHCP. <br />
Peut être que c'est une manière de vérifier que l'on soit bien sur le même réseau ? Bon, bah du coup, il m'a suffit de relire le segment pour voir que juste avant la passerelle par défaut, j'envoie le netmask du réseau ! Merci au réseau de l'école, sans le netmask un peu bizarre (255.255.252.0), je crois que j'aurais vraiment eu du mal à le trouver, même si il était facile à deviner. </p>
<p>On continue la lecture et on voit que le message se termine par l'IP du vidéoprojecteur. Ah, encore dans le message, je retrouve une suite de 4 nombres qui m'avaient intrigué. Je ne sais toujours pas ce que c'est, peut être un identifiant du vidéo projecteur ? En tous cas, ça ne doit pas coder d'information dans les messages de code 3 (ça aurait pu être par exemple l'état du vidéo projecteur). <br />
Après l'envoi de ce segment de code 4, surprise : le vidéoprojecteur se connecte en TCP sur le port 3620 du client. Le vidéoprojecteur commence à parler avec un segment de code 5. On y trouve beaucoup de \x00, le nom du vidéoprojecteur et surtout encore la même suite de nombre.<br />
Réponse ensuite du client, code 0A et message vide. </p>
<p>Là, le client se connecte en TCP sur le port 3621 et il envoie un message à l'entête EPRD0600. Tiens, une nouvelle entête ? Elle est suivie de l'IP du client (bon, on commence à avoir l'habitude) et de plusieurs 0. Est-ce le code 0 ou est-ce que la notion de code a disparu ? Bon, en tous cas, le message se termine par une séquence de 3 nombres que je n'ai pas croisé auparavant.<br />
Après cela, le client envoie des segments contenant une tonne de données. Certainement l'image à afficher. J'avais entendu dire il y a quelques temps que le protocole utilisé, c'est du VNC. J'espère que c'est vrai ! Je vais m'arrêter là pour aujourd'hui, j'analyserai plus en détail cette conversation puisqu'elle est la plus intéressante. Le but, ça va être d'essayer de me raccrocher au protocole VNC, dès que j'aurais réussi, la suite sera beaucoup plus simple.</p>
<p>Par contre, je remarque quand même que les deux connexion subsistent ! Celle sur le port 3620 et celle sur le 3621. Sur la connexion du 3620, le même segment est envoyé régulièrement (0A). Je suppose que cette connexion sert à commander la session. Par exemple, lorsque je déconnecte le client, un segment code 6 est envoyé, et un code 7 est répondu. Mon hypothèse est que l'image est transférée sur la connexion du port 3621, et le reste sur le 3620, enfin bon, on verra bien. En attendant, je ramène chez moi de belles captures réseau.</p>
<p>[…]<br />
Bon, aujourd'hui, deux points : j'essaie de me documenter sur le protocole RFB (VNC) pour essayer de me raccrocher à la communication du vidéoprojecteur, bon, ça, je suis pas sûr d'y arriver, il faut que j'en sache plus. Je vais donc essayer de programmer mon propre vidéo projecteur. Avec les informations que j'ai, je devrais pouvoir faire croire au programme qu'il communique au vidéoprojecteur. Avec ça, je pourrais travailler même sans être en présence d'un vidéoprojecteur. Ça serait bien puisque c'est le dernier jour où j'ai accès au vidéo projecteur avant la semaine prochaine. </p>
<p>Première étape, décortiquer le header. Bon, en regardant de plus près le segment de réponse à la découverte, j'ai enfin vu la différence entre vidéo projecteur libre et vidéo projecteur pris. J'essaierais plus tard de changer ce nombre pour voir un peu toutes les possibilités. </p>
<p>Ah, sinon la chaîne qui code le nom du vidéo projecteur fait 32 octets. En gros, le nom puis du bourrage à \x00. Après le nombre qui code l'état, un nombre dont je ne connais pas la signification (pareil, je vais essayer différentes valeurs) et une suite de 0 avec un code bizarre au milieu (celui dont on parlait hier, qui se retrouvait plusieurs fois). Bon, autant je pensais être plutôt bien avancé, autant lorsque je réponds au client comme un vidéo projecteur, il ignore mes messages. Pourtant, le contenu est identique. Les seuls différences vont être au niveau des IPs. Et si la chaîne bizarre était une forme de hash ? Ça me paraît vraiment bizarre sachant que cette chaine est présente dans plusieurs messages différents, mais c'est une hypothèse à étudier. </p>
<p>Bon, j'ai comparé plus en détail la différence entre les paquets. Le message transmis est identique, par contre, je remarque que le vidéoprojecteur ne renvoie que des segment UDP qui ont pour port source 1024. On va essayer ça, après tout on a rien à perdre. </p>
<p>Je viens d'essayer. Soit c'est pas ça, soit c'est pas que ça. J'avance toujours pas, j'ai juste fait un petit script qui fait une découverte sur l'IP du vidéoprojecteur, il me répond exactement la même chose qu'au logiciel. C'est bon signe, là mon problème se situe au niveau de l'émulation d'un vidéoprojecteur, ce n'est pas mon but, mais si j'y arrivais, ça serait un outil très puissant pour continuer l'analyse du protocole. Je patauge… </p>
<p>Mmmh, bon, regardons un peu, en supposant que le code de statut soit codé sur un octet, suivi par un octet de bourrage, on a un nombre inconnu (qui est 4) juste après, suivi de 3 octets de bourrage, puis 8 octets de bourrage, la suite de 4 nombres inconnus, puis 16 octets vides. </p>
<p>Au total, ça fait une chaine de 32 octets, c'est plutôt rond. Du coup, le nombre code certainement la longueur de cette suite. Dommage, ça ne me dit toujours pas ce que c'est ! Je vais aller jeter un oeil aux autres segments qui contiennent cette même chaîne. Bon, je m'arrête là pour aujourd'hui. La journée ne fut pas productive.</p>
<p>[…]<br />
Ça y est, je n'ai plus de vidéoprojecteur et mon émulateur ne fonctionne pas. Déjà, je vais essayer d'utiliser un outil un peu plus sophistiqué que netstat pour savoir à quel moment il attend des messages. Le comportement est assez étrange, toutes les ~3 secondes, un socket UDP est créé et une connexion TCP (ou 2 ?) est envoyée. <br />
Bon je vais regarder d'un peu plus près les enregistrements effectués avec un vidéoprojecteur. En gros, une connexion TCP est envoyée (SYN), un refus est répondu (RST), après le message de découverte en UDP est envoyé par le logiciel, puis une réponse est reçue du vidéoprojecteur. </p>
<p>Comme je ne vois toujours pas ce qui peut changer, on va changer de tactique, essayons d'initer cette communication en TCP ! Bon, il m'envoie un message de découverte mais n'accepte toujours pas ma réponse. Tiens, je vais essayer une approche très stupide : le brute force. Je ne sais pas ce qu'est ce nombre de 32 bits qui, me semble il, est indispensable pour se faire passer pour un vidéo projecteur. Je vais donc essayer d'envoyer des réponses en essayant n'importe quel nombre. <br />
Bon, un petit soucis : 2**32, ça fait quand même plus de 4 milliards de possibilités. Ah, par contre on peut pas envoyer mille requêtes par secondes sans faire freezer la VM, il faut donc y aller doucement. En plus, on ne peut pas envoyer les informations en permanence puisque le logiciel n'attend des réponses que de temps en temps. Ça va être long… </p>
<p>Pendant ce temps là je vais passer à autre chose : étudions ce qu'il se passe sur une connexion établie avec un vidéo projecteur, je vais pouvoir ressortir mes anciennes captures. </p>
<p>Dans une connexion faite sur le port 3621 (là où doivent passer les captures d'écran), je vois écrit "JFIF" ! Après une petite recherche sur google, il s'agit de l'acronyme pour Jpeg File Interchange Format, on a une belle piste là ! Il faut que je me renseigne sur ce format, mais avant, je me pose une question : ce message est-il une sorte de configuration de début de connexion, pour indiquer le format de fichier qu'on va utiliser durant tout l'entretien, ou est-ce que le logiciel envoie juste des images au format JFIF en permanence au vidéo projecteur pour qu'il les affiche ? </p>
<p>Une petite recherche dans le fichier de capture m'indique que la chaîne de caractère "JFIF" se retrouve 17 fois, bon, là j'en suis à supposer que le logiciel envoie bel et bien des fichiers JFIF au vidéoprojecteur. Maintenant, on va chercher des informations sur ce format. </p>
<p>Pendant ce temps là, je désespère à l'idée de réussir mon brute-force, donc je coupe tout ça. De toute façon, si je n'ai pas à travailler sur le format des images, je n'ai pas vraiment besoin d'émuler un vidéoprojecteur. Dommage, j'aurais bien aimé être assez exhaustif dans cette étude, mais n'oublions pas le but premier : réussir à afficher sur le vidéo projecteur, et pour ce faire, pour l'instant, rien n'indique que j'ai besoin de comprendre comment est généré ce nombre mystère. </p>
<p>Je ne vais pas vous recopier la norme JFIF, sachez juste qu'elle tient sur 9 pages et qu'elle donne du baume au coeur : format très léger et simple et portable partout (donc parfait pour le vidéoprojecteur), ce format a une entête qui se termine par "JFIF\0", oh, quelle coïncidence :). Oui, je sais, je fanfaronne, mais c'est une super découverte qu'on a là : je connais le format d'échange d'image utilisé (la partie qui aurait pu être la plus complexe à comprendre). </p>
<p>Un peu avant la petite chaine on voit un SOI : Start Of Image (c'est un nombre codé sur 16bits spécifique au format JPEG). Petite lecture de la spécification : la version de JFIF utilisée est la 1.01, la version actuelle est la 1.02. Même si les différences sont certainement minimes, dans le doute, je vais quand même récupérer les spécifications de l'ancienne version. Par contre, les deux premiers octets d'un fichier JPEG, c'est un SOI : Start Of Image (0xFFD8). Il y a 20 octets avant ce marqueur. Ceux ci sont certainement spécifiques au protocole du vidéoprojecteur. </p>
<p>Première chose à faire : les comparer, eh oui, si ils sont avant chaque image, alors on en a plusieurs, comme ça, on verra si quelque chose change dans ce header, et on verra même quoi… sans forcément comprendre pourquoi. <br />
Tiens, on dirait que ça change, c'est pas très bon signe. </p>
<p>En regardant un peu la conversation dans sa globalité, je remarque, de temps à autre, des messages "traditionnels" : un message de 8 octets (EPRD0600), suivie de l'IP source, le type du message est 0, et est suivi par un nombre de 32bits… Argh, que peut bien être ce nombre ? Mince, en plus il change à chaque fois et les valeurs semblent totalement aléatoires, j'espère que ce n'est pas une protection contre ce que j'essaie de faire : un nombre dont seul le logiciel et le vidéoprojecteur ont le secret pour le générer. En y regardant de plus près, ces nombres ne semble pas si aléatoires que ça. Leurs valeurs sont souvent plutôt basses (quelques centaines, milliers tout au plus).<br />
Du coup, j'émets l'hypothèse qu'il s'agit d'une taille : plus précisément la taille des données envoyées entre chaque messages "traditionnels" (j'aime ce terme). En gros, le logiciel envoie un message (type = 0) pour dire qu'il envoie X octets. Petit détail : et si on vérifiait ? … Oui, c'est bien ça ! Ce nombre en hexadécimal correspond parfaitement à la taille en octet des données transporté par le segment TCP qui suit. </p>
<p>Par curiosité, on va voir si ces fichiers sont bien des fichiers jpegs utilisable avec n'importe quel logiciel (donc certainement exportable avec n'importe quelle bibliothèque). J'ouvre donc un éditeur hexadécimal et récupère une image dans le flux. </p>
<p>Une image JPEG commence par un SOI (Sart Of Image, FF D8) et fini par un EOI (End Of Image, FF D9), il me suffit donc de coller tout ce qui se trouve entre ces deux valeurs spécifiques dans un fichier. Mon lecteur d'image préféré ouvre le fichier fraîchement crée sans aucun problème. Bon, mes remarques sur l'image que j'ai en face de moi : elle a une résolution de 256x256 pixels, et une bonne partie de l'image est noire (le reste est bel et bien un morceau d'écran). Ça m'aurait simplifié la tâche si le logiciel envoyait simplement une image de l'écran dans sa globalité. Donc là, quand il a l'image, le vidéoprojecteur doit savoir où placer l'image, et quel morceau de l'image doit être utilisé (ça n'a pas de sens d'afficher la partie noire qui occuppe la moitié de la largeur de l'image). </p>
<p>Ces informations sont elles incluses dans les messages échangés ou convenues en avance ? Exemple : toutes les images font 256x256, elles sont envoyées séquentiellement de gauche à droite et de haut en bas et la partie noire correspond à un remplissage superflu pour pallier au fait que la résolution de l'écran n'est pas un multiple de 256. Ça sera plus simple d'émettre des hypothèses en voyant les autres images qui sont envoyées. Hop, voilà, j'ai fait un petit script python pour enregistrer tout ce qui se trouve entre un SOI et un EOI dans un fichier, numéroté dans l'ordre d'envoi. </p>
<p>Les premières images font 256 par 256 pixels et suivent séquentiellement l'écran de gauche à droite, ensuite, j'ai une suite d'images illisibles (étrange) et quelques petites images, très petites, avec pour beaucoup le curseur de ma souris dessus. Ah, on dirait que le logiciel peut seulement envoyer les morceaux d'écran qui ont changé. Il faut donc que je trouve comment préciser les coordonnées où l'on affiche l'image. </p>
<p>Ah, du coup, c'est peut être là que se trouve la ressemblance avec le protocole VNC (parce que jusqu'à maintenant je n'ai pas vu le rapport, c'est certainement une fausse information, mais je vais regarder comment le protocole VNC se débrouille sur ce point) … Tiens, je viens de voir qu'en fait, sur la connexion 3621, c'est du big Endian qui est utilisé … C'est tellement naturel qu'on ne s'en aperçoit pas en fait. Mais du coup, ça peut servir ! C'est très certainement parce que le format JFIF est au format big Endian. Oh, ça c'est intéressant, on dirait qu'on ne m'avait pas menti !</p>
<p>Si je regarde l'instruction FrameBufferUpdate du protocole RFB, je peux percevoir une parfaite similitude entre ce qu'il y a avant le SOI et le protocole. Ça m'explique ce que signifie les premiers octets du message, je sais désormais comment sont affichées les images et comment ça marche (le logiciel envoie d'abord 4 octets pour indiquer, entre autre, le nombre de rectangles dans la liste, ensuite, pour chaque rectangle, il envoie sa position et sa taille, correspondant pour la première image à 0x0 et 256x256 ce qui est on ne peut plus cohérent. </p>
<p>Ensuite, pour chaque rectangle, un type d'encodage est précisé, ici, c'est le n°7, son nom, c'est "tight". Il n'est pas abordé dans mon document, je vais donc faire quelques recherches sur cet encodage qui m'en dira certainement plus sur les 4 octets situés juste avant le SOI, eh oui, je ne sais toujours pas ce que c'est. Cet encodage permet la compression par Jpeg, c'est ce qu'indique le protocole d'après le premier octet inconnu, je suis sur la bonne voie. <br />
Les trois octets qui suivent représentent la taille du JPEG en octets. Voilà, la fonction permettant de convertir la taille du JPEG en "compact representation" est codée, il fallait que je le fasse tant que j'ai encore en tête la manière dont ça s'utilise. </p>
<p>Maintenant, on va pouvoir tester si elle marche ! J'ai aussi fait la fonction inverse que je vais m'empresser de tester avec des valeurs prises dans le fichiers de captures. Dans le fichier de capture, je sélectionne le JPEG grâce à mon éditeur hexadécimal (du SOI au EOI), 354 octets ! Voyons ce que donne la longueur convertie avec ma petite fonction … 852. Argh, bon, je vérifie la fonction… Non pourtant j'obtiens bien le bon résultat. </p>
<p>Je vais donc regarder ce que ça donne si je lis 852 octets après le début de l'image et … je m'aperçoit ainsi que mon éditeur hexadécimal m'a donné la longueur en hexadécimal, ce qui correspond bien à 852 en décimal, me voilà soulagé, ma fonction marche ! J'ai bien avancé, il faudrait que je me mette à écrire le protocole au propre.</p>
<p>[…]</p>
<p>Bon sang mais c'est bien sûr ! <br />
Je discutais un peu de ce que je faisais avec un mec de ma classe, et c'est au moment où je lui montrais un exemple de segment envoyé par le vidéoprojecteur lors de la phase de découverte, juste après lui avoir parlé de cette suite inconnue de 4 octets, que mes yeux se sont placés au bon endroit : l'adresse mac du vidéoprojecteur. Eh oui ! Le vidéoprojecteur envoie son adresse mac ! </p>
<p>Alors si c'est ça, je vais pouvoir essayer de me faire passer pour un vidéoprojecteur ! Vous n'allez pas me croire, mais j'avais bien pensé à un moment qu'il pouvait s'agir de l'adresse mac, je vous assure, mais à ce moment là je ne devais pas avoir d'ordinateur sous la main pour vérifier et puis, avec du recul, je pensais qu'un logiciel ne devait pas avoir accès à cette information. </p>
<p>J'avais tort ! <br />
Ma conclusion ? <br />
Ne jamais se dire qu'une idée est mauvaise : il faut toujours vérifier ! <br />
C'est pas parce que c'est mauvais que eux ne l'ont pas fait. <br />
Bref, il faut toujours explorer toutes les pistes, même les plus farfelues. Allez, c'est pas grave, maintenant que j'ai cette information, je vais dans un premier temps essayer mon logiciel permettant de se faire passer pour un vidéoprojecteur </p>
<p>[…]</p>
<p>Bon, ça avance, j'ai un petit script python qui fait une requête de connexion avec le vidéoprojecteur. Maintenant j'ai plus qu'à communiquer avec (cette fois ci tout se passe en TCP). Mais cette connexion ne me permet pas de faire grand chose. C'est juste une étape pour se connecter réellement. À ce niveau là, le vidéo projecteur cherche à se connecter au client (il faut donc binder sur le port 3620 en attendant la connexion). </p>
<p>Le premier à parler, c'est le vidéoprojecteur. Mais il ne dit pas grand chose, juste quelques rappels : il précise son nom, etc … J'ai pas vu d'information nouvelle. Ce canal a l'air d'être ouvert en permanence. Je ne sais pas à quoi il sert mais peut être qu'il est utile pour l'utilisation de la télécommande. On verra ça plus tard. Maintenant que ce canal est ouvert, je vais voir pour ouvrir le canal qui nous intéresse pour le moment : celui qui nous permet d'envoyer les images que le vidéo projecteur va afficher. Peut être que le canal coté projecteur (je vais l'appeler comme ça parce que c'est lui qui initialise la connexion) permet aussi de maintenir la connexion (avec un keep alive -like (type 0x0A ?). <br />
Dans le canal client, seul le client parle au vidéo projecteur, aucune réponse à traiter de la part du vidéoprojecteur. Ça, c'est cool. Bon, il faut que je fasse un proof of concept pour voir si je peux faire cette connexion et envoyer des ordres d'affichage.</p>
<p>Voilà, c'est génial, j'ai affiché quelque chose au vidéo projecteur ! C'est un palier important qui vient d'être franchi ! <br />
Pour ça, j'ai juste envoyé une session que j'avais capturée, comme il n'y a aucune réponse à attendre du vidéo projecteur, c'était super simple à faire (ouvrir un socket et envoyer le contenu d'un fichier). Bon, maintenant une petite remarque : quand c'est fini j'ai une déconnexion. Il faut que j'essaie de creuser ça, j'ai peut être besoin de préciser en permanence que je suis encore en vie (keep alive). </p>
<p>Bon, une remarque intéressante, si au lieu d'arrêter d'envoyer des directives (capturées précédemment), je les envoie en boucle, ça marche et en plus, je ne suis jamais déconnecté, donc il n'y a peut être pas de <em>time to live</em>, peut-être que le vidéoprojecteur exige juste qu'il y ait régulièrement un flux de données qui arrive. <br />
Du coup ça expliquerait peut être que lorsque j'ai fait mon petit script d'extraction des images à partir du flux, j'avais des images noires ou complètement inexploitables.</p>
<h2 id="toc_2">Conclusion</h2>
<p>Du coup, ça y est, j'ai enfin une bonne base. <br />
J'ai maintenant une connaissance minimale du protocole réseau du vidéo projecteur pour pouvoir afficher les images que je veux (à partir de maintenant, j'ai juste à suivre le protocole RFB). Bien sûr, le protocole, ça ne fait pas tout, un lourd développement m'attend pour réaliser une application complète, mais maintenant, plus aucun secret ne me barre la route. </p>
<p>J'aurais bien aimé avoir un binôme pour réaliser cette application. Cela aurait permis de bien cloisonner la découverte du protocole et la réalisation de l'implémentation, on aurait ainsi pu voir si la documentation était bonne et suffisante pour bien comprendre le protocole. Maintenant, je vais tenter de faire cette application. Ensuite, je reviendrais sur l'analyse du protocole pour améliorer l'application (supporter les options de connexion, gérer la télécommande, …).</p>
<p>Mon petit débriefing :</p>
<ul><li>Le plus important de tout : je pense que c'est de bien documenter tout ce qu'on fait et ce qu'on observe. Un détail insignifiant à un instant T peut tout à fait s'avérer être au final un élément important. De plus, sans cette documentation, je n'aurais jamais pu terminer ce projet. Eh oui, l'étude du protocole s'est faite sur une très longue période avec plusieurs mois de creux (c'est un projet qui marche à la motivation, et elle n'est pas toujours là).</li>
<li>Ne jamais affirmer. Là, le travail c'est de deviner. On ne peut rien affirmer. On doit toujours pouvoir douter de n'importe quelle certitude que l'on a pu émettre.</li>
<li>Ne jamais bloquer. Si on est bloqué sur quelque chose, il faut passer, si c'est possible, ou juste passer à autre chose. Une suite d'octet n'a pas plus de sens après avoir été fixée pendant trois heures. Voir autre chose avant de repasser à l'élément du blocage peut permettre d'aborder les choses sous un autre angle.</li>
<li>Essayer d'être logique. Se poser la question « Et si j'avais conçu le protocole, qu'est ce que j'aurais fait ? » est très pertinent. Si on a une idée de comment répondre à certaines problématiques, il est tout à fait possible que les concepteur du protocole ait eu la même idée. </li>
<li>Toujours essayer de se raccrocher à quelque chose d'autre. Tout le monde ne réinvente pas la roue chaque matin. Déjà, on peut supposer qu'un protocole réseau aura toujours une forme de header / data. Ça doit être le cas dans à peu près tous les protocoles connus, et ça marche. Il y a très peu de chances pour qu'un protocole cherche l'originalité à ce niveau là. Par extension, il est tout à fait possible que le protocole s'inspire d'un protocole connu. De plus, on peut supposer que si le protocole utilise un algorithme de chiffrement, celui-ci est connu et ouvert (AES, Serpent, 3DES…). Un protocole échange une image ? C'est sûrement du BMP, JPEG, GIF ou PNG, le protocole échange du son ? Pareil, c'est certainement du WAV, MP3, OGG… </li>
</ul><h2 id="toc_3">Post étude</h2>
<p>En regardant un peu tout et une fois que j'ai bien compris comment faire pour créer un client alternatif, j'ai réessayé de me faire passer pour un vidéo projecteur et ça marche impeccablement bien ! Du coup, en modifiant les octets que je ne connais pas, je verrais le changement de comportement du logiciel. </p>
<p>Voilà, j'ai une liste des codes et de leurs significations dans le logiciel : </p>
<ul><li>1 = vidéoprojecteur en veille, </li>
<li>2 = quelqu'un l'a déjà pris, </li>
<li>6 = plantage du logiciel … </li>
<li>wait, what ? </li>
</ul><p>Ah oui, c'est étrange, quand le code de l'état du vidéo projecteur est à 6, le projecteur est grisé et le logiciel plante. En gros, un logiciel malicieux sur le réseau pourrait répondre à toutes les réponses de broadcast avec un segment UDP malicieux qui ferait planter le logiciel. J'essaierais de contacter Epson pour les prévenir. Bon, après vérification une nouvelle version du logiciel de projection est sortie et cette faille est corrigée.</p>
<p>En continuant de regarder, j'ai noté d'une que l'IP qui est en permanence dans le header n'est pas l'IP source comme je le croyais, mais est en fait l'IP du client. Donc au final, pour simuler le comportement du client, ça ne change rien, mais du coup c'est pour ça que je n'arrivais pas à simuler un vidéoprojecteur. C'est évident, maintenant que je sais !<br />
Deuxième chose, l'adresse mac envoyée semble être "utile" : elle permet de différencier plusieurs vidéo projecteurs qui ont la même IP et (ou ?) le même nom (ouais bon, d'où les guillemets à <em>utile</em>).</p>
<h3 id="toc_4"></h3>
<p>That's all folks !</p><div><a href="https://linuxfr.org/users/sebastienb/journaux/retro-ingenierie-epson.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/94819/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/sebastienb/journaux/retro-ingenierie-epson#comments">ouvrir dans le navigateur</a>
</p>
Sébastien B.https://linuxfr.org/nodes/94819/comments.atomtag:linuxfr.org,2005:Diary/320502012-01-13T20:41:12+01:002012-01-13T20:41:12+01:00Netzob : outil de rétro-conception de protocoles de communicationLicence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<p>Un petit journal pour vous annoncer la sortie d'un outil libre de rétro-ingénierie de protocoles de communication : Netzob* !</p>
<p>Plusieurs cas d'usages sont visés à travers cet outil :</p>
<ul><li>le développement d'une implémentation libre d'un protocole de communication propriétaire (ou non documenté) ;</li>
<li>l'analyse de sécurité (fuzzing "intelligent", avec compréhension du protocole) sur des implémentations de protocoles propriétaires ;</li>
<li>la simulation de trafic réaliste de protocoles de communication propriétaires dans le but de tester des produits tiers (pare-feux, IDS, ...) ;</li>
<li>etc.</li>
</ul><p>La version actuelle (0.3.1) implémente déjà pas mal de fonctionnalités permettant de capturer des messages depuis différentes sources (réseau, PCAP, flux inter-processus, fichiers structurés), d'identifier le format des messages (inférence du vocabulaire) ainsi que la machine à états d'un protocole (inférence de la grammaire).</p>
<p>Il existe une petite vidéo présentant un panorama des fonctionnalité de Netzob (capture de données à partir d'un fichier, inférence du vocabulaire, construction de la grammaire puis simulation de trafic) sur un cas simple :</p>
<p>
<a href="http://vimeo.com/34964757">http://vimeo.com/34964757</a>
</p>
<p>Nous sommes preneurs de retours d'expériences, et surtout de besoins que vous souhaiteriez voir pris en charge dans Netzob.</p>
<p>Les infos utiles :</p>
<ul><li>Le site web officiel : <a href="http://www.netzob.org">http://www.netzob.org</a></li>
<li>La page de téléchargement : <a href="http://www.netzob.org/index.php?page=download">http://www.netzob.org/index.php?page=download</a></li>
<li>Le projet est sous licence GPLv3.</li>
</ul><p>*NETwork protocol modeliZatiOn By reverse engineering.</p><div><a href="https://linuxfr.org/users/sygus/journaux/netzob-outil-de-r%C3%A9tro-conception-de-protocoles-de-communication.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/89017/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/sygus/journaux/netzob-outil-de-r%C3%A9tro-conception-de-protocoles-de-communication#comments">ouvrir dans le navigateur</a>
</p>
Frédéric Guihéryhttps://linuxfr.org/nodes/89017/comments.atomtag:linuxfr.org,2005:Diary/315112011-08-25T02:15:46+02:002011-08-25T02:15:46+02:00Flou juridique de la rétro-ingénierie<p>Dans le cadre d'un projet de refonte d'une appli client/serveur dont ma boite est cliente (auprès d'un éditeur propriétaire), j'ai été amené à analyser pour ensuite recoder le protocole de communication entre les 2 applications.</p>
<p>Retour sur le projet :</p>
<p>L'objectif est de développer une application maison en reprenant le champ d'action de l'ancienne (achetée il y a 8 ans à un éditeur) et en y ajoutant toutes les fonctionnalités dont nous avons besoin. La grosse contrainte du projet est que la migration doit se faire au fur et à mesure des fonctionnalités développées sur tout ou une partie des pc clients et serveurs.</p>
<p>Autrement-dit l'ancienne application et la nouvelle devront cohabiter (nouveau client <=> ancien serveur, ancien client <=> nouveau serveur). Le seul moyen d'y parvenir est donc d'utiliser le même protocole de communication, celui de l'ancienne application. Après quelques jours d'analyse du protocole, preuve est faîte de la faisabilité de l'opération.</p>
<p>Aujourd'hui la nouvelle appli a pris le relais et fonctionne très bien... Tellement bien que si initialement c'était pour nos propres besoins, nous envisageons maintenant de la proposer à certains clients.</p>
<p>
<strong>Nous nous retrouvons aujourd'hui dans le même cas que le projet samba à l'époque : toute l'application a été recodée from scratch, seul le protocole de communication a été conservé pour des raisons d'interopérabilité.</strong>
</p>
<p>Les questions que nous nous posons :</p>
<ul><li>A-t-on le droit de proposer notre logiciel basé sur le protocole de communication d'un autre logiciel ?</li>
<li>Quels sont les risques si aucun contact n'est pris avec l'éditeur ? Sachant pertinemment qu'en position de concurrent, dans notre droit ou pas l'éditeur va sûrement essayer de nous couper l'herbe sous le pied...</li>
</ul><p>Si vous avez un avis sur la question ou déjà eu une expérience similaire, faîtes part de vos retours.</p><div><a href="https://linuxfr.org/users/stopspam/journaux/flou-juridique-de-la-r%C3%A9tro-ing%C3%A9nierie.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/87163/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/stopspam/journaux/flou-juridique-de-la-r%C3%A9tro-ing%C3%A9nierie#comments">ouvrir dans le navigateur</a>
</p>
stopspamhttps://linuxfr.org/nodes/87163/comments.atom