Samy Kamkar et le Reverse Engineering

Samy Kamkar est le nom d’un ancien hacker très reconnu, actuellement c’est un expert et consultant en sécurité informatique et vie privée. Samy Kamkar était surtout connu dans sa jeunesse comme le hacker qui a créé le worm ou le virus avec la propagation la plus rapide de tous les temps, c’était le worm Samy, consistant à infecter le réseau social MySpace en 2005, à une époque où il n’y avait pas encore FaceBook et et que MySpace était l’un des sites les plus populaires au monde, même plus que Google. Le virus en question était relativement inoffensif, mine de rien il a causé le shutdown (arrêt temporaire) de MySpace et interpellation de Samy par les services secrets américains avec une punition de ne pas approcher d’appareils informatique ni d’internet pour une période de 3 ans.

wallhack dans Counter Strike : Global Offensive

Samy Kamkar est aussi connu pour l’invention de l’un des hacks actuellement les plus célèbres dans le monde du jeu vidéo, c’est le wall-hack (wall c’est mur en Français), un hack qui permet aux joueurs de tricher dans les jeux multijoueur online. Le wall-hack littéralement permet au tricheur de scanner les murs et de voir la position des adversaires cachés derrière les murs, l’image en haut est un exemple d’un wall-hack dans le jeu Counter Strike. Justement, c’est sur le jeu Counter Strike que Samy Kamkar a eu l’idée de créer ce hack, lors d’une de ses parties il a r emarqué que le son des pas de ses adversaires pouvait être entendu derrière les murs sans autant les voir, il a eu la clairvoyance de constater que l’information sur ses adversaires en réseaux puisque il arrive à les entendre, est sans doute parvenue à sa machine, il lui suffisait juste de chercher cette information sur la RAM de la machine en utilisant l’un des programmes appelés moniteurs. Ces programmes permettent la visualisation des données brutes en temps réel des logiciels s’exécutant dans la RAM, un travail d’investigation et d’analyser des données brutes est nécessaire pour trouver la position des joueurs adverses, Samy alors a eu l’idée d’observer que le son des pas entendu est stéréo sur deux baffes, si le joueur était à droite la baffe de droite émettait un son plus intense que celle de gauche et inversement, il a réussi à trouver les valeurs d’intensité des deux sons dans le tas de données, et avec un simple calcul de triangulation géométrique il a pu extraire la position du joueur adverse.

Reverse Engineering avec RSamy Kamkar

Le hack en soi reste un sujet très controversé, en raison qu’il peut effectivement être utilisé pour des fins maléfiques, comme par exemple le piratage, l’accès à des informations privées et confidentielles, le détournement d’argent et systèmes de paiement, les cybers attaques, la tricherie…etc. Mais pour d’autres c’est un phénomène culturel qui ne concerne pas que l’informatique, mais plutôt l’aspect lorsqu’un individu apprécie le challenge intellectuel de créativité surmontant les limitations d’un software, d’un appareil, d’une machine…etc, afin d’arriver à des fonctionnalités nouvelles plus innovantes (c’est la définition donnée sur Wikipédia). Certains pensent que l’esprit de cette culture est fidèlement et simplement représenté par l’ancienne série télévisée MacGyver. Dans tous les cas le hack généralement implique l’utilisation d’un système d’une manière autre que celle qu’il a été développé à la base pour avoir des fonctionnalités nouvelles, pour le faire le hacker doit avoir une compréhension approfondie et accrue du système.

Sur la vidéo en haut Samy Kamkar donne quelques conseils et directives sur la méthode et les outils nécessaire pour faire du hack matériel et le reverse engineering. La vidéo est une interview de Samy Kamkar donnée à la suite de la conférence tenue par l’association hackaday, dans laquelle il a présenté un hack sur les clés intelligentes de voiture (en Anglais key fob ou smart key), c’est le type de clés qui permettent de déverrouiller sa voiture en étant à proximité de celle-ci sans avoir à utiliser la clé, d’allumer automatiquement les feux, et d’autres fonctionnalités.

Portes logiques

Les composants élémentaires de base lors de la conception d’un circuit électronique numérique, que ça soit un processeur, un microcontrôleur, une puce graphique, une carte son, un contrôleur réseau…etc, est sans doute les portes logiques. La conception de ce genre de matériel est un processus d’assemblage et de connexion peut être d’une centaine, millier, million, et même milliard de portes logiques par exemple les derniers processeurs modernes. Mine de rien on peut dénombrer seulement quelques types de ces portes logiques qui sont en plus très simples à comprendre leurs manières de fonctionner. La vidéo suivante de la chaîne éducative Computerphile explique le fonctionnement des trois principaux types de ces portes qui sont le AND, le OR et le NOT. Il est bon de rappeler que dans l’électronique numérique les valeurs binaires 0 et 1 sont réellement des valeurs physiques représentées par un voltage électronique, par exemple 0 volt peut représenter le 0 logique et 5 volts le 1 logique, la famille par exemple des circuits TTL utilisent ce standard.

Les portes logiques AND, OR et NOT

Il est totalement légitime de se poser la question que normalement il est connu que les composants élémentaires pour la construction disons par exemple des processeurs sont les transistors et non les portes logiques, et que généralement on évalue la complexité de ces circuits par le nombre de transistors et non le nombre de portes logiques. C’est vrai dans le sens où les portes logiques sont construites à base de transistors, par exemple la porte AND peut être construite à partir de 6 transistors, mais sur un point de vue logique, le transistor en lui tout seul ne peut pas faire d’opération logique, l’opération logique en elle-même représente l’élément unitaire basique pour faire le traitement sur l’information binaire (0 et 1), sachant que par définition l’informatique c’est le traitement automatique de l’information, qui est sous représentation binaire, par une machine qui est elle électronique pour ces temps modernes.

Commandes basiques dans Linux

Il est bien connu dans la culture informatique que Linux dispose d’un terminal (appelé aussi invite de commande) très puissant et très populaire. Le terminal est littéralement l’interface textuelle permettant à l’utilisateur de commander son système d’exploitation, en d’autres mots ça permet de manipuler l’ordinateur en tapant des commandes. Techniquement parlent cette interface est appelée CLI pour Commad-Line Interface, contrairement à l’interface la plus répondue actuellement qui se base sur l’utilisation de la sourie pour interagir avec une interface graphique constituée de boutons, des barres de défilement, d’onglets, de fenêtres…etc, qui est elle appelée GUI (pour Graphical User Interface).

Tutoriel basique sur les commandes Linux

La vidéo en déçus correspond à un petit tutoriel d’introduction au terminal de Linux, réellement Linux en dispose de plusieurs terminaux, la vidéo présente l’un des plus célèbres entre eux qui est le bash, avec lequel il est même possible de programmer des scripts. Vous pouvez pratiquer en parallèle avec le tutoriel sans avoir à installer Linux ni de machines virtuelle avec le shell online cb.vu (shell est une autre appellation pour invite de commande).

L’inventeur du C++

Un petit mot de l’inventeur de l’un des plus célèbres langages de programmation qui est le C++. La vidéo suivante est une interview de Bjarne Stroustrup l’inventeur et le concepteur du C++. À travers les questions posées, Bjarne Stroustrup expose sa vision et les motifs qui l’ont poussé à créer le C++, il met aussi en évidence le point fort du langage par rapport aux autres, qui est sa robustesse par le fait qu’un programme écrit dans ce langage peut tenir des dizaines d’années sans anomalie ou avoir besoin de l’entretenir ou de le changer.

Les fractales de Mandelbrot

En mathématiques, les fractales peuvent être grossièrement définis comme des formes géométrique qui se répètent à l’infinie en zoomant sur les bords de ces formes géométriques, vous pouvez voir une illustration sur l’image animée en bas. Le plus étonnant c’est que pour un non connaisseur des fractales il va supposer que ce sont des animations psychédéliques (envoûtantes) créées par un artiste quelconque, alors qu’en réalité ce sont des constructions purement mathématiques de création divine, cachées dans des formules mathématiques que les humains n’ont soupçonné l’existence qu’à partir de l’année 1978, sur une première image produite par le mathématicien Benoit Mandelbrot.

La vidéo en bas produite par l’excellente chaîne Youtube de mathématique Numberphile, fait la démonstration étape par étape d’une manière très simpliste la construction d’une image des fractales de Mandelbrot en passant par les fractales de Julia, qui sont comme vous allez le voir tous les deux très proches et très similaires. Effectivement, une image de Mandelbrot ou de Julia est formée sur la base d’une formule mathématique très simple, pour Julia c’est la suite Zn+1= Zn2+C où Z est une variable complexe et C une constante complexe, l’image produite indique pour chaque point/pixel (un point c’est la valeur de Z) sur le repaire en 2 dimensions des nombres complexes si la suite sur ce point converge (stable) ou diverge (instable, tends vers l’infinie). Pour l’image de Mandelbrot c’est exactement la même suite sauf que cette fois la valeur initiale de la suite est toujours 0 et c’est C qui change sur tous les points de l’image, si la suite converge le point est de couleur noir, sinon ce sont des nuances de couleurs en rapport avec la vitesse de divergence.

L’ensemble de Mandelbrot

Paradoxalement l’animation de zoom et les figures géométriques semblent très complexes, en réalité sa formule mathématique et sa programmation sur ordinateur sont très simples, et n’exige que peu d’efforts. Je vous donne le lien d’un logiciel déjà programmé, c’est le logiciel Xaos, il vous permet d’explorer par vous-même la cartographie de l’ensemble de Mandelbrot, que même jusqu’à ce jour beaucoup de mathématicien tentent de résoudre l’énigme de la formation de ces fractales.

Comment faire une bonne soudure

Il suffit d’une simple image pour résumé une longue explication pour comment faire correctement une bonne soudure (il s’agit de la soudure en électronique). Malgré que le site soit globalement destiné aux étudiants en l’informatique cela-dit en informatique lorsqu’il s’agit de conception hardware on est souvent mené à concevoir des circuits électroniques numériques et à les construites sur des PCB (cartes électroniques sur circuit imprimé), ainsi l’aboutissement final d’une conception numérique est la réalisation physique électronique du circuit.

Faire une bonne soudure

L’image en question en haut est très explicite, pour faire une bonne soudure il faut premièrement chauffer à sec la patte du composant et la trace sur le PCB de 2 à 3 secondes, deuxièmement on rajoute l’éteint, troisièmement on chauffe encore de 1 à 2 secondes, et après on laisse refroidir. La partie en bas sur l’image fait la comparaison entre une bonne soudure avec d’autres qui sont mal faits.

La récursivité comme solution pour le jeu du Sudoku

Le jeu du Sudoku est un jeu de puzzle populaire sur certains journaux et magazines, il est représenté sur l’image en bas, globalement il se constitue d’une grille de 9×9 cases partiellement remplies par des chiffres de 1 à 9, la grille est aussi subdivisée en 3×3 carré de 3×3 chiffres, le joueur doit remplir le reste des cases vides restantes en respectant la règle qu’il ne doit pas y avoir de répétition d’un chiffre sur une colonne, sur une ligne ou sur le carré 3×3.

Une grille vide de Sudoku

Les règles sont simples mais le casse-tête demande beaucoup de temps à l’humain pour le résoudre, et pourtant c’est déconcertant comment un programme d’une poignée de lignes de code arrive à résoudre le problème sur ordinateur en une fraction de seconde, dans la vidéo qui suit l’enseignant s’exulte de la magie de la récursivité, et c’est d’autant plus vrai que la récursivité est une technique de programmation réputée difficile à apprendre mais très efficace une fois maîtrisée. Il n’était par rare dans les examens d’algorithmique que j’ai eu à corriger de tomber sur des problèmes difficiles à résoudre par les méthodes conventionnelles (par boucles et tests) alors qu’ils devenaient très simples en récursivité.

résoudre le sudoku par récursivité

Services cloud gratuits pour développement de jeux vidéo

Pour rappel le cloud computing est une récente technologie consistant à offrir aux entreprises des services sur internet en IT (Information Technology: technologies en informatique). Ça permet aux entreprises au-lieu d’acheter du matériel et du logiciel et d’installer leurs propres infrastructures informatiques en local, de louer des services en IT proposé par d’autres entreprises tierces spécialistes dans la construction et le maintien de ce genre d’infrastructure. Les services loués par les entreprises sont variers et peuvent être catégorisés en 3 modèles, ça peut être des services au niveau infrastructure (appelés IaaS) comme la mise à disposition de serveurs, datacenters, du stockage, un réseau, des machines virtuelles…etc. Ou au niveau plate-forme (appelés PaaS) et ça inclut les systèmes d’exploitation, les bases de données, les serveurs web, les middlewares, les API de développement, le monitoring…etc. Ou-bien au niveau application (appelés SaaS), ça permet aux entreprises d’installer leurs applications à distances et de les utiliser à distance, en assurant la gestion des bases de données et les backups (les sauvegardes) par l’entreprise tierce. Les entreprises offrants ce genres de services sont généralement appelés cloud computing service providers et sont généralement des filiales de célèbres firmes d’IT, parmi eux on peut nommer AWS (Amazon Web Services) d’Amazon, ou encore Microsoft Azure, Google Cloud Platform, IBM cloud…etc.

Image du jeu Fortnite

Les services offerts gratuitement pour le développement de jeux vidéo sont de la part de la société EPIC games, c’est exceptionnel dans le fait que les services sont généralement payants d’autant plus que les services pour jeux vidéo sont assez rare. EPIC games est une firme très ancienne et très connue dans le monde vidéoludique, actuellement elle est surtout connue pour le très célèbre jeu Fortnite (image en haut) ou de leurs moteur de jeu Unreal Engine réputé pour ça puissance graphique (image de son interface en bas). Mais le plus étonnant c’est les récentes actions très particulières de la firme, par exemple l’année dernière elle a offert 1,2 millions de dollars à la fondation open source Blender Fondation pour subventionner le logiciel de modélisation en 3d Blender (plus de détails sur l’article), ou la subvention aussi par 250 milles dollars du moteur de jeu open source Godot (plus de détails sur l’article) pratiquement un concurrent direct pour son moteur Unreal. Récemment aussi EPIC games sous période de confinement a eu l’idée d’agoniser plusieurs événements virtuels sur son jeu Fortnite, et le résultat est un nouveau record mondial de prêt de 28 millions de participants, c’est évident qu’il est impossible d’organiser des événement de cette envergure dans le monde réel, d’ailleurs d’après ce phénomène beaucoup de personne motionnaient les prémices du web 3.0, un web totalement virtuel dans lequel avec un avatar l’internaute peur évoluer. Sans oublier la récente mesure du moteur Unreal Engine entamée envers les développeurs indépendants (indie en Anglais, se sont des développeurs avec un revenu et un capital très faible, souvent c’est un unique développeur qui travail depuis sa maison), la mesure permet à ces développeurs d’utiliser gratuitement le moteur et de publier leurs jeux sans aucune redevance (royalties en Anglais) jusqu’à ce que le jeu dépasse en profit la bar d’un million de dollars.

L’interface du moteur de jeu Unreal

Concrètement les services d’EPIC games offrent aux développeurs le backend pour le déploiement en réseau des jeux en multijoueurs, ainsi ces services ne concernent réellement que les jeux en réseau et pas en local. Le backend est sous forme d’une API permettant la gestion de l’infrastructure réseau hébergeant le jeu, ces sévices facilitent grandement la vie des développeurs, parce que autrement le développeur devrait les gérer lui-même et ça implique beaucoup de travail de programmation, la location de serveurs et le maintien de ces derniers. En parcourant la page officielle des services sur le site d’EPIC games on peut énumérer quelques services proposés par le cloud d’EPIC, comme le matchmaking pour organiser des matches entre plusieurs joueurs, la création de Lobbies qui sont des zones virtuelles où les joueurs peuvent bavarder, s’inviter pour des matches, ou chercher d’autres joueurs, le suivi des statiques des joueurs, les services d’authentification et la gestion de la liste d’amis, sauvegarde, création de canaux peer-to-peer…etc. Sans oublier que cette API est accessible sur n’importe quel moteur de jeu et peut-être intégrer sur différentes plate-formes de jeu comme la plate-forme de PlayStation, Xbox ou Steam.

Linus Torvalds

Linus Torvalds, un grand nom dans l’informatique moderne, l’inventeur du fameux Linux, l’un des softwares les plus utilisés actuellement dans le monde, quoiqu’il ne prédomine pas dans le secteur des PC, sa diffusion dans le secteur des serveurs est colossal, le marché des tablettes et smartphones est de même notamment en relation avec système Android construit sur une base Linux, sans oublier les différents systèmes embarqués à base de Linux comme les téléviseurs, les consoles de jeux, les routeurs, les DVR…etc. Il aussi peu connu que Linus Torvalds est l’initiateur du logiciel de gestion de versions Git utilisé pour le développement distribué de logiciels sur des dépôts comme GitHub par exemple.

Linus Torvalds a fait une interview sur la vidéo en bas, organisée au sein d’une conférence pour la fondation TED, la fondation est responsable de la mise en ligne gratuitement d’interventions (talks en Anglais) par différents acteurs dans des domaines divers comme la science, la technologie, l’éducation, la politique…etc. Dans l’interview Linus Torvalds revient sur le déroulement de la création de Linux et de Git, sur son implication dans le monde et la philosophie open source parce que à l’époque c’était un peu par hasard, il parle de sa manière de travailler, de sa vision concernant l’innovation et l’invention et de tout autres choses. C’est une vidéo très riche sur homme qui l’est d’autant plus.

Interview de Linus Torvalds

Analyse hardware de la PlayStation 1

L’une des merveilles technologiques qu’a connu le monde vidéoludique dans son histoire est sans doute la PlayStation 1 de la marque Sony, pour ma part c’est la meilleure console de jeux vidéo de tous les temps. Sa sortie en 1994 a marqué un tournant technologique sans précédent, elle présentait des performances en 3D dépassant de loin son homologue PC, avec un prix 2 à 3 fois moins cher (pour rappel à l’époque de sa sortie les PC tournés encore sur Windows 3.11), une prouesse qui a ébloui toute personne concernée par la technologie. Et une question se posait, comment Sony avait réussi à produire un tel exploit technologique ?

La réponse de nos jours est désormais simple et bien connue, c’est en 2 mots; spécialisation et optimisation. La PlayStation d’un point de vue général n’était pas plus puissante que les PCs de l’époque, mais dans son domaine, en occurrence la 3D, elle était très très en avance, son architecture globalement était orientée vers le rendu 3D en optimisant au maximum les coûts des composants, les concepteurs ont voulu dès le début construire une architecture simple à programmer étant les début de la 3D, avec le moindre coût. Sur le diagramme en bas on peut avoir un aperçu de cette architecture.

Architecture de la PlayStation 1

Un très bon article (voici son lien,c’est aussi la source du diagramme) arrive à décortiquer d’une manière relativement détaillée l’architecture. On peut ainsi observer sur le diagramme que la PlayStation 1 dispose d’un processeur de 33.87 MHz dérivé de MIPS et implémentant le jeu d’instruction MIPS I (le même étudié dans le module Architecture des Ordinateur). Généralement MIPS dispose de 4 slots pour rajouter des Co-processeurs, le processeur de la PlayStation n’utilise que 2, le MMU (pour la gestion de mémoire virtuelle) et le GTE (Geometry Transformation Engine) module purement mathématique accélérant les calculs de transformation et des projections géométriques des polygones qui représente une bonne partie du moteur de rendu 3D. Sur le même silicone du processeur se trouve aussi un DMA (Direct Memory Access) automatisant et accélèrent le transfert de donnés entre différentes mémoires, et le MDEC (Motion Decoder) pour la lecture du flux vidéo, en raison que le processeur n’a pas assez de puissant pour le faire d’une manière logiciel, les processeurs actuels (de 4 à 5 GHz) peuvent le faire facilement et ne disposent pas forcément un composant dédié.

Le processeur est ensuite raccordé au bus sur le quel sont rattachés : une RAM de 2 Mo du type EDO RAM, le GPU (Graphics processing unit) responsable de l’affichage graphique, le SPU (Sound Processing Unit) l’unité responsable du son, le CD-ROM controller, le BIOS (Basic Input/Output System) sous forme d’une ROM de 512 Ko contenant principalement le programme de démarrage de la machine, et une interface pour la communication avec les manettes et les cartes mémoires. Le GPU de la PlayStation est relativement primitif, il ne peut essentiellement que dessiner des triangles, sachant que le triangle est la forme primitive élémentaire constituant une scène en 3D, la commande de dessiner un triangle et ses paramètres lui provient du processeur, il dispose d’une mémoire propre VRAM de taille 1 Mo. L’unité de son aussi dispose de 512 Ko de mémoire SRAM. L’image en bas illustre la carte-mère et la disposition physique des composants.

Carte-mère de la PlayStation 1

Voilà, on vient de faire un petit survol sur l’architecture de la PlayStation 1, je vous conseille fortement de lire l’article qui détail beaucoup plus l’architecture, (lien de l’article). Il est probable que je consacrerai dans le futur inchaallah un tutoriel bien plus détaillé et approfondi pour arriver au moins à implémenter des petits programmes sur la machine, ces petits programmes sont généralement appelés démos. En conclusion, il est facilement observable que l’architecture d’une PlayStation 1 et totalement différente d’un PC, on avait vu dans le module de l’Architecture des Ordinateurs que le PC suivait plus ou moins l’architecture de Von Neumann qui est relativement simple, alors que la PlayStation suit un modèle totalement différent, plus éparpillé et plus distribué éventuellement pour optimiser au-mieux les caractéristiques vidéoludique de la machine.