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.

atari_adebug_loadbinary.gif

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).

atari_adebug_absolute.gif

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".

atari_adebug_protec.gif

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.