|
INTRO
Ce guide a été fait pour tous ceux desireux d'apprendre
comment hacker un jeu, au delà du hack normal (fonte,
texte, etc..). Mais surtout, il a été fait pour
emmerder read! :-))))
I°) Approche
"basique"
Une certaine connaissance d'un language de programmation
est préferable pour comprendre ce qui suit (basic, C etc..),
mais si vous avez déjà de l'experience au niveau ASM
PC, c'est encore mieux ;-) .
Ce guide ne vous apprendra pas la base de l'asm, il
existe(ra?) des docs expliquant ça (pourquoi refaire en
moins bien ce qui existe déjà?). Donc, je sous entend
que LDA CMP ou autres STA ne vous sont pas totalement étrangers.
Si il vous manque des infos, ou si vous vous posez des
questions sur un opcode inconnu, d'abord la doc de Jay (eXcellente
doc) ou alors zieutez dans le .zip de qwertie (plus
d'infos après). Ce n'est pas la peine d'apprendre TOUS
les opcodes, juste ceux de "base".
Il faut aussi connaitre en gros la structure de la snes (DMA
VRAM ne sont pas des monstres venus de l'espace, juste
des élements de la snes!).
Voili donc, on va passer à la deuxième partie :
l'utilisation des utilitaires.
II°)Les TOOLZ
Difficile de creuser sans pioche, non? Et bah là, il
vous faut une trousse à outils bien chargée qui vous
faliciterons la vie. Petite revue des différents
programmes.
Les désassembleurs : inutiles en premier temps. Ca ne
sert à rien de désassembler un jeu et se retrouver après
avec un fichier de 30 Mo (tracer) sans aucune information.
On s'en sert plus tard (voir après). Le must? Celui de
Jay ou de pelrun (oubliez tracer!!)
Les debuggers : un ptit peu de zsnes, un ptit peu de snes9x,
et BEAUCOUP de LT's SNES9X! En résumé, la version de LT
ajoute une fonction TRES importante, et ô combien utile.
Vous appuyez sur "VErr Num" juste avant
l'apparition d'une fenètre de texte, par exemple, puis
vous rappuiez sur la meme touche. Puis, vous quittez snes9x.
Vous avec un Bô fichier trace.log qui dépasse rarement
200 Ko, donc plus facilement analisable (voir III).
Divers : Après avoir trouvé la routine, tout préparé
pour les modifs, voici ASMDEV (de Jay et Disnesquick)
l'outil ultime pour faire des modifs asm. C'est un désassembleur
interactif. Inutile de refaire les modifs asm avec un éditeur
hexa (n'est-ce pas Mera!). Si vous devez convertir des
adresses pc en snes, et vice-verca, je vous conseille Hex2snes
de Anus Pee, ou alors UHR, qui a un convertisseur integré.
III°)Le Trace.log
Donc, vous avez fait comme je vous ai dit, et vous vous
rertouvez avec un Bo trace.log. Mais kesskeckecetruk? me
direz vous. C'est le code asm que la snes a effectué
lors de la periode entre les 2 pressions sur VErr Num.
Mais il vire les boucles! (si le jeu lance 200 fois la
meme routine, ca devient lourd!). Mais comment retrouver
ce que l'on veut dans cette bouillie? Là, plusieurs
solutions, je vous en donne 2.
1° : Vous savez d'avance où se situe ce que vous voulez
modifier (la fonte, ou le texte), et, après avoir
converti l'adresse pc en snes, vous cherchez des appels
à cette adresse, ou alors des appels dans la bank où se
situe la fonte (si c une fonte que vous cherchez BIEN sûr!),
et vous essayez d'isoler la routine. puis, vous allez au
IV :-).
2° : La "technique du barbare"®©™. Il
demande l'utilisation de 2 trace.log. Comment les faire?
C'est simple : vous appuyez sur Verr num, juste avant
l'affichage de la phrase A, et vous quittez, après
ravoir appuyé sur verrnum. Vous renommez trace.log en 1.asm.
Vous faites pareil une seconde fois, MAIS avec une phrase
DIFFERENTE (phrase B), et vous renommez en 2.asm. puis,
vous comparez. Bien sûr, il y a peu de chances que les
fichiers soient absolument identiques, mais il le seront
par "blocs" (plus d'infos après). Dès que
vous trouvez une différence dans les [ ], vous avez
trouvé l'endroit recherché (texte ou fonte).
Quelle est la meilleure technique? Essayez d'abrod la
première, mais, si elle donne rien, faites la 2eme. Il
existe des technique différentes, mais plus longues,
donc chiantes, donc que je n'utilise pas ;-) .
Par contre, il y a des moments où cette deuxième méthode
ne fonctionne pas. C'est une des raisons qui ont fait que
je ne l'utilise plus.
Le dernier jeu en date sur lequel je me soit attelé était
Slam Dunk (fonte compressée! Faut bien s'occuper :-) ).
J'avais trouvé l'emplacement dans la rom où se situait
la fonte compressée grâce à la technique expliquée au
IV.
MAIS, en cherchant dans le fichier trace.log, je n'avait
AUCUNE correspondance d'un appel dans cette zone de la
rom. La raison était evidente : la plupart des données
de cette rom étaient compressés, donc, il y avait des
appels à la routine de décompression sans arrêt!
J'ai alors ressorti snes9x version "normale",
et pis j'ai mis des Break points aux bons endroits (pour
récuperer le maximum de routines), et j'ai laissé
tourner.
Je me suis retrouvé avec un ENORME fichier de 40 Mo!
Mais, comme je connaissais l'endroit où la fonte
compressée se situait, j'ai pu trouver la bonne routine.
Victoire!
IV°) Comment
trouver les données compressées
En fait, j'ai piqué cette technique à mera (rendonsà
Cesar ce qui appartient à Cesar). Pour la plupart des
compressions Lz, le début n'est pas compressé. Il faut
d'abord récuperer la donnée décompressée (grâce à
un .zst), puis, allez au tout début de cette donnée.
Prenez les premiers bits QUI NE SE REPETENT PAS! et
cherchez-les dans la rom. Vous les trouvez plusieurs
fois? Modifiez les un par un (je veux dire, modifiez
toute la zone sur 20 octets) et savegardez. Ca a changé
la donnée décompressée? Parfait! vous avez trouvé
l'emplacement de la donnée compressée.
V°) Mais y'a pas
des docs pour m'aider?
Non... ou très peu!
Il y a la "bible" qui regroupe la plupart des
docs sur la snes (processeur, etc..). Je connais cette
doc depuis plus d'un an, mais j'ai été étonné d'être
parmis les seuls!
Elle a été compilée par qwertie, auteur du regretté
snesqR (emulateur en open source).
De plus, elle est dans la partie "utiles".
Pour d'autres docs sur le hack asm, c'est la pénurie.
En anglais, il y a celle de F.H sur la décompression du
texte LZSS de lodoss (bonne doc, mais assez dure pour un
débutant!), et..... c'est tout (pour les docs qui
prennent pour base un jeu).
Vous pouvez aussi vous orienter vers les sources de démos
asm, où l'on apprend pas mal de choses sur le
fonctionnement interne de la snes.
En français, il y a RIEN sur l'asm (sauf ma doc bien sûr
;-) ) : un vide que je compte bien combler.
C'est tout pour maintenant. Normalement, vous en savez
assez pour passer dans les autres rubriques.
|