Ere Hacking tools 2004
----------------------
ou comment deplomber la protection Ere informatique 2.01
Revision du 26/11/2004 * T&J du GPA
Teste avec succes sur : Macadam Bumper, Strife, 3d Megacode, Tensions
Note aux possesseurs des anciennes versions de Ere Hacking tools (je me
demande s'il y en a vraiment...)
Encore une nouvelle version des Ere Hacking tools ! C'est en essayant de
deproteger 3d Megacode (23 fichiers a transferer !) que je me suis rendu compte
qu'on pouvait simplifier et ameliorer grandement le "rendement" de ce toolkit.
Par rapport a la version de 2003, plus besoin de Maxam. La fonction catalogue
peut maintenant sortir la liste des fichiers sur imprimante.
Un nouveau module ERE-CALC vous donne meme la ou les valeurs a appliquer pour
patcher correctement un original et "prendre la main" dessus, la ou les
consignes de la version 2003 etaient pus ou moins foireuses (plus ?).
Bref, jettez aux orties les anciennes versions !
Un peu d'histoire !
-------------------
Cette protection ancienne a ete utilisee sur pratiquement tous les jeux vendus
par la societe Ere informatique. Oeuvre de Remi Herbulot (programmeur du mythi-
que Crafton & Xunk), elle a pour principale caracteristique de permettre l'uti-
lisation des routines standards de chargement de fichiers (&BC77 et compagnie).
Concretement, tous les vecteurs sont modifies, de facon a utiliser un format
de disquette special, dont les secteurs sont numerotes sans logique apparente
et de plus proteges par des control mark (secteurs marques comme effaces). Le
chargeur de la protection est franchement bien etudie, difficile a comprendre
car faisant de nombreux appels a la Rom Basic. Toute la ram est completement
reecrite, ce qui ne permet pas l'utilisation d'une routine sous interruption
pour la deprotection. Mais, comme vous allez le voir, il y a un defaut a la
cuirasse...
La base de ce kit de deprotection est la routine de Dr Speedy, publiee dans un
numero du fanzine Crazy Croc. Ell permet de decoder le catalogue du systeme de
fichiers de la protection Ere, et donc de voir les caracteristiques des fichiers
stockes (nom, extension, type, debut, longueur).
Cela ne suffit pas pour transferer ces programmes sur un formatage standard,
mais....
En bricolant le catalogue du systeme de fichiers, il est possible de bloquer
le chargement du programme protege. La main est alors rendue au Basic !
La protection etant ancienne, Remi Herbulot n'a pas juge utile de "nettoyer"
les banks de memoire supplementaires du CPC... On pourra donc y loger des
petites routines de sauvegarde qu'on appelera directement a partir du
Basic une fois le catalogue stoppe !
Voila pour le principe...
Materiel requis : Un editeur de secteurs (Discology ?)
128ko de ram !
CPC 6128 (pas CPC plus car la protection plante dessus !)
Si vous avez un CPC 464 ou 664, il va falloir adapter le programme ERESAVE.BIN,
la routine de reinitialisation du systeme etant specifique a chaque machine.
* Premiere chose a faire, recenser les fichiers du programme a deplomber. On
va s'acquitter facilement de cette tache grace a l'utilitaire, ERE-CAT.
Lancer le programme, noter le nom des fichiers detectes, leur adresse
d'implantation et leur longueur, ou utiliser la fonction impression.
* Deuxieme etape, faire une copie du disque original !
* Troisieme etape, lancer ERE-CALC. Ce programme va vous donner la ou les
valeurs a patcher sur le secteur catalogue pour arreter le chargement du
programme protege tout en ayant la main sous Basic.
Sur tous les originaux testes a ce jour, le fichier chargeur du jeu est le
premier du catalogue. En fonction de la nature du fichier, les valeurs a
remplacer seront logees aux endroits suivants.
* Basic : editer la piste 1, secteur &48 de la copie, et remplacez les
octets 14 et 15 (en partant de 0) avec les valeurs donnees
par ERE-CALC.
* Binaire : editer la piste 1, secteur &48 de la copie, et remplacez
l'octet 12 par la valeur donnee par ERE-CALC.
Pour les curieux, pour un fichier Basic, on bloque le chargeur en donnant une
taille de fichier egale a 0. Pour un fichier binaire, on change son type en
Basic !
Attention, si le chargeur n'est pas le premier fichier de la liste, il faut
tenir compte de sa position sur le catalogue (rajouter &10 aux valeurs
ci-dessus s'il est en deuxieme position, &20 s'il est en 3eme, etc... )
Ces modifications vont nous permettre de stopper le chargement du jeu, sans
perdre la precieuse routine speciale de chargement de la protection ! Cela
parait incroyable, mais cela fonctionne !
* Quatrieme etape : preparer la routine de sauvegarde
- Charger en memoire le programme ERE-SAVE.BAS.
Il stocke en memoire etendue (bank &C4) trois routines :
* en &4000 : lecture du secteur Catalogue de la disquette originale
* en &4003 : ecriture du secteur Catalogue correct sur la disquette de
copie.
* en &7000 : copie en &AE8B (pile Basic) de la routine de sauvegarde
et execution directe.
- Definir le nom, l'extension du fichier, son adresse de chargement, sa
longueur et son type. Ces donnees sont stockees au debut du programme.
Important ! Si le fichier Basic est protege (P), cette routine ne retire
pas sa protection. Il faudra alors utiliser un programme adapte pour rendre
le fichier lisible (cela ne manque pas sur CPC... ).
* Cinquieme etape : preparation finale !
Faites un RUN du fichier ERE-SAVE que vous venez de personnaliser
- Inserez la disquette originale. Le programme Basic va lire le secteur
catalogue et le stocker en memoire etendue.
A noter que si le fichier que vous voulez recuperer n'est pas le loader
du jeu, vous pouvez mettre directement la disquette de travail.
- Inserez ensuite la disquette de travail.
- Tapez la commande de lancement du jeu (en general, RUN"ERE).
Si le chargeur fait un reset au bout de quelques secondes (vu sur Tensions),
retapez la commande RUN"ERE et faites une deuxieme tentative !
Si tout va bien, le chargement devrait se finir par un beau message Error in
xxxx, et le cpc vous rend la main !
A partir de la, faire un OUT &7F00,&C4 pour acceder aux routines creees par
ERE-SAVE.
- faire un CALL &4003 si vous avez besoin de regenerer le catalogue (lorsque
vous recuperez le loader du jeu).
- faire un CALL &7000 pour sauver le fichier convoite !
-> Le fichier se charge en memoire, puis le border devient blanc.
* Inserer dans le lecteur la disquette de sauvegarde
* Appuyez sur une touche.
-> Le fichier s'enregistre, puis le CPC fait un reset.
Cette operation est a reproduire autant de fois qu'il y a de fichiers sur la
disquette de travail. C'est peut-etre long, mais certainement moins que si
vous n'aviez rien pour faire ce transfert !
Rappel ! Les fichiers Basic proteges avec l'option P ne sont pas deproteges
par la sauvegarde. Il faut utiliser un programme de suppression de cette
protection pour les rendre lisibles.
Une fois cette tache accomplie, il faut jeter un oeil sur le chargeur du jeu.
Si c'est du Basic, normalement, il n'y a rien a faire pour que le programme
fonctionne.
Si c'est un chargeur binaire, il faut le charger en memoire avec un programme
Basic. Il faut ensuite trouver son adresse d'execution. En theorie, le chargeur
devrait reinitialiser le systeme disque (CALL &BCCE) puis reactiver le systeme
de fichiers special par un CALL &BEC6. Si vous trouvez ces valeurs, le debut du
programme ne devrait pas etre bien loin...
Dans votre chargeur personnel, il faudra evidemment vous debrouiller pour
supprimer les appels au loader special de Remi Herbulot (dans le chargeur de
Macadam Bumper, il y a un beau CALL &BEC6). Il faut simplement supprimer ces
appels, et le chargeur doit fonctionner sans accroc.
- Tensions
Adresse d'execution de TENSIONS.BIN : &938D
- Macadam bumper
Adresse d'execution de MAC2.BIN : &7530 (facile !)
Attention, si les programmeurs du jeu ont decide d'utiliser en plus une autre
protection (test de secteurs non conformes), il faudra cracker cette protection
la. Mais c'est franchement rare sur des jeux Ere, je ne l'ai personnellement vu
que deux fois, sur QIN, et sur un jeu nullissime de la compilation ERE hits 1,
Mission 2.
Limite connue
-------------
Si pour une raison etrange, un fichier se charge dans la zone allouee a la
pile Basic (&AE8B-&B08A), la routine de sauvegarde ne fonctionnera pas, car
elle est logee dans cette zone. Libre a vous de bricoler le programme pour
implanter cette routine ailleurs (necessite une recompilation du fichier
source ERESAVE.ASM avec Maxam, plus une modification de son appel dans le
programme ERE-SAVE.BAS.
NOTICE TEXTE n° 2 (1.56 Ko)
; Ere Save * T&J GPA 2003
; Maj du 25/11/2004
; Version CPC 6128
ORG &AE8B
NOLIST
WRITE "ERESAVE"
filestart equ &3A6E ; adresse de depart du fichier (toujours &170 pour Basic)
filelength equ &01F3 ; longueur du fichier (a adapter)
fileexec equ &0000 ; adresse d'execution du fichier (a &0000 pour Basic)
filetype equ &2 ; 2 pour du binaire, 1 pour du Basic
JR main
filename db " . " ; nom du fichier (toujours 12 caracteres en tout)
main LD BC,&7FC0
OUT (C),C
LD HL,filename
LD DE,&C000
LD B,&C
CALL &BC77
LD HL,filestart
CALL &BC83
CALL &BC7A
LD BC,&1A1A
CALL &BC38
CALL &BB18
DI ; init complet du systeme pour un CPC 6128
LD SP,&C000
EXX
LD BC,&7F88
OUT (C),C
XOR A
EX AF,AF'
CALL &44
CALL &8BD ; &888 sur 464, &8BB sur 664, &8BD sur 6128
CALL &1B5C ; &19E0 sur 464, &1B5C sur 664, &1B5C sur 6128
CALL &1074 ; &1078 sur 464, &1070 sur 664, &1074 sur 6128
LD BC,&7F8D
OUT (C),C
EXX
EI
LD BC,&7FC0
OUT (C),C
LD HL,&ABFF ; reinit du systeme disk
LD DE,&40
LD C,&7
CALL &BCCE
LD HL,filename
LD DE,&C000
LD B,&C
CALL &BC8C
LD HL,filestart
LD DE,filelength
LD BC,fileexec
LD A,filetype
CALL &BC98
CALL &BC8F
RST &0