Quel jeu vais-je pouvoir hacker ?FF Tactics,
bien sûr (mais la trad est déjà en cours, désolé), ainsi que pas mal de jeux,
mais pas tous. Pour savoir si vous pouvez utiliser cette méthode, insérez le CD
du jeu à hacker dans votre lecteur CD ROM et regardez les fichiers qui s'y
trouvent. Si vous voyez plein de petits fichiers, de préférence dans des
répertoires, alors il ne devrait pas y avoir de problèmes pour appliquer cette
méthode. Si vous voyez un gros fichier qui occupe presque tout le CD et deux
petits à côté, ou pire, seulement deux petits fichiers (comme c'est le cas pour
Chrono Cross), vous risquez d'avoir de sérieux problèmes avec cette méthode. Je
chercheraispeut-être comment faire un jour, qui sait... En attendant,il va
falloirfaire sans moi.
De quoi ai-je besoin ?Pour commencer,
prenez un PC sous Windows. Pour les accros du pingouin, il est nécessaire de
recompiler les programmes que j'ai conçus. Ensuite, vous aurez besoin de cette
fameuse suite d'outils en ligne de commande :
Sector Insert
Sector
Extract
Sector Add
Sector Creator
Ces outils sont dispos avec leurs
sources (pour pouvoir les modifier ou les compiler sur un autre système que
Windows) sur le site de Génération 9.
Il serait aussi bon de s'équipper d'un
éditeur hexadécimal tel que Hex Workshop, ainsi que de CDRWin (ou tout autre
logiciel capable de créer un ISO).
Je vous conseille aussi CD Mage, un
programme très utile pour manipuler les ISO.
Enfin, des connaissances en
romhacking sont nécessaires, en tout cas si vous souhaitez
traduire.
2. La base de tout : des 1 et
des 0Comme chacun sait, l'informatique fonctionne en
binaire : tout est une suite de bits, de 1 et de 0. On regroupe ces bits par 8,
ce qui donne des octets. Jusqu'ici, rien de bien compliqué, je pense que pas mal
de monde sait ça. Un octet contient donc une valeur comprise entre 0 et 255 (2
puissance 8). Pour noter ces valeurs, on utilise le code hexadécimal, c'està
dire une écriture des nombres en base 16. Au lieu d'utiliserles 10 chiffres de 0
à 9, on en utilise 16, de 0 à 9 puis A,B, C, D, E et F. On compte donc les
chiffres de 0 à 9 normalement,puis A pour 10, B pour 11... jusqu'à F pour 15,
puis 10 pour 16. Lesnombres de 0 à 255 vont donc de 0 à FF en hexadécimal.C'est
plutôt cool, ça tombe pile ! Normal, c'est pour çaqu'on utilise l'hexa.
Comme
le sujet de cette FAQ est le hack d'un ISO de CD, sachez que celui-ci n'est rien
d'autre qu'une suite d'octets. Combien ? Beaucoup ! Dans la suite de cette FAQ,
on utilisera toujours des nombres hexadécimaux pourreprésenter les
octets.
3. Les secteurs, ou comment
s'organise un CDAfin de simplifier l'organisation d'un
CD, on regroupe les octets par groupes appelés des secteurs. C'est un peu
l'équivalent des clusters sous Windows, ou des inodes sous Unix. Un CD se
compose donc d'une suitede secteurs numérotés de 0 à beaucoup. Il existe
plusieurs formats de CD, nous n'étudierons ici que celui utilisé pour les CD
PSX, surtout que je n'ai pas cherché à comprendre comment fonctionnent les
autres. Chaque secteur fait très exactement 2352octets. Pour vous en convaincre,
regardez la taille de votre ISO et divisezla par 2352, vous obtiendrez un
chiffre rond, qui correspond au nombre desecteurs de votre ISO. Chaque secteur
commence par 24 octets d'en-tête(ou header). Cet en-tête commence toujours par
00 FF FF FF FF FF FFFF FF FF FF 00. Ensuite, on trouve le numéro de l'header
codésur 4 octets, puis 8 octets pour le sub-header (sous en-tête).
Pour
calculer le numéro d'un header, c'est assez compliqué. Le dernier octet est
toujours 02. Le premier numéro de secteur (0) est codé par 00 02 00 02. Le
suivant (1), par 00 02 01 02, puis 00 02 02 02, etc... Là ou ça se corse, c'est
quand on arrive à 00 02 09 02 (le secteur 9). On passe ensuite à 00 02 10 02.
Logique ? Non, on est en hexadécimal ! On aurait dû avoir 00 02 0A 02 ! Il va
donc falloir faire du décimal en hexa (ça se dit ça ?), ce qui complique un peu
les choses. On continue donc jusqu'à 00 02 74 02, et de là, on passe à 00 03 00
02. Pourquoi ne pas avoir continué jusqu'à 00 02 99 02 ? Je n'en sais rien.
Reprenons à 00 03 00 02. Ensuite vient 00 03 01 02... Jusqu'à 00 03 74 02, puis
00 04 00 02... Et ainsi jusqu'à 00 59 74 02. Précisons que le deuxième octet est
lui aussi codé en "décimal en hexa" (on utilise pas les lettres du code hexa).
On passe alors à 01 00 00 02. Et tout s'enchaîne de la même façon. Si vous
examinez les sources de Sector Creator, vous remarquerez qu'un petit bout du
code calcul cet header tout seul. A vous de l'utiliser comme vous le souhaitez :
dans vos propres programmes ou pour comprendre les explications pas très claires
qui précèdent.
Revenons à notre header, et plus précisément au
sous-header. Il diffère selon le contenu du secteur. Voici quelques formats pour
le sous-header :
00 00 08 00 00 00 08 00 : le secteur contient un fichier de
données
00 00 89 00 00 00 89 00 : le secteur contient la fin d'un
fichier
00 00 20 00 00 00 20 00 : le secteur ne contient rien
Il existe
d'autres formats mais je ne les connais pas tous, à vous de chercher si vous en
avez besoin.
Les 2048 octets qui suivent le header contiennent des
données : fichier, piste audio, morceau de la FAT... Enfin bref, c'est le coeur
du secteur,et la zone que l'on va chercher à modifier. Suivent ensuite 280
octets qui représentent l'ECC (Error Correction Code). Ils sont calculés en
fonction du contenu du secteur, donc si vous y apportez des modifications, il
faudra le recalculer. CD Mage s'occupe de ça sans problèmes.
Comment sont
rangés les fichiers dans ces secteurs ? Comme on le verra dans le chapitre
suivant, un fichier est représenté principalement par 2 attributs essentiels :
sa taille et son numéro de secteur (il en existe d'autres comme la date, mais
ça, on s'en fout). Le numéro de secteur désigne le premier secteur qui contient
le fichier. Par exemple, prenons un fichier de 5000 octets, dont le numéro de
secteur est 2000. Le secteur 2000 va donc contenir les 2048 premiers octets du
fichier dans sa zone de données. Le secteur 2001, quant à lui, contiendra les
2048 octets suivants, et le secteur 2002, les 904 derniers octets (il aura comme
sous-header 00 00 89 00 00 00 89 00). Le reste de la zone de données du secteur
2002 sera rempli de 00.
4.
La FAT, ou comment s'organise une arborescence de
fichiersLes informations sur les fichiers ont besoin
d'être stockées quelque part, et c'est dans la FAT qu'on trouvera tout ca. Les
informations à stockées sont assez nombreuses (date et heure, attributs...),
mais seules 3 seront vraiment utiles : le nom, la taille et le numéro de
secteur. Pour trouver cette FAT, il est nécessaire d'extraire les premiers
secteurs de l'ISO. Par exemple, voilà ce que contient le secteur 18 de l'ISO de
FF Tactics :

On
remarque qu'il y a le nom des répertoires contenus sur le CD. On va donc
chercher à retrouver leur contenu. Essayons par exemple avec le répertoire EVENT
(en rouge). Les 4 octets en vert correspondent au numéro de secteur de ce
répertoire, mais à l'envers (en codage Big Endian pour ceux qui
connaissent).
On va donc extraire ce secteur (1683 en décimal). Voilà ce que
donne le début du secteur :

On y retrouve bien le contenu du répertoire. Il nous faut
maintenant rechercher les informations sur les fichiers. Prenons par exemple le
premier, ATCHELP.LZW (en rouge). En vert, on retrouve sa taille (90325 octets),
celle-ci étant écrite à l'envers puis à l'endroit (Big Endian puis Little
Endian). Juste devant, on a le numéro de secteur, lui aussi inscrit deux fois.
Celui-ci est facilement retrouvé grâce à CD Mage (dans le champ LBA du
fichier).
5. Et en pratique on fait
comment ?Prenons un exemple : on veut modifier le
fichier ATCHELP.LZW. Tout d'abord, on le récupère simplement sur le CD, on le
modifie à la manière de n'importe quelle ROM classique (avec une recherche de
table, de compression...). Prenons le cas où le fichier modifié ne fait plus
90325 octets, mais 100325. Le fichier original occupe 90325 / 2048 + 1 = 45
secteurs, et le nouveau en fait 100325 / 2048 + 1 = 49 secteurs. Il est donc
impossible de réinsérer le nouveau fichier à son emplacement d'origine puisqu'il
écraserais le fichier se trouvant juste après. Il va donc falloir le déplacer
dans un espace libre. La plupart des CDs ne sont pas entièrement remplis, il
reste donc largement de quoi mettre notre fichier à la fin du CD. Supposons qu'à
partir du secteur 150000, il n'y a plus rien.
Tout d'abord, il faut convertir
le fichier en secteurs, grâce à Sector Creator, sans oublier d'indiquer au
programme le numéro du premier secteur (150000) afin qu'il puisse calculer son
en-tête. On va ensuite réinsérer le fichier obtenu dans l'ISO avec Sector
Insertor. Maintenant, il va falloir modifier la FAT pour qu'elle pointe vers ce
nouvel emplacement. Une simple calculatrice pourra convertir en héxadécimal la
nouvelle taille du fichier et son secteur (100325 devient 00 01 87 E5 et 150000
devient 00 02 49 F0). On modifie ces informations dans le secteur 1683 que l'on
a déjà extrait, sans oublier qu'il faut les modifier à l'envers puis à
l'endroit. On réinsère alors le nouveau secteur dans l'ISO. Il ne reste plus
qu'à corriger l'ECC pour les secteurs que l'on a modifié. Pour cela, on utilise
CD Mage. Ouvrez l'ISO et choisissez le menu "Action > Scan for corruption".
Pour accélérer la recherche, on pourra spécifier une plage de secteurs réduite
d'abord à l'interval 1683-1683 (un seul secteur), puis 150000-150050 (pour le
fichier réinséré). Le programme affiche alors la liste des secteurs modifiés. Un
simple click droit et l'option "Rebuild sector fields" recalculera l'ECC de
chaque secteur, ce qui supprimera toutes les erreurs.
Et voilà ! L'ISO a été
modifié et peut maintenant être utilisé avec son nouveau
fichier.
6. Guide de référence des
outilsAu début de la trad de FFT, je ne connaissais pas
les outils tels que CD Mage qui permettent de faire beaucoup de choses sur un
ISO. J'ai donc conçu quelques programmes assez simples en ligne de commande dont
certains sont obsolètes car CD Mage fait la même chose. Mais la plupart offrent
des possibilités inédites, c'est pouquoi je les diffuse ici, accompagnés de
leurs sources afin qu'il soit possible de les modifier ou de les améliorer. Ils
ne peuvent être utilisés qu'avec des images ISO classiques, pas les NRG de
Nero.
Sector Extract : ce programme extrait un ou plusieurs
secteurs d'un ISO. CD Mage possède une fonction semblable.
sector_extract
fichier_iso no_secteur
nb_secteursfichier_iso est bien sûr le nom du fichier .iso.
no_secteur est le numéro du premier secteur à extraire et
nb_secteurs
le nombre de secteurs à extraire.
Vous obtiendrez un fichier
sectorXXXX.sec où XXXX est le numéro du premier secteur.
Sector Insert
: ce programme réalise l'opération inverse, la réinsertion d'un ou plusieurs
secteurs dans un ISO.
sector_insert fichier.sec
fichier.iso no_secteurfichier.sec est le nom du
fichier à insérer. Sa taille doit être un multiple de 2352.
fichier.iso
est le nom du fichier ISO, et
no_secteur le numéro du premier secteur à
réinsérer.
Sector Add : ce programme réalise la même chose que
Sector Insert, excepté le fait qu'il insère le secteur à la fin de l'ISO,
augmentant ainsi sa taille.
sector_insert fichier.sec
fichier.isoSector Creator : ce programme
convertit un fichier normal en un fichier secteur, en calculant automatiquement
la valeur des en-têtes. Il est utilisé pour réinsérer un fichier modifié avec
Sector Insert.
sector_creator fichier
no_secteurfichier est le nom du fichier en entrée, et
no_secteur le numéro du premier secteur dans lequel doit se trouver le
fichier.
Vous obtiendrez un fichier sectorXXXX.sec où XXXX est le numéro du
premier secteur.
7. Crédits et
remerciementsCette FAQ a été rédigée par moi (Moogle).
Je possède cependant un gros défaut : j'explique très mal. Si vous n'y comprenez
rien, ça vient sûrement de là, mais n'hésitez pas dans ce cas à me demander des
précisions, ainsi qu'à signaler des éventuelles erreurs.
Certains détails ont
été volontairement omis pour simplifier les explications (comme par exemple
l'ECC qui se compose en fait de plusieurs parties), et aussi parce qu'il y a
certaines choses que je ne connais pas.
Remerciements- Le Boss
pour avoir été l'initiateur du projet FF Tactics
- GreatSkaori, Lezard et
ToraKami pour avoir accepté d'y participer
- Speeder Speed pour m'avoir
permis d'entrer dans un super groupe de traduction
- Tous les autres membres
de Génération 9 : SOR, Androidlord, Senki T, CattiBri et tout ceux que j'oublie
(désolé)
- Copernic et Anus Pee pour les FAQ qui m'ont permis de débuter dans
le romhacking
- Skeud, pour sa FAQ sur l'ASM PSX que je n'ai malheureusement
pas pu exploiter faute de matériel
- Asmo pour ses quelques conseils et son
soutient
- Et tout ceux qui font vivre la scène du romhack francophone et
international
Contact
moogle@net-up.com
Génération 9