Veilles Technologiques

Le reverse engineering est un domaine qui me passionne profondément. Son utilisation pour analyser, protéger et sécuriser des applications joue un rôle crucial dans l’avenir de la cybersécurité. Face à des attaques toujours plus sophistiquées, ces technologies représentent un véritable défi, tant sur le plan technique que stratégique. Je suis convaincu qu’elles occuperont une place centrale dans les innovations visant à garantir la confidentialité, la protection des données et la résilience des applications. C’est pourquoi j’ai choisi ce thème pour mes veilles technologiques.

Reverse Engineering & Rétrocomputing : Recréer le Passé avec les Outils du Présent

Le reverse engineering, ou ingénierie inverse, est un pilier incontournable de la rétroinformatique. En remontant le fil du code, des circuits imprimés et des systèmes oubliés, des passionnés du monde entier redonnent vie à des technologies anciennes. Ces derniers mois, plusieurs projets impressionnants ont vu le jour : décompilation de systèmes d’exploitation historiques, décodage de BIOS propriétaires, ou encore reconstruction de consoles emblématiques.

Plongeons dans les projets les plus marquants du rétrocomputing par reverse engineering, observés entre novembre 2024 et mai 2025.


1. BIOS ThinkPad rétro-conçu et libéré

Le BIOS des anciens ThinkPad X230 et T430 de Lenovo a été entièrement analysé et rétroconçu. Grâce à une communauté d’experts, le BIOS propriétaire a été remplacé par Coreboot, un firmware libre.

  • Objectifs :
    • Supprimer les restrictions (whitelists de cartes Wi-Fi)
    • Ajouter Secure Boot et compatibilité USB-C boot
  • Outils : UEFITool, Flashrom, IDA Pro, analyse hexadécimale

Ce projet offre un second souffle à ces machines robustes et sécurise leur usage dans des contextes modernes.


2. Reconstruction du système Windows NT 4.0

Sous le nom de OpenNT4, des développeurs ont réussi à reconstruire le code source fonctionnel de Windows NT 4.0 (1996) à partir de ses binaires.

  • Extraction et identification des fonctions internes du kernel
  • Utilisation de Ghidra et IDA pour transformer les binaires en code source C lisible
  • Objectif : créer une version exécutable sur matériel ou VM modernes

Ce projet rend l’étude du cœur de Windows accessible et ouvre des possibilités d’émulation ou de modernisation.


3. Reverse complet du chipset audio Sound Blaster 16

Une équipe internationale a analysé en profondeur le chipset Yamaha OPL3, utilisé dans les cartes Sound Blaster 16, afin de restituer fidèlement les sons emblématiques des jeux DOS des années 1990.

  • Objectif : restitution à l’identique des sons MIDI de l’époque (Doom, Duke Nukem…)
  • Méthodologie : analyse logic analyzer et photographies haute précision de puces décapées
  • Utilité : reproduction exacte via FPGA pour plateformes comme MiSTer

Une avancée importante pour la préservation sonore des systèmes rétro.


4. Rétroingénierie de jeux classiques : de Dark Forces à EarthBound

Plusieurs jeux cultes ont été entièrement rétroconçus, permettant des ports modernes et des améliorations :

  • Star Wars: Dark Forces : moteur reconstruit et porté via OpenJKDF2
  • EarthBound (SNES) : scripts, dialogues, IA reconstitués pour fantrads et remakes
  • Outils utilisés : IDA, radare2, débogueurs console (no$sns, bsnes+)

Ces projets allient passion, rigueur technique et préservation culturelle.


5. Analyse physique de consoles rétro : Game Boy et SEGA Saturn

Certains projets vont au-delà du software en analysant directement le matériel à l’aide de techniques de rétro-ingénierie physique.

  • Décapage de chipsets Game Boy pour recréer des répliques FPGA exactes
  • Résultat : support matériel authentique et émulation parfaite (Analogue Pocket, MiSTer)
  • Méthodologie : imagerie haute résolution, documentation des portes logiques

Le reverse engineering devient ici un travail d’archéologie technologique.

Sources principales :

  1. Coreboot sur ThinkPad (T430/X230)
  2. OpenNT4 – Reverse de Windows NT 4.0
  3. Yamaha OPL3 / Sound Blaster 16
  4. OpenJKDF2 – Dark Forces Engine RE
  5. EarthBound Engine RE
  6. MiSTer FPGA et Analogue Pocket
  7. Décapage de puces / rétro-ingénierie physique
  8. Outils de reverse engineering utilisés

1 mai 2025


Conclusion

Le reverse engineering dans le rétrocomputing ne se limite pas à la nostalgie. C’est un outil puissant de préservation, d’apprentissage et de libération technologique. Grâce à des outils comme Ghidra, IDA ou l’analyse physique de composants, ces communautés repoussent les limites pour restaurer le passé, documenter l’oublié et améliorer l’existant.

Qu’il s’agisse d’un BIOS verrouillé, d’un moteur de jeu culte ou d’un son MIDI disparu, tout peut être recréé… à condition d’avoir la curiosité, la méthode, et une solide culture binaire.

2 – Tony Hawk, strcpy une faille classique (17/03/25)

Introduction : Un exploit sur Tony Hawk met en lumière une faille classique

Une faille de sécurité a récemment été découverte dans Tony Hawk’s Pro Skater 4, un jeu sorti en 2002, exploitant une vulnérabilité présente dans le moteur RenderWare. Ce problème, mis en lumière par le chercheur en sécurité GrimDoomer à travers son projet TonyHawksProStrcpy, repose sur l’utilisation dangereuse de la fonction strcpy() en langage C.

En exploitant cette faiblesse, il est possible d’injecter et d’exécuter du code arbitraire sur une console ou un PC, permettant ainsi de prendre le contrôle total du système ciblé.


strcpy() : Une fonction dangereuse à l’origine de nombreuses failles

strcpy() est une fonction couramment utilisée en langage C pour copier des chaînes de caractères. Cependant, elle présente une grande vulnérabilité : elle ne vérifie pas la taille de la destination, ce qui peut provoquer un dépassement de mémoire (buffer overflow).

Problèmes liés à strcpy() :

  • Pas de vérification de taille → peut écrire au-delà de la mémoire allouée.
  • Risque d’exécution de code arbitraire → l’attaquant peut injecter du code malveillant.
  • Beaucoup de failles critiques dans l’histoire de la cybersécurité en sont issues.

Alternatives plus sûres :

  • strncpy() : Permet de limiter la taille copiée.
  • strlcpy() : Une version encore plus sécurisée.

Étude de cas : La faille OpenSSH (CVE-2002-0083)

Un des cas les plus graves liés à strcpy() est la faille critique découverte en 2002 dans OpenSSH (CVE-2002-0083).

Détails de la faille :

  • Un buffer overflow causé par strcpy() a permis aux attaquants de prendre le contrôle à distance de millions de serveurs.
  • OpenSSH, utilisé pour gérer les connexions SSH, était vulnérable sur Linux, BSD, Solaris et autres systèmes UNIX.
  • Impact : Des serveurs gouvernementaux et des infrastructures critiques ont été compromis.
  • Solution : Remplacement de strcpy() par strlcpy() et renforcement de la gestion mémoire.

La rétro-ingénierie : Son importance et ses usages

La rétro-ingénierie (Reverse Engineering) est essentielle pour analyser et comprendre le fonctionnement des logiciels et du matériel, notamment dans la cybersécurité.

Ses utilisations :

  • Recherche de vulnérabilités → Identifier des failles comme celle de strcpy().
  • Développement de correctifs → Patch pour sécuriser les systèmes.
  • Analyse de logiciels malveillants → Comprendre et neutraliser les virus.
  • Restauration de logiciels anciens → Maintenir des programmes dont le code source est perdu.
  • Modding et bidouillage → Modifier des jeux vidéo, comme dans Tony Hawk’s Pro Skater.

Éthique et légalité :

  • La rétro-ingénierie est légale dans certains cas (cybersécurité, compatibilité logicielle).
  • Elle est interdite dans d’autres contextes (contournement de DRM, piratage de logiciels propriétaires).

Conclusion

L’affaire TonyHawksProStrcpy illustre parfaitement pourquoi l’usage de fonctions non sécurisées comme strcpy() est dangereux. Des failles comme celle d’OpenSSH en 2002 ont prouvé que des erreurs de gestion mémoire peuvent mettre en péril des millions d’utilisateurs.

Leçons à retenir :

  • Éviter l’usage de strcpy(), préférer des alternatives sécurisées.
  • Utiliser la rétro-ingénierie de manière éthique pour identifier et corriger des vulnérabilités.
  • Sécuriser le code dès sa conception pour prévenir plutôt que guérir.

La cybersécurité repose sur une bonne pratique du développement et une vigilance constante face aux menaces !

source :

https://github.com/grimdoomer/TonyHawksProStrcpy https://icode4.coffee/?p=954

Le marché des solutions de protection logicielle bin2bin est dominé depuis des années par des outils tels que Themida et VMProtect, reconnus pour leur capacité à sécuriser les applications contre l’ingénierie inverse, la falsification et les attaques. Cependant, un nouvel acteur, CodeDefender, fait son entrée en promettant des innovations technologiques qui pourraient redéfinir les standards de l’industrie. Avec une approche novatrice basée sur une obfuscation avancée, une stabilité accrue et une compatibilité avec les dernières technologies de sécurité, CodeDefender ambitionne de dépasser les limites des solutions existantes. Mais cette solution est-elle réellement à la hauteur de ses promesses ? Et surtout, peut-elle rivaliser avec des géants comme Themida et VMProtect ?

Dans cet article, nous analysons les caractéristiques uniques de CodeDefender, ses avantages compétitifs, et explorons si cet outil pourrait devenir le nouveau standard en matière de protection logicielle.

CodeDefender propose une gamme complète de fonctionnalités pour protéger vos applications contre l’analyse et la manipulation non autorisées. Voici un aperçu détaillé de ces fonctionnalités :

Obfuscation des Fonctions

  • Mutation Engine : Cette technologie propriétaire transforme des séquences d’instructions simples en expressions complexes en utilisant une variété d’instructions x86-64. Le code résultant est si étroitement intégré que la suppression d’une seule instruction peut le rendre non fonctionnel.
  • Le code original
    • mov eax, 0xff
  • Exemple de mutation
    • xor eax, eax
    • mov al, 0x0f
    • shl al, 4
    • or al, 0x0f
  • Mixed Boolean Arithmetic (MBA) : Cette technique combine des opérations booléennes et arithmétiques pour obscurcir la logique du code, rendant l’analyse plus complexe pour les attaquants. Image venant du pseudo code d’IDA pro.
  • Loop Encode Semantics : Cette fonctionnalité encode des opérations simples telles que l’addition, la soustraction, le ET logique et le OU exclusif en boucles complexes, rendant difficile leur analyse par des moteurs d’exécution symbolique.
  • Opaque Block Duplication Pass : Cette technique duplique des blocs de code et crée des conditions prédéfini pour déterminer le chemin d’exécution, augmentant ainsi la complexité du code.
  • Dematerialize Constants : Cette fonctionnalité obscurcit les constantes du code, les rendant peu susceptibles de réapparaître dans un registre ou un emplacement mémoire, ce qui est idéal pour les fonctions manipulant des valeurs sensibles.
  • Loop-Based Constant Encoding : Pour renforcer la sécurité contre l’exécution symbolique, les constantes sont encodées en utilisant des structures de boucles dont les limites sont intentionnellement obscurcies, rendant l’analyse plus difficile.
  • Simple Constant Obfuscation : Conçue pour éviter la détection par des méthodes de signature statique, cette technique obscurcit les valeurs constantes pour empêcher leur identification lors de scans de signatures.
  • IDA Decompiler Crasher : Cette option perturbe le décompilateur d’IDA Pro, empêchant toute analyse ultérieure du fichier en cours. Elle est appliquée directement à la fonction que vous souhaitez protéger de la décompilation.

Obfuscation du Module

  • Import Obfuscation : Chaque PE a une IAT (Import Address Table) cet table contient toutes les fonctions exporté de librairie comme kernel32.dll etc. Cette technique supprime toutes les importations du fichier binaire et les résout lors de l’exécution.
  • Anti-Debug (Windows 10) : Empêche les débogueurs de s’attacher à votre programme, neutralisant la plupart des débogueurs modernes. Cette fonctionnalité nécessite que le programme s’exécute sur Windows 10 ou une version supérieur.
  • Fake Entry Point : Chaque PE commence a un endroit appeler OEP (Original entry point) CodeDefender obscurcit le point d’entrée en utilisant une obfuscation du flux de contrôle basée sur des exceptions, perturbant les émulateurs PE basés sur unicorn-engine qui ne supportent pas correctement la gestion structurée des exceptions.

Fonctionnalités de Personnalisation

  • Fake PDB String : Remplace la chaîne PDB existante par une chaîne personnalisée, pouvant afficher des motifs ASCII dans certains outils d’analyse comme IDA Pro.
  • Custom Section Names : Permet de personnaliser le nom des sections créées par le framework, y compris la possibilité d’avoir un nom de section vide.

Ces fonctionnalités offrent une protection robuste et personnalisable pour des applications, rendant l’analyse et la manipulation non autorisées beaucoup plus difficiles pour les attaquants potentiels.

adri3n.me

low-level and reverse engineering enthusiast

© Copyright 2024

Github

LinkedIn

contact@adri3n.me