!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> HACK Z APPLE, Collection Apple II
Cracking EDD 4 Plus

EDD 4 PLUS est le logiciel utilisable avec la carte EDD. Contrairement à toute attente il est protégé, ce qui paraît curieux car son objectif est tout de même de copier les autres logiciels. Bref, on peut toujours se dire qu'UTILICO MICROWARE a voulu fournir un exemple de copie difficile... car il est protégé par la redoutable technique d'insertion de bits qui laisse sur le tapis bon nombre d'autres logiciels...

A titre info la copie se fait avec la carte, en mode normal, de la piste 0 à la piste 13...



Les disquettes et fichiers extraits
Bootstrap 1 (Binaire)
Bootstrap 2 (Binaire)
Fichier EDD avec modifications (Binaire)
Bootstrap 1 (Source)
Bootstrap 2 (Source)
EDD4READER1 (Source + Binaire)
EDD4LOADER (Source + Binaire)
EDDMK(Source + Binaire)
EDDMKBMI2(Source + Binaire)
EDD4CREATE (Source + Binaire)

Bootstrap 1 desassemblé (comments in english)

Bootstrap 2 desassemblé (comments in english)
Récupération du bootstrap phase 1

Classique tracé de boot...
allez sous le moniteur
] CALL-151

vous avez le prompt moniteur

*








puis tapez (tracé de boot classique voir TRACE DE BOOT) :
8600 < C600.C700M
86F8 : 4C 01 88
8801 : 4C 65 FF
8600G

Vous récupérez alors la partie de boot placée en $800. N'oubliez pas :

      d'arrêter le moteur ($C0E8 pour le slot 6 drive 1)
      de la sauvegarder sur disquette
                        BSAVE BOOTSTRAP1,A$800,L$100

Désassemblage du Bootstrap 1 commenté


Récupération du bootstrap phase 2


Déplacement du boot 1
8800 < 800.900M

On passe directement au chargement sans passer par le nettoyage de la mémoire
880C: 4C 2E 88

On prévoit un chargement en $1400 plus que dans la page texte $400
Cette methode de chargement en page texte est très utilisée car le moindre reset élimine le code
884C: 14

On prévoit le stage suivant
88AD: 4C 00 84

Mais de toute façon on le bloque
8400: 4C 65 FF

Et c'est parti
8600G


Vous récupérez alors cette seconde partie de boot placée en $1400.

N'oubliez pas de la sauvegarder sur disquette
                        BSAVE BOOTSTRAP2,A$1400,L$200

Désassemblage du Bootstrap 2 commenté

Cette partie ne nous donne rien de moins que la routine de chargement du programme... autant dire qu'une grande partie du travail est réalisée pour la suite.
Récupération totale du logiciel

METHODE 1 : EN RESTANT UNIQUEMENT AVEC LE TRACE DE BOOT

Il n'y a pas véritablement de difficultés. L'objectif est laisser EDD se charger normalement, de déplacer les pages $00 à $08 et $B0 à $BF dans une zone qui ne sera pas affectée par la relance d'un DOS 3.3 ce qui nous permettra enfin d'avoir notre programme copiable. Vous modifiez donc la routine de chargement que vous avez en $8400 comme suit :

Modifications pour permettre le boot sans destruction de la mémoire

Modifications sur la routine de déplacement du bras

Mise en place de la routine pour déplacer les pages
	8700 :
	
 	ce qui correspond au source suivant  
	
	
ENSUITE :
- vous relancez le tout par un beau 8600G
Cela réalise le chargement EXACT d'EDD puis celui-ci une fois terminé, cela déplace :
- les pages 0 à 8 vers les pages $60 à $68 (jusqu'à $68FF)
- les pages $B0 à $B7 vers les pages $70 à $7F

MAINTENANT IL NOUS FAUT FAIRE UN EDD PROPRE ET EXECUTABLE

Après les manipulations précédentes, vous bootez un DOS 3.3 pour le réinstaller en mémoire car il a disparu en grande partie à cause du chargement d'EDD de $B000 à $BFFF. Attention, il ne faut pas utiliser un DOS 3.3 MASTER mais bien un DOS installé sur une disqutte par la commande INIT ainsi cela ne touchera pas ce que vous avez en memoire puis...

Il faut préparer le lancement d'EDD qui réalisera le repositionnement des différentes pages mémoire à leur place et son propre lancement, pour ce faire :

Vous modifiez le code en $800 par 800 : 4C 00 69
Vous tapez le programme suivant en $6900 :
	 6900 :
	 
	 ce qui correspond au source :
	 
	 
Vous lancez une disquette DOS 3.3 pour restaurer un DOS en mémoire puis il suffit alors de terminer par la sauvegarde du fichier sur une disquette VIERGE (car il est long) par :

BSAVE EDD4, A$800, L$7800

et vous avez votre programme déprotégé... en un fichier binaire certes un peu long mais tout à fait comme l'original. Vous pouvez vous amuser à réduire la taille de ce fichier en optimisant les déplacements de pages au minimum histoire de gratter quelques ko. Voici ce qui se passe en mémoire pour expliquer les manipulations




METHODE 2 : PAR PROGRAMMATION ... (TRES SIMPLE CEPENDANT)

Il faut d'abord reprendre le désassemblage du Bootstrap2, en particulier la routine de chargement, et de réaliser quelques modifications pour obtenir les adresses chargement en mémoire piste par piste. On en profite pour récupérer le dernier close marker de chaque piste de la T1 à la T12... puisque le T13 est connu c'est $DE ! (ça ne sert pas ici mais pour la suite ce sera utile...)
Le programme qui réalise cela est EDD4READER1 sur la disquette disk1
	Piste	Page   Marker 3	Zone mémoire d'implantation 
	$01	$40	$ED	$4000 à $47FF (8 pages)
	$02	$48	$E9	$4800 à $4FFF (8 pages)
	$03	$50	$E7	$5000 à $57FF (8 pages)
	$04	$58	$EA	$5800 à $5FFF (8 pages)
	$05	$08	$EF	$0800 à $0FFF (8 pages)
	$06	$10	$EA	$1000 à $17FF (8 pages)
	$07	$18	$EE	$1800 à $1FFF (8 pages)
	$08	$20	$ED	$2000 à $27FF (8 pages)
	$09	$28	$E7	$2800 à $2FFF (8 pages)
	$0A	$30	$EA	$3000 à $37FF (8 pages)
	$0B	$38	$E9	$3800 à $3FFF (8 pages)
	$0C	$B0	$EF	$B000 à $B7FF (8 pages)
	$0D	$B8	$DE	$B800 à $BFFF (8 pages)
	
En modifiant à nouveau notre programme, nous pouvons alors récupérer l'ensemble du programme EDD 4.

On crée une table des adresses de chargement et on inhibe le chargement d'adresse qui est dans la routine originale. Pour permettre une sauvegarde en DOS 3.3 la seule modification d'adresse de chargement est celle des pistes 12 et 13 que l'on placera judicieusement en $6000 et $6800. Cela n'a aucune espèce d'importance car pour le cracking nous ferons une routine qui remettra en ordre tout cela...

Le programme qui réalise cette extraction est EDD4LOADER qui est sur la disquette disk1

A ce stade on peut dire que l'on a bien tous les fichiers utiles puisque EDD4 ne fait plus d'accès disquette en cours d'exécution. Attention ce n'est pas le cas de nombreux programmes et cela révèle un test de vérification d'un ou de plusieurs systèmes de protection (nibble count, synchronisation, track-arcing ou autre).




Création d'une disquette à boot rapide

Vous avez certainement rencontré ce genre de disquette sans catalogue mais qui boote le logiciel comme l'original. Il n'y a pas de fichiers enregistrés mais bien uniquement le programme directement sur les pistes et c'est une table d'allocation piste /mémoire qui permet de recharger le dit programme. L'avantage est de donner l'impression d'avoir une disquette originale au format du DOS 3.3, l'inconvénient est que cela gaspille un tantinet la place. On a vu que pour EDD seules 14 pistes sont utilisées (de T0 à T13) et de ce fait sur les 35 il en reste 21 qui seront vides ! mais la question n'est pas là... ça fait plus joli.



Et c'est souvent ici que le cracker s'arrête car nous avons un programme copiable et sans protection : l'objectif escompté !

          ... mais le hacking consiste à être un peu plus curieux et à aller un tout petit peu plus loin...

donc maintenant "the must" : recréons un original EDD 4 PLUS !

Nous connaissons maintenant la structure d'une disquette originale EDD 4 Plus. La piste 0 ne pose pas de problème particulier pour la réécriture. Par contre il faut connaître la façon dont UTILICO à réalisé son insertion de bit de désynchronisation sur les pistes 1 à 13.

Modifions donc à nouveau la routine de lecture pour avoir les valeurs des nibbles XX situés avant et après la désynchronisation. C'est le programme EDDMK1 qui va nous le permettre. On constate que le premier XX est $FF et que le second est $FC.

Maintenant il faut lire ce qui est écrit derrière le $FF, c'est le programme EDDMKBMI2 qui va nous préciser tout cela. Le résultat est que nous avons sur chaque piste la séquence $FF $CF $CF



Il faut vérifier si 4 bits suffisent pour cette désynchronisation en examinant le nombre de cycles du programme de lecture La routine est la suivante :
MK8_XX  LDA        HC08C,X
        BPL        MK8_XX		; Marker 8 = $XX EDD l'ignore c'est le $FF trouvé par le programme EDDMK1
        NOP
        LDA        HC08D,X		; Arghhhhh !!!!!!!
        NOP
MK9_YY  LDA        HC08C,X
        BMI        MK9_YY		; Marker 9 = $XX EDD  
				; Pas un BPL mais un BMI, timing critique!

MKA_ZZ  LDA        HC08C,X
        BPL        MKA_ZZ		; Marker A = $XX EDD l'ignore c'est le $FC trouvé par le programme EDDMK1
Si on compte les cycles entre les deux accès $C08C,X nous avons au minimum :

BPL = 2 + NOP = 2 + LDA = 4 + NOP = 2 + LDA = 4 + BMI = 2 soit 16 cycles ce qui correspond bien à 4 bits.

Maintenant il nous suffit d'écrire le programme de fabrication d'un original EDD 4 Plus et nous aurons fait le tour de la question. Ce programme est EDD4CREATE présent sur la disquette DISK 3.



Et voilà ! si vous êtes arrivés ici vous savez maintenant comment déprotéger un logiciel. Ceci dit ce n'est pas toujours aisé dans la mesure ou vous pouvez avoir des logiciels qui font des cryptages ou testent la disquette lors des changements de niveau de jeux par exemple ou qui réalisent des chargements partiels. Cependant les principes restent strictement les mêmes ... de la patience, du désassemblage, de la programmation et surtout bien comprendre tout ce qui se passe sans jamais avoir un doute sur ce que le logiciel fait. La phrase culte du hacker : "Il y a toujours une voie !" ... mais c'est vrai que cela peut être long !