Vos recrutements informatiques

700 000 développeurs, chefs de projets, ingénieurs, informaticiens...

Contactez notre équipe spécialiste en recrutement

R2con 2016 - Hacker Street Fighter 2X

Chiffrement du CPS2 dans Radare2

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

En 2016, la r2con a accueilli un ensemble de conférences autour de l'outil de rétro-ingénierie radare2. Dans cette conférence, Pau Oliva Fora (pof), consultant en sécurité, explique le fonctionnement du chiffrement présent sur les jeux d'arcade Capcom.

II. Vidéo


R2con 2016 - Hacker Street Fighter 2X : Chiffrement du CPS2 dans Radare2


III. Résumé

III-A. Capcom Play System 2

Le Capcom Play System 2 (CPS-2) est un système inventé par Capcom, composé de deux cartes (une pour la partie calcul, l'autre pour le jeu) pour les bornes d'arcade.

Le CPS-2 embarque un Motorola 68000 cadencé à 16 MHz et un Z80 à 8 MHz pour le son. La sortie vidéo permet l'affichage de 384 pixels sur 224 à 60 images par seconde.

Le CPS-2 est la deuxième version développée par Capcom. En plus d'avoir un processeur plus rapide que la première version, les jeux sont chiffrés pour empêcher les copies non officielles (bootlegs).

Pour le chiffrement, Capcom a placé une mémoire RAM soutenue par une batterie. La mémoire contient les clés pour déchiffrer le jeu. Par contre, lorsque la batterie est vide (5 à 10 ans), les clés sont perdues et le jeu ne peut plus démarrer (écran bleu fixe).

III-A-1. Historique

En janvier 2001, un groupe de hacker (CPS-2 Shock Group) a pu obtenir les données du jeu en bidouillant le matériel. Ensuite, grâce à une table XOR différentielle (de 8 Go), il a été possible de reproduire ces données à partir d'une ROM originale et donc, de faire de l'émulation.

En janvier 2007, le chiffrement a été complètement décortiqué par Andreas Naive et Nicola Samoria (auteur de M.A.M.E.). Le chiffrement n'affecte que les opcodes (les 16 bits de l'opcode et les 16 premiers bits de l'adresse). Celui-ci repose sur deux réseaux de Feistel de quatre tours et d'une clé sur 64 bits.

En avril 2016, Artemio Urbina, Ian Court et Eduardo Cruz ont complètement rétro-ingénieré la sécurité du CPS-2 rendant ainsi possible une récupération et restauration du jeu sans modification matérielle.

III-A-2. Restauration d'un jeu (avant 2016)

Pour récupérer un jeu mort suite à la décharge de la batterie, vous devez :

  • déchiffrer toutes les données chiffrées ;
  • détourner les lectures et écritures réalisées en 0x400000-0x40000A vers la région 0xFFFFF0-0xFFFFFA ;
  • corriger les routines d'effacement pour nettoyer cette région lors des activités de nettoyage de la mémoire ;
  • corriger toutes les sections du code du jeu qui utilisent la région afin d'utiliser une autre région ;
  • reprogrammer l'EPROM avec la ROM déchiffrée ;
  • dessouder la batterie ;
  • court-circuiter les deux pattes du condensateur à côté de la borne + de la batterie pendant quelques secondes ;
  • démarrer le jeu.

III-B. Super Street Fighter 2X

III-B-1. Débogage

Vous pouvez lancer l'émulateur avec le débogage actif grâce à la commande suivante :

 
Sélectionnez
mame -debug ssf2xj

Puis ouvrir la fenêtre mémoire et aller à l'adresse 0xFF844E (décalage 0x400 pour radare2). Cette partie de la mémoire contient les informations liées au premier joueur.

Ensuite, grâce à LUA, vous pouvez manipuler l'émulateur à l'aide des fonctions suivantes :

  • memory.readbyte(), memory.readword(), memory.writebyte(), memory.writeword(), gui.text(), emu.frameadvance().

III-B-2. Triche (RAM)

Grâce à l'émulateur, vous pouvez tricher dans le jeu en modifiant les valeurs en mémoire. Pour le chronomètre, vous pouvez analyser le comportement de la mémoire. Si vous trouvez une valeur qui diminue (et qui correspond à ce qui est actuellement à l'écran), vous n'avez plus qu'à la fixer.

Un fichier de triche dans M.A.M.E. s'écrit en XML :

 
Sélectionnez
<cheat desc="Infinite Time">
    <script state="run">
        <action>maincpu.pb@FF8DCE=99</action>
    </script>
</cheat>

Dans la ligne d'action, on indique le CPU concerné par l'opération, avec p, l'espace mémoire impliqué et avec b (byte), la taille mémoire.

Une triche en RAM ne sera présente qu'au cours de l'exécution du jeu et ne modifie pas le jeu en lui-même, mais le comportement du jeu retranscrit par l'émulateur.

III-B-3. Triche (ROM)

Une fois que vous savez où sont stockées les variables intéressantes en mémoire, vous pouvez modifier la ROM afin d'appliquer la triche définitivement (ou de faire une ROM spéciale avec une triche fonctionnelle sur le matériel original). Pour cela, vous allez observer toutes les fonctions pouvant modifier la zone mémoire préalablement identifiée. Ensuite, il faudra modifier le code assembleur pour appliquer votre nouvelle logique au code.

III-B-3-a. Chiffrement/Déchiffrement du CPS-2

Le seul programme capable de chiffrer/déchiffrer une ROM CPS-2 est X.C.O.P.Y., mais il est difficilement retrouvable.

Vous pouvez toutefois reproduire ce comportement en portant le code de déchiffrement de M.A.M.E. dans radare2. Ce dernier vous permettra de déchiffrer la ROM, de la patcher et de la chiffrer.

IV. Ressource

Vous pouvez télécharger le diaporama de la conférence.

V. Commenter

Vous pouvez commenter et donner vos avis dans la discussion associée sur le forum.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2017 pof. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.