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 0
Comme 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 CD
Afin 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 fichiers
Les 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 outils
Au 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_secteurs
fichier_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_secteur
fichier.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.iso
Sector 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_secteur
fichier 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 remerciements
Cette 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