Les protections sur Neo Geo CD
Par Strider le samedi, janvier 3 2009, 18:32 - Nostalgeek - Lien permanent
Pour bien commencer cette année 2009, j'ai voulu faire des copies de sécurité de mes jeux Neo Geo CD. Hélas, j'ai gaspillé pas mal de CD car je n'arrivais pas à créer des copies lisibles sur ma CDZ. Après quelques recherches sur le net, je me suis rendu compte que la CDZ, contrairement aux deux autres modèles plus anciens de Neo Geo CD, ne permet pas de faire fonctionner des copies. Par curiosité, je me suis penché sur le système de protection.
Après quelques recherches, j'ai trouvé les explications d'un hacker nommé Fakk2. Il existe en réalité deux protections, qu'il nomme "CDZ protection" et "in-game protection". La première est assez facile à désactiver, la seconde demande des connaissances en 68000 car il faut carrément trafiquer un exécutable. Seuls 33 jeux sont protégés, j'ai mis un tableau récapitulatif ici, fourni par Fakk2 :
---------------------------------------------------------------------------------- [ NOM DU JEU ][ CDZ Protection ][ In-Game Protection ] ---------------------------------------------------------------------------------- [ Art of Fighting 3 ][ YES ][ YES ] [ Art of Fighting 3 Japan Box Set ][ YES ][ YES ] [ Breakers ][ YES ][ NO ] [ Brikin ' Ger / IronClad ][ YES ][ NO ] [ Fatal Fury 3 ][ NO ][ YES ] [ Fatal Fury Real Bout ][ YES ][ YES ] [ Fatal Fury Real Bout Special ][ YES ][ YES ] [ Fatal Fury Real Bout 2: Newcomers ][ YES ][ YES ] [Futsal / Pleasure Goal 5 on 5 Soccer][ YES ][ NO ] [ King of Fighters '95 ][ NO ][ YES ] [ King of Fighters '96 ][ YES ][ YES ] [ King of Fighters '96 NG Coll. ][ YES ][ YES ] [ King of Fighters '97 ][ YES ][ YES ] [ King of Fighters '98 ][ YES ][ YES ] [ King of Fighters '99 ][ YES ][ YES ] [ Last Blade 1 ][ YES ][ YES ] [ Last Blade 2 ][ YES ][ YES ] [ Magical Drop II ][ YES ][ NO ] [ Metal Slug ][ YES ][ NO ] [ Metal Slug 2 ][ YES ][ NO ] [ Neo Drift Out! ][ YES ][ NO ] [ Neo Geo CD Special ][ NO ][ YES ] [ Neo Turf Masters ][ YES ][ NO ] [ Ninja Masters ][ YES ][ NO ] [ Ragnagard ][ YES ][ NO ] [ Robo Army ][ NO ][ YES ] [ Samurai Shodown 3 ][ YES ][ YES ] [ Samurai Shodown 4 ][ YES ][ YES ] [ Samurai Spirits R.P.G. ][ YES ][ YES ] [ Soccer Brawl ][ NO ][ YES ] [ Stakes Winner ][ YES ][ NO ] [ Super Sidekicks 3 ][ NO ][ YES ] [ Twinkle Star Sprites ][ YES ][ NO ] ==================================================================================
1. Protection CD
Mettre le CD du jeu dans le lecteur du PC et chercher le fichier CPY.TXT. Lorsque le jeu possède une protection CD, la taille de ce fichier doit être de 2048 octets. Si le fichier est bien plus petit (29 octets par exemple), le CD n'est pas protégé.
Avec un éditeur hexadécimal, il faut repérer la chaîne "NEO-GEO" puis remplacer les deux premières occurrences de "g" par "f". En général on les trouve aux offsets $34 et $40. Sauver le fichier et le mettre de côté pour remplacer celui qui se trouve dans l'image ISO.
C'est tout ? Ben oui !
2. Protection dans le jeu
Dans mon cas, je possède l'original de Samurai Shodown 4. Il se trouve dans la liste ci-dessus, il va falloir se creuser les méninges pour virer la protection.
Encore faut-il savoir quel fichier modifier. Sur le CD du jeu, ouvrir le fichier IPL.TXT. Il contient la liste de tous les fichiers chargés au démarrage du jeu. Repérer le premier dont l'extension est PRG, c'est l'exécutable 68000. Dans le cas de Samurai Shodown 4, c'est P222.PRG.
Ouvrir ce fichier avec un éditeur hexadécimal (je recommande le très puissant WinHex). Il faut maintenant chercher le message d'erreur qui s'affiche lorsque la CDZ exécute une copie. Sauf erreur de ma part, il existe deux types de message :
WARNING THIS CD SOFTWARE IS A COPY AND CAN NOT BE PLAYED FURTHER. COPIED SNK SOFTWARE INFRINGES SNK'S COPYRIGHTS AND TRADEMARKS. WE RECOMMEND THAT YOU PURCHASE ORIGINAL SNK SOFT WARE.
et l'autre :
DISK I/O ERROR ( ID = 0003 ) PLEASE POWER OFF
Sur Samurai Shodown 4 c'est le premier message. Chaque message est entouré d'espaces (caractères $20). Il faut noter l'adresse de début du message, et donc remonter jusqu'au premier espace. Dans mon cas le début se trouve à l'adresse $924.
Le plus dur est de savoir où se trouve la routine qui fait référence à ce texte. L'exécutable du jeu appelle une sous-routine qui va tester la protection, laquelle va afficher, le cas échéant, ce message d'erreur. Comme je n'ai aucun désassembleur 68000 sur le PC, je me suis amusé à analyser le code sur... un Atari ;-)
Bien entendu, on peut se contenter de n'utiliser que WinHex puisque l'on va faire principalement de la recherche hexadécimale.
N'étant pas un pro du désassemblage, j'utilise Adebug sur Atari. J'ai essayé avec Desert Drain, TT Digger et Easy Rider : ils ne savent pas désassembler un binaire qui n'est pas un exécutable Atari.
Sous Adebug, je charge le fichier binaire avec la touche "b" et je tape "E:\P222.PRG,100000". Je décide de placer le programme à l'adresse $100000 car cela me permet de m'y retrouver plus facilement. En effet, le début du message d'erreur se trouvant à l'offset $924, je peux donc me rendre directement en $100924.
D'après Fakk2, le code qui fait appel au message d'erreur se trouve juste au-dessus, environ 200 à 250 octets plus haut. L'adresse du message d'erreur est chargée relativement au PC (Program Counter). Mais ce n'est pas tout le temps le cas, parfois on peut voir l'adresse elle-même dans le code : c'est le cas de l'offset absolu.
L'offset absolu
Dans ce cas particulier, l'adresse est directement dans le programme. Avec WinHex, on peut rechercher une valeur hexadécimale (raccourci : CTRL + ALT + X). C'est le cas de King of Fighters '98 : le message d'erreur se situe à l'offset $A09E6. La recherche permet de voir que cette adresse est écrite en dur dans le code à l'offset $1E2F (à l'adresse $101E2C sous Adebug).
cf. la ligne : MOVEA.L #$A09E6,A0
Comme pour le cas de l'offset relatif, il suffit de remonter un peu plus haut dans le code pour voir la sous-routine de protection.
Revenons à nos octets. Il faut chercher un bout de code au-dessus du message d'erreur qui fait référence à l'adresse $100924. En montant d'une dizaine de lignes on peut lire ceci :
001008FE LEA ($100924,PC),A0
On a déjà fait la moitié du boulot !
A partir de cette adresse $1008FE il faut remonter plus haut dans le code jusqu'à trouver ceci :
MOVE.B $10FE85,D0
Ce qui nous donne, en hexadécimal : 10 39 00 10 FE 85
Il vaut mieux utiliser WinHex. Désassembler le code n'est pas obligatoire pour dégager la protection, mais ça permet de mieux comprendre ce que l'on fait. Il est possible que WinHex trouve plusieurs occurrences, dans ce cas il faut prendre la première à partir du début du fichier.
Juste après, on devrait voir quelque chose du genre : 81 39 00 10 xx xx (où "10 xx xx" est en fait une adresse).
Ce qui correspond à cette ligne de code :
OR.B $10xxxx
C'est le début du code de la protection.
Quelques octets avant "10 39 00 10 FE 85" on devrait voir "2F 00", ce qui correspond au début de la routine :
MOVE.L D0,-(A7)
(une bête sauvegarde du contenu de D0 sur le sommet de la pile)
C'est précisemment ce bout de code qu'il faut désactiver. Comment ? En appelant un instruction qui n'a aucun effet au lieu d'appeler la routine de protection. Il s'agit du mnémonique NOP (No OPeration). Le programme continue comme si de rien n'était, la Neo Geo étant persuadée d'avoir appelé le programme de vérification anti-copie. Le code hexadécimal de NOP est "4E 71".
On note donc l'adresse où l'on trouve "2F 00", dans Adebug c'est $100800, ce qui nous donne tout simplement l'offset $800 dans WinHex. On remplace "2F 00" par "4E 71" et on sauve l'exécutable, il sera à placer dans l'image ISO.
Et si l'on ne trouve pas de "2F 00" ? C'est le cas de certains jeux (King of Fighters '98 par exemple). Il faut revenir sur l'adresse qui contient "10 39 00 10 FE 85" et remplacer "10 39" par "4E 71".
Voilà, vous savez tout sur la protection des jeux Neo Geo CD. A noter que seule la Neo Geo CDZ est concernée car les copies passent très bien sur ma Neo Geo CD modèle 2.
Dans un prochain billet j'expliquerai comment faire une extraction des pistes des CD originaux, comment remplacer les fichiers d'origine par ceux qui permettent de faire sauter la protection et comment graver tout ça.
Commentaires
Eh bien méchantes protections sur NeoGeo.... En même temps en 1994 pas grand monde devait avoir un graveur de CD.... donc peu d'interêt de faire plus compliqué...
Sinon sur PC/linux tu as quelques desassembleurs 68000 (souvent fournis avec le cross assembler), t'as celui de Ben/OVR par exemple : http://sc68.atari.org/developers_to...
et RTS c'est ReTurn from Subroutine... :)
Après ca vaudrait le coup de comprendre ce que fait cette routine justement, les protections disquettes je vosi bien, celles CD je connais pas... des erreurs sur le disque ? (ca existe checkdisk pour CD ?)
Ah ! Z'oubliais !
Pour faire tant de cracker les jeux, ajoute une cracktro :)
Oui ce sont des erreurs sur le disque, ou plutôt à la fin de la piste 1 (celle qui contient les données). Même Nero ou CDRWin n'arrivent pas à extraire cette piste, j'utilise MagicISO. Des logiciels comme Isobuster permettent de scanner la surface d'un CD/DVD.
Oups boulette pour RTS, c'est le "T" qui m'a induit en erreur ;-)
trop fort ça de cracker des jeux neogeo sur atari :D
Oups, petite boulette : le code 4E71 correspond à NOP et non pas à RTS. Ce qui permet au programme de continuer à l'instruction suivante au lieu d'exécuter la sous-routine de protection (merci à Fabien).
Salut ! Superbe article, très utile, qui je l'espère m'aidera pour les iso avec ma Geo Geo CDZ. Excellent blog d'ailleurs, tout ce que j'aime : Atari, Amstrad, maxYMiser, un peu de Japon ;)
Ultrasyd
Salut
Un très bon article que je vais tenter de mettre en pratique, j'ai une neo geo cd modèle 2 top loader, j'ai gravé quelques iso neo geo cd trouvés sur le net certains fonctionnent et pour d'autres j'ai le fameux message d'erreur qui apparaît au bout de 3 round sur KOF 99 et KOF 98.
Je me demandais si c'était normal d'ailleurs que ces deux jeux bloquent alors qu'à priori seule la neo geo cdz est concernée par la protection anti copie ?
Pour résumé et si j'ai bien compris l'article il suffit de renommer toutes les occurences 2F00 en 4E71 ?