!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
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 suivantENSUITE : - 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 EDDMK1Si 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 ! | ||