Cours de déplombage 20

Cours fourni par Kristo et LoGo. Merci à eux.

Gdf 20
Gdf 20


File: Gdf20.dsk
Disk: DOS 3.3 Volume 254 (140KB)
 Name                             Type Auxtyp Modified         Format   Length
------------------------------------------------------------------------------
*HELLO                            BAS  $0801  [No Date]        DOS        2444
 DEP FORCE 7                      TXT  $0000  [No Date]        DOS        5446
 T.APPENDIX UTILITAIRES           TXT  $0000  [No Date]        DOS       11151
 T.COURS 20 DATA                  TXT  $0000  [No Date]        DOS         895
 T.COURS 20 REVISION 1.00         TXT  $0000  [No Date]        DOS       41347
 T.INFORMATIONS                   TXT  $0000  [No Date]        DOS        3588
 T.INTRODUCTION                   TXT  $0000  [No Date]        DOS        2129
 T.LES PROGRAMMES DE CE DISK      TXT  $0000  [No Date]        DOS        1984
------------------------------------------------------------------------------


Floppy
DOS 3.3
Download Cours GDF 20 rev 1.00 (gzipped)


Sommaire


Lien Article
Voir Introduction.
Voir Informations.
Voir Cours 20 Révision 1.00.
Voir Cours 20 data.
Voir Les programmes de ce disk.
Voir Appendix utilitaires.
Voir Déplombage Force 7.

hr cours GDF

Introduction.


===============================================================================
COURS 20 : PROTECTION DATASOFT 1988 , INTRODUCTION                    Godfather
===============================================================================

Salut et salut,

Trois rub' dans cette intro...




Remerciements.
--------------
Permettez moi de remercier avant tout, les personnes qui ont permi
d'avoir ce cours dans vos drives aujourd'hui, mis à par moi, bien sur.

* Loockheed , Copperfield , et tous les membres du Black Chest.. pour les deux
  derniers originaux Datasoft, tous deux plombés identiquement, ce qui m'a
  donné l'idée et le matériel pour faire ce présent cours. Meme si l'idée
  d'origine est de moi (black chest), je ne pensais pas au départ que loockheed
  s'organiserait autant, et que l'on obtiendrait de tels résultats.

* Datasoft ensuite, puisqu'ils se mettent apparamment à réutiliser plusieurs
  fois leurs plombages, comme le font epyx par exemple, et broderbund ou encore
  eoa.

Le présent cours.
-----------------
Comme je vous le disait à l'instant, Datasoft a utilisé la meme protection sur
leurs deux derniers logiciels à savoir :

        - Alternate Reality , the Dungeon       ( role , aventure )
        - Force 7                               ( action )

En voici tous les détails, sources et explications.. et force 7 en face B.
Alternate reality , j'ai aussi l'original.. Dispo sur simple demande.
Alors, en espérant que cette protection continue, je vous souhaite déjà bonne
chance pour ce crack tout chaud !..

Fautes d'orthographe.
---------------------
Je suis certain qu'il est très désagréable pour vous de trouver des fautes
d'orthographe dans mes cours.. et il y en a.
Merci, quand vous en croisez une, de me la signaler (texte "il montait
'excalier" au lieu de "l'escalier" , ca me suffit pour retrouver la faute
et la corriger pour une meilleure version prochaine dudit cours.) par courrier
avec votre commande suivante.

                                                         Amicalement, Godfather
===============================================================================


Retour sommaire

hr cours GDF

Informations.



                        INFORMATIONS CONCERNANT LES COURS
                -------------------------------------------------
                         Fichier mis à jour ce 12 Mai 88!

===============================================================================
CINQ NOUVEAUX COURS : COURS 11.2, COURS 14.2, COURS 17.2, COURS 18.2, COURS 19.
-------------------------------------------------------------------------------
11.2 : TOUT sur les nouvelles techniques de mise en catalog. Un cours rempli de
       programmes inédits automatisant au maximum le boulot !.. tant que vous
       n'aurez pas lu et vu ce que contient ce cours, vous ne pourrez pas
       dire maitriser l'art complexe de la mise en catalog, qui que vous soyez!
       Avec le cours 11, ca forme la bible de la mise en catalog !
14.2 : TOUT sur la nouvelle protection d'Activision, employée depuis
       Garry Kitchen Game Maker sur une bonne demi-douzaine d'originaux de
       super jeux en tout genre ! et de plus, un plombage des plus interessant.
17.2 : TOUT sur la nouvelle protection d'Origin systems, employée sur Ultima5,
       qui est l'original de ce nouveau cours, et que l'on a beaucoup de
       chances de revoir bientot sur leur nouveaux softs, dont Space Rogue et
       Homecourt ( Basketball ). Leur protection est très originale...
       mais je n'en dis pas plus!
18.2 : TOUT sur les fixs de la seconde génération , à savoir les fixs sur
       des jeux de role ou d'aventure ( nouvelles techniques de recherche ) ,
       les fixs intégrés aux softs , ou "soudés" , etc.. avec tous les
       sources des routines necessaires , en catalog !
19   : TOUT sur les 18 secteurs de BR0DERBUND, et sur leur DOS 18s.
       Comment faire un copieur paramétré spécialement pour leurs nouveaux
       softs ? Comment controler la routine read/write/format 18 secteurs ?
       Comment se faire l'enregistrement magnetique avec les drives Apple ?
       Autant de questions qui trouveront un réponse dans ce nouveau cours !

===============================================================================
DEUX NOUVEAUX GODFATHER'S PRODUCTS (11,12) : ACCO'BOOT 1.00 + SHORT R/W/F
-------------------------------------------------------------------------------
GP11 : Pour s'incruster sur un boot (signature, fix integré, etc..), rien de
       plus géant que ce boot inédit style Tom E.Hawk boot!.. le programme
       est accompagné d'un fichier explicatif très complet, sur le mode
       d'emploi technique, et toutes les applications que l'on peut en faire..
       De plus, ici, un concours vous sera proposé. 1er prix : 2 cours gratuits
GP12 : La plus courte des routines disk, et à la fois la plus paramétrable..
       C'est la short read/write/format routine !..



LES NOUVEAUX COURS EN PROJET :
===============================================================================
COURS 20   REVISION 1.00 : PROTECTION ELECTRONIC ARTS 1980-1987 (MCODE)
COURS 20.2 REVISION 1.00 : PROTECTION ELECTRONIC ARTS 1988
(Originaux disponibles : Legacy of the Ancients, Chuck Yeager's Advanced
Flight Trainer, Wasteland, Death Lord...)



Et en plus :    COURS 01   REVISION 4.10  (Update 25/02/88)
                COURS 02   REVISION 1.2D  (Update 02/02/88)
                COURS 03   REVISION 2.51  (Update 06/03/88)
                COURS 10.2 REVISION 1.20  (Update 01/05/88)
                COURS 12   REVISION 1.90  (Update 12/05/88) Déjà disponibles !
-------------------------------------------------------------------------------
Et je le rappelle : toutes les révisions de cours sont gratuites !!


Retour sommaire

hr cours GDF

Cours 20 Révision 1.00.


===============================================================================
COURS 20 : PROTECTION DATASOFT 1988                                   Godfather
===============================================================================
Révision 1.00                                                 Update : 04/07/88




Salut et salut,

En premier lieu comme toujours, le menu du cours magistral qui va suivre :

La protection                   ( Protection Update 03/07/88 )
-------------
1. Les originaux Datasoft concernés
2. Protection de quel type ?
3. Allons y au nibble editor.. que trouve-t-on ?
4. Protection incopiable ?

Evolution de la protection Datasoft
-----------------------------------
1. Tomahawk                , Update 10/04/88 , Protection v2.00
2. Alternate Reality II    , Update 19/04/88 , Protection v1.00  (rappelez-vous
3. Force 7                 , Update 30/07/88 , Protection v1.00   ces numéros
4. Video Title Shop        , Update 03/07/88 , Protection v2.00   de version..)

Retrouver la vérif
------------------
1. Méthode /Boot tracing
2. Méthode /Scan octets.

Annuler la vérif
----------------
1. Source /Bloader + Vérif
2. Comprendre le fonctionnement de la vérif et l'annuler
2. Source /Move Ram_Aux



Je vous préviens tout de suite : ce cours se veut très complet. Tout est
expliqué, commenté, détaillé et argumenté. Je ne parle pas de faire quelque
chose sans détailler completement comment. alors, meme si ca peut vous paraitre
compliqué, croyez moi, c'est en réalité très simple !
Il suffit de lire, et d'essayer d'appliquer. Ok?

Alors bonne chance..!

L'original auquel ce cours s'applique tout particulièrement est le dernier jeu
d'action de chez Datasoft, c'est à dire Force 7. ( 1 face , 128K ).

Pour les autres plombages sur les autres softs, certains paramètres peuvent
varier, mais je les cite dans un des chapitres de ce cours.. no problem..
mais commencez d'abord par Force 7... would you ?

                                                         Amicalement, Godfather
===============================================================================
LA PROTECTION DATASOFT 1988 , C'EST QUOI ??
===============================================================================

1. Les originaux concerné par cette protection
----------------------------------------------
A ma connaissance, sont protégé à la base de ce plombage fou, les originaux
Datasoft suivants :

        - Tomahawk                                     ( Avril   1988 )
        - Alternate Reality II , The Dungeon           ( Avril   1988 )
        - Force 7                                      ( Juillet 1988 )
        - Video Title Shop                             ( Juillet 1988 )

Et, on l'espère, de nombreux futurs produits Datasoft.

2. Protection de quel type ?
----------------------------
La première chose à faire, je vous le dit toujours et encore, est de tenter une
copie locksmith de votre original. Surtout, ne l'auto-copiez pas.. c'est à dire
ne le copiez pas sur lui meme car, étant plombé, l'original deviendrait copie
donc planterait..c'est clair.

En en faisant une copie sur un disk vierge, vous devez remarquer ceci :

        - Le disk original est lisible jusqu'à la piste $1C
          (les pistes $1D à $22 sont illisibles comme non-formattées)
        - La copie ne boote pas completement.
          (on en reparlera plus loin)

3. Analyse au Nibble Editor
---------------------------
Bootez le disk Copy Enfoires par exemple ( pour Nibbles Away II vC3 ) ou
encore le Locksmith 6.0 ( en une face , pour le Nibbles Editor )...
et tapez Ctrl-R pour Read Nibbles. Entrez ensuite la valeur de la piste à
étudier c'est à dire ici $1D ( la première à étudier , les précédentes sont en
format normal 3.3 _ cf cours 6 ).

A l'édition de la piste $1D, $1E, $1F, $20, $21 ou $22, on ne voit rien de
bien spécial si ce n'est un désordre de nibbles écrits un peu n'importe
comment.. à vrai dire, la meme chose que l'on peut voir si on veut lire un
disk en ayant laissé le drive ouvert !.. peut-on conclure que ces pistes
ne sont tout simplement pas formattées.. oui, en toute logique.

Les pistes $1D et + ne contiennent donc aucune sorte de donnée du soft.

Il y a certains originaux datasoft, d'ailleurs (je pense à video title shop)
qui ont bien $22 pistes lisibles. Ceci s'explique après reflexion uniquement
que pour une question de vitesse dans les copies, l'éditeur a adapté son
copieur comme on peut adapter un locksmith (et qui dit que ce n'est pas un
locksmith adapté, cf cours 6), pour qu'il ne formatte et copie que le nombre
de pistes désiré, c'est à dire le nombre de pistes contenant des données
du soft.. et rien de +.. pour gagner du temps, donc.

La protection incopiable ne se base donc pas sur les pistes non formatées
comme on pourrait le penser.. alors allons voir sur une autre, la piste $1C
par exemple. ( T puis $1C , puis Ctrl-R ). Et là, on trouve un truc suspect

Voici le sector edit de la piste $1C au nibbles away II vC3 :

PTR=xxxx       ADR=xxxx        T=1C
-----------------------------------
B2F2B3FF FFFFFFFF FFFFFFFF FFFFFFFF     ; $FF de sync. secteur 00 piste $1C
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF     ;
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF     ;
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF     ;
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF     ;
FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF     ;
FFFFFFFF FFFFFFCF F3FCFFFF CCAA9684     ; CC AA 96 ! intrus !
C3BCCDA7 E7F9FEFF FFD5AA96 FFFEAAAA     ; D5 AA 96 puis adr.field 1C 00
AAAAFFFE DEAAEBFC FFFFFFFF FCFFFFFF     ; DE AA EB puis sync. puis data field.

Vous connaissez tout dans ce qui vient de s'afficher ( voir l'indispensable
cours 6 sur les nibbles / formattage disk ) et reste "l'intrus" dans cette
belle chaine de valeurs : CC AA 96.

Donc, il y a de fortes chances que le plombage de ce disk se base sur cette
série d'octets CC AA 96 avant le champ adresses des secteurs lisibles du disk,
puisqu'on retrouve cette suite à peu près partout sur le disk original.

Affaire à suivre.. et nous allons la suivre.. venez avec moi..

4. Cette protection est-elle incopiable ?
-----------------------------------------
Aucun programme de copie disponible à ma connaissance n'a été en mesure de me
fournir une copie potable de ces originaux.. faire un copieur adapté comme le
epyx copy ? je le ferais volontiers dés que j'aurais le temps... (à voir venir)

===============================================================================

Quand vous faites une copie d'un de ces originaux, et que vous la bootez..
le boot commence et s'arrete vite avec le message suivant à l'écran :
                     ______________________________
                    !                              !
                    !   PLEASE USE ORIGINAL DISK   !
                    !______________________________!

La chaine de nibbles CC AA 96 doit etre vérifié au boot, pendant la lecture
et le chargement ( bloader ) du programme.. un vérif au boot = ?

Boot tracing encore et toujours, bien sur !

Mais n'y a-t-il pas d'autres moyens ???.. Nous allons y penser :

===============================================================================
L'EVOLUTION DE LA PROTECTION DATASOFT
===============================================================================

Cette protection retrouvée jusqu'à présent sur 3 originaux DS a bien plus
changée que la protection Epyx retrouvée sur une bonne 15zaine d'originaux Epyx

Voici les numéros de version que j'ai donné à ces protections et modifications:

      * Tomahawk                        Plombage v2.00
      * Alternate Reality II            Plombage v1.00
      * Force 7                         Plombage v1.00
      * Video Title Shop                Plombage v2.00

Plusieurs paramètres ont changé ou pourraient changer :

      1. Numéro de la piste vérifiée ( une seule est vérifiée )
      2. Boot ( codages supplémentaires , adresses différentes.. )
      3. Adresses et/ou résultats de vérification différents (-tes), du bloader
      4. Codages supplémentaires au niveau de la vérification.

Nous allons voir dans la suite du cours tout ce qui a déjà changé dans ces
différentes versions de ce plombage.. tout est commenté et décortiqué comme
toujours pour que vous vous y retrouviez partout. suivez moi encore messieurs,
dames!

Protection v1.00        : Boot simple 3.3 , Bloader + Vérif non codée.
Protection v2.00        : Boot 3.3 codé , Bloader + Vérif non retrouvé sur disk

===============================================================================
RETROUVER LA VERIFICATION DU DISK ORIGINAL SUR VOTRE COPIE
===============================================================================

Nous allons comme convenu parler ici de la recherche de la vérif par 2 biais :

        - Boot tracing          ( Pv1.00 , v2.00 )
        - Recherche d'octets    ( Pv1.00 )

Je m'y lance..

-------------------------------------------------------------------------------
Méthode 1 : BOOT TRACING                     Protection v1.00 , Boot 3.3 normal
-------------------------------------------------------------------------------
Original : Force 7.

On commence comme toujours les boot tracing de la manière suivant :

*1600<C600.C700M
*16F8:4C 59 FF
*1600G

On examine le boot1 pour voir que c'est un bete boot1 de boot 3.3.
On trouve en $84A un JMP ($08FD) c'est à dire un JMP $B700. On va le modifier
par un JMP $1710 (après le boot tracer), adresse à laquelle on mettra un JMP
au moniteur. Il vous suffit de rentrer le code suivant :

*16F8:A9 4C 8D 4A 08 A9 10 8D 4B 08 A9 17 8D 4C 08 4C 01 08
*1710:4C 59 FF
*1600G

On examine ensuite le boot2 ($B700). C'est la suite de notre bete et classique
boot3.3. On trouve en $B741 un JMP $1E00 c'est à dire un JMP au boot suivant.
On va arreter le boot ici, pour examiner à son tour la routine en $1E00,
en faisant ceci :

*1710:A9 4C 8D 41 B7 A9 59 8D 42 B7 A9 FF 8D 43 B7 4C 00 B7
*1600G

Vous arrivez ainsi au boot2.. en $1E00..

Avant de passer à l'étude décortiquée de ce que l'on y trouve ( rien d'autre
que le bloader et la vérification du disk original, à dire vrai ! ), laissez
moi vous expliquer les autres méthodes de recherche de cette vérification et
décortiquer les différents cas qui surviennent du fait des modifications
apportées à cette protection au fil des originaux Datasoft..

-------------------------------------------------------------------------------
Méthode 1 : BOOT TRACING                         Protection v2.00 , Boot codé !
-------------------------------------------------------------------------------
Original  : Video Title Shop.

Notez qu'il faut bien sur taper ceci une fois la COPIE à boot-tracer, dans
le drive 1 !..

*1600<C600.C700M
*16F8:4C 59 FF
*1600G

En $801 on trouve ceci (ce qui vient de se charger au boot) :

*0801 : 4C 7E 08         JMP $087E

On regarde en $087E. On trouve ceci :

*087E : A2 79           LDX #$79        ; Octet x = #$79
*0880 : BD 04 08        LDA $0804,X     ; Adresse $0804 + x soit $087D
*0883 : 48              PHA             ; Décodage
*0884 : 4A              LSR             ; -
*0885 : 68              PLA             ; -
*0886 : 6A              ROR             ; -
*0887 : 9D 04 08        STA $0804,X     ; Sauve résultat ds mm adr.
*088A : CA              DEX             ; x = x - 1 (on remonte.. to $0804)
*088B : D0 F3           BNE $0880       ; qd. x = 0 (adr $0804) on arrete.
*088D : 4C 14 08        JMP $0814       ; saut à la routine décodée.

Ce programme, on le voit, décode la zone allant de $0804 à $0804+$79 soit $087D
c'est à dire tout ce qui suit le JMP $087E (adresse $0801) au début de ce
décodeur (adresse $087E). A la fin du décodage, le prog. saute en $0814.

Pour pouvoir aller plus loin, il faut décoder ce boot $0804-087D..

Nous allons utiliser cette meme routine de décodage en modifiant juste le JMP
final pour reprendre la main à ce moment là ( au moment où le JMP $0814 doit
s'executer, tout ce qui précède est décodé )...et lancer le décodeur.

Tapez donc ceci :

*088D : 4C 59 FF        JMP $FF59       ; Saut au moniteur

Pour modifier le JMP final ( reprendre la main après le décodage ), et ceci :

*087EG

Pour éxécuter le décodeur.

Vous entendez BIP, vous etes revenu sous moniteur comme à l'instant..
seule différence, le boot1 est décodé.. et vous pouvez le lister!
Allons y..

En $0804, après le JMP $087E ,nous trouvons ceci :

*0800- 01 4C 7E 08 04 45 06 5C
*0808- 00 2B 08 3D 00 00 0D 0B
*0810- 09 07 05 03

Le programme sautait en $0814, allons voir ce qui s'y passe :

*0814 : A9 0C           LDA #$0C        ; acc = 0C
*0816 : 4D 01 08        EOR $0801       ; eor 0C * 4C = 8C
*0819 : 8D 01 08        STA $0801       ; 801 = 8C

*081C : A6 2B           LDX $2B         ; slot*16 = 60
*081E : 8A              TXA             ;
*081F : 85 DF           STA $DF         ;
*0821 : 0A              ASL             ;
*0822 : 0A              ASL             ;
*0823 : 2A              ROL             ;
*0824 : 2A              ROL             ;
*0825 : 2A              ROL             ;
*0826 : 49 C0           EOR #$C0        ; C0 06 = C6
*0828 : 8D 08 08        STA $0808       ; $0808 = C6

Ce qui nous donne ( je le donne au passage ) ceci, en $0800 :

*0800 : 01 8C 7E 08 04 45 06 5C
*0808 : C6 2B 08 3D 00 00 0D 0B
*0810 : 09 07 05 03

Je continue le listing du boot décodé.. on trouve en $082B une routine move
de la zone $0805-$0808 en $0027 et de la zone $0809-$080C en $003E, que voici :

*082B : A0 03           LDY #$03        ;
*082D : B9 05 08        LDA $0805,Y     ; $0805 + 03 = $0808
*0830 : 99 27 00        STA $0027,Y     ; $0027 + 03 = $002A
*0833 : B9 09 08        LDA $0809,Y     ; $0809 + 03 = $080C
*0836 : 99 3E 00        STA $003E,Y     ; $003E + 03 = $0041
*0839 : 88              DEY             ;
*083A : 10 F1           BPL $082D       ;

On a donc en page zero maintenant (permettez moi encore un apparté) :

*0027 : 45 06 5C C6
*003E : 2B 08 3D 00

*083C : A4 28           LDY $28         ; $0028 = 06 = $0806
*083E : B9 0D 08        LDA $080D,Y     ; $080D + 06 = $0813
*0841 : A0 00           LDY #$00        ;
*0843 : 91 40           STA ($40),Y     ; $0040 = 3D , $0041 = 00 soit $003D

On a donc maintenant en page zero :

*003D : 03              ( car $0813 : 03 )

Je continue :

*0845 : AD 05 08        LDA $0805       ;
*0848 : 85 27           STA $27         ; $0027 = 45 = $0805

Ceci ne modifie rien.. car $0027 était déjà égal à $45.

*084A : CE 05 08        DEC $0805       ; Dec $0805 ( départ $0805 = 45 )
*084D : CE 06 08        DEC $0806       ; Dec $0806 ( départ $0806 = 06 )
*0850 : 30 0F           BMI $0861       ; Si  $0806 = FF then exit.

$0806 est le compteur du nombre de secteurs à charger.

Ce compteur est initialisé à 06 et se termine quand il est négatif, c'est
à dire après avoir chargé le secteur équivalent au compteur = 00.

$0805 est l'adresse haute du buffer où charger le secteur.

Ce compteur va de l'adr. $4600 à $4000. Le boot2 ira donc de $4000 à $46FF.
($3F+1=$40).

En $0852 suit la routine de chargement d'un secteur du disk en ram (boot2).
En $0861 suit la routine qui va saute au boot2 précédemment chargé (bmi $0861).

Rappelez vous des valeurs que l'on trouve en page zero (voir plus haut) :

JMP $0029 correspond à un JMP $C65C car $0029 = 5C , $002A = C6
JMP $003E correspond à un JMP $082B car $003E = 2B , $003F = 08

L'adresse $C65C correspond à la routine read_sector de la rom (boot0).
L'adresse $082B correspond à l'adresse de bouclage du bloader (next_sector).

*0852 : A9 08           LDA #$08        ; Adresse haute fin load_secteur rom
*0854 : 48              PHA             ; =08
*0855 : A9 5E           LDA #$5E        ; Adresse basse fin load_secteur rom
*0857 : 48              PHA             ; =5E
*0858 : A9 00           LDA #$00        ; /
*085A : 48              PHA             ; = $085E.
*085B : 6C 29 00        JMP ($0029)     ; Load sector via rom boot0.

On vient de le voir (ds les commentaires listing à l'instant) , après le
chargement du secteur par la rom ( JMP ($0029) = JMP $C65C ) , le prog.
continue en $085E. ( stack'ed ). soit ici :

*085E : 6C 3E 00        JMP ($003E)     ; Suite load , saut en $082B

Ce qui équivaut à un JMP $082B (Load Next Sector). Le compteur de secteur et
l'adresse buffer ayant été modifiés entre temps (entre deux lectures).

*0861 : A9 40           LDA #$40        ; Adr. $4000
*0863 : 85 03           STA $03         ;
*0865 : A0 00           LDY #$00        ;
*0867 : 84 02           STY $02         ; LDA ($02),Y = LDA $4000,Y
*0869 : A2 06           LDX #$06        ; Y=00 , X=06
*086B : B1 02           LDA ($02),Y     ; LDA $4000,Y
*086D : 48              PHA             ; Décodage
*086E : 4A              LSR             ; -
*086F : 68              PLA             ; -
*0870 : 6A              ROR             ; -
*0871 : 91 02           STA ($02),Y     ; STA $4000,Y
*0873 : C8              INY             ;
*0874 : D0 F5           BNE $086B       ; Loop
*0876 : E6 03           INC $03         ; Page suivante. ($4100...)
*0878 : CA              DEX             ; 6 pages ($FF octets) à décoder.
*0879 : D0 F0           BNE $086B       ; Loop

Après chargement donc, et décodage du boot2, le saut boot2 se fait enfin :

*087B : 4C CB 43        JMP $43CB       ; Saut boot2 chargé et décodé.

VOILA !! Nous avons enfin localisé le JMP boot2..

Revenons au boot tracer.. c'est bien ce qui nous interesse je crois..non?

D'abord un point : il n'est pas possible de lancer le programme tel quel
pour charger, après avoir tout décodé à la main, le boot2.. Celui ci ne
se chargerait pas, car la rom fait pleins d'initialisations folles avant
de pouvoir charger un secteur, et le fait que l'on ait trifouillé, entre
autre pour décoder ce programme, dans le moniteur, aura annulé toutes ces
initialisations indispensables à la bonne continuation du boot.

Pour boot tracer, il y a trois solutions applicables et trademark gdf :

1. Boot tracer en profitant du fait que l'on travaille sur une copie.
---------------------------------------------------------------------
Puisque l'on travaille sur une copie, on pourrait penser à
décoder le boot.. et à le resauver, décodé, sur une autre copie.
On pourrait donc, dés $16F8, avoir le JMP Boot2 en clair, et
le modifier le plus simplement du monde...

Pour cela, il suffit de décoder ce boot comme on vient de le faire
puis de le mover en $9000 (*9000<0800.08FFM) puis de booter notre
copy enfoires disk par un *C600G (et non pas par un Pomme-C-Reset),
et de taper "4" pour le disk fixer 4.00 dés le boot. Une fois
celui-ci chargé, tapez "Q" pour sortir en moniteur. Tapez alors
le move de notre secteur dans la zone buffer 0 de ce disk fixer 4.00
(*8000<9000.90FFM). Ensuite, relancez le disk fixer (*0800G) et
vous vous retrouvez en plein écran edit sector, avec votre
secteur de boot Datasoft déjà décodé à l'écran. Il ne vous reste
plus qu'à introduire une copie de votre original, et à sauver
ce secteur en secteur 00. Le secteur décodé est écrit.
Dernière chose à ne pas oublier : ce boot commence par un JMP au
décodeur...mais tout est déjà décodé. Ce décodeur se terminant
par un JMP $0814 et n'étant plus utile, nous allons donc remplacer
directement le JMP Décodeur par un JMP $0814. C'est une déconnection
de routine (jargon messieurs, jargon). Le JMP Décodeur, vous vous
en rappelez est en $0801. Il vous suffira donc de modifier l'octet
$01 du secteur 00 que vous venez d'écrire, de 4C 7E 08 en 4C 14 08.

Le JMP Boot2 étant en clair en $087B (octet $7B) il suffit de faire
le boot tracer suivant :

       *16F8 : A9 4C 8D 7B 08 A9 59 8D 7C 08 A9 FF 8D 7D 08 4C 01 08

Et de taper *1600G. Le boot2 sera chargé, pret au listing!

Mais vous pouvez aussi bien modifier directement l'octet $7B de
votre copie, puisque ce n'est qu'une copie, en $7B: 4C 59 FF..
et la booter ! Plus besoin de boot tracer!

Compliqué ? Peut etre au niveau des explications.. mais en pratique,
c'est très simple en vérité!

2. Boot tracer en sauvant le boot décodé
----------------------------------------
On repart du point où le boot a déjà été décodé, le jmp décodeur
remplacé par un jmp $0814 et le jmp boot2 remplacé par un JMP $FF59. ($7B)
On move cette zone en $9800. et on tape le boot tracer suivant :

        *16F8:4C 00 99

En $9800, on a le boot1 tel qu'il doit s'executer pour charger le boot2
et vous rendre la main en moniteur au bon moment. La technique que je
vais utiliser ici est la suivante : je vais remplacer le boot1 chargé
par le boot1 modifié, après - donc - le chargement du boot1, et avant
son execution bien sur. Ainsi, les initialisations ram seront faites
du fait du boot, et le boot s'executera de telle manière qu'il rende la
main. c'est bien ca aussi du boot tracing, messieurs.

        *9900:A0 00     LDY #$00        ; On move en $800 la page $9800
        *9902:B9 00 98  LDA $9800,Y     ;
        *9905:99 00 08  STA $0800,Y     ;
        *9908:EE 03 99  INC $9903       ;
        *990B:EE 06 99  INC $9906       ;
        *990E:AD 06 99  LDA $9906       ;
        *9911:D0 EF     BNE $9902       ;
        *9913:4C 01 08  JMP $0801       ; et on saut en $801.

3. Boot tracer et modifier le jmp boot2 en jmp moniteur, en codé!
-----------------------------------------------------------------
Le principe est simple. On veut boot-tracer de manière à ce que le boot1
se charge (codé), modifier avant de l'executer le JMP final (jmp boot2)
qui est lui aussi codé, et sauter en $0801. Seul probleme : le jmp à
modifier est codé, et le jmp que l'on devra y mettre en remplacement devra
aussi etre codé de manière a etre décodé et donné un jmp moniteur $FF59.

Il faut donc avoir une routine qui nous CODE un JMP $FF59 en trois octets
qui seront décodé par le décodeur du boot en un JMP $FF59... et mettre ces
trois octets à la place des 3 octets qui sont décodé en JMP Boot2.

Je vous redonne le listing du décodeur du boot :

*087E : A2 79           LDX #$79        ; Octet x = #$79
*0880 : BD 04 08        LDA $0804,X     ; Adresse $0804 + x soit $087D
*0883 : 48              PHA             ; Décodage
*0884 : 4A              LSR             ; -
*0885 : 68              PLA             ; -
*0886 : 6A              ROR             ; -
*0887 : 9D 04 08        STA $0804,X     ; Sauve résultat ds mm adr.
*088A : CA              DEX             ; x = x - 1 (on remonte.. to $0804)
*088B : D0 F3           BNE $0880       ; qd. x = 0 (adr $0804) on arrete.
*088D : 4C 14 08        JMP $0814       ; saut à la routine décodée.

Et voici le listing d'un codeur qui marche de pair avec ce décodeur :

*9000 : A2 06           LDX #$06        ; si l'on appelle 7 fois le décodeur
*9002 : 20 7E 08        JSR $087E       ; Jsr décodeur
*9005 : CA              DEX             ;
*9006 : E0 00           CPX #$00        ;
*9008 : 10 F8           BPL $9002       ; alors ca a l'effet inverse.
*900A : 60              RTS             ; (codeur).

Notez qu'avec ces deux armes, vous pourrez coder vos signatures par exemple
(voir cours 12) ou des images signatures (voir cours 5 et 9). Why not..
ou tout simplement du code à cacher (plombage?).

Le source d'un codeur/décodeur vous est d'ailleurs donné en catalog.
(fichier DS.CODE DECODE sous merlin pro). Vous voyez comme je suis prévenant ?!

Le boot a déjà été décodé et modifié (JMP $FF59 en $087B).
Il vous suffit de le recoder par un 9000G, en ayant mis en $088D ( à la fin de
la routine décodage ) un RTS, car je fais un JSR à cette routine.

Votre boot est maintenant modifié, et recodé.
Regardez ce qu'il y a en $087B. Notez les 3 octets qui suivent.

4C 59 FF , soit JMP $FF59 , donnera les 3 octets suivants :

Il vous reste maintenant à faire un boot tracer modifiant le jmp boot2 codé!

*1600<C600.C700M
*16F8:A9 .. 8D 7B 08 A9 .. 8D 7C 08 A9 .. 8D 7D 08 4C 01 08
*1600G

Vous vous retrouvez face au boot2! et l'adresse de lancement du boot2 était
l'adresse qui était en $087B (JMP Boot2) après décodage et avant modification.

-------------------------------------------------------------------------------
Méthode 2 : Recherche d'Octets               Protection v1.00, rien n'est codé!
-------------------------------------------------------------------------------
Original : Force 7

Je viens sans doute de completement vous embrouiller avec tous ces listings
dans tous les sens.. pardonnez moi, ca a été plus fort que moi (rires macabres)

Je vais maintenant vous montrer qu'en fait, en ce qui concerné le non-codé
(protection v1.00) il y a beaucoup plus simple que le boot tracing pour
retrouver la vérification.. en mémoire ou sur le disk..

Vous le savez, le plantage entraine l'affichage en texte de
"PLEASE USE ORIGINAL DISK". Et bien messieurs ,tenez vous bien.. il suffit
de rechercher ce texte (en ascii normal) avec un sector editor sur les disks
plombés v1 (force 7 par exemple), et vous le trouverez. ainsi que la vérif.
en quelques secondes !..

Vous pouvez aussi booter une copie.. attendre le message.. passer en moniteur
et recherchez ces octets sous force Ascii. (plutot que de tout faire à la main,
chargez un petit scanner d'octets en ram du cours 8, ds une zone qui ne
s'efface pas au chargement de cette vérif...vers $9000 par exemple pour
force 7. Vous pouvez prendre SCAN POMS par exemple qui est en $9000 si ma
mémoire est bonne...).

Pour les softs plombés en v2, meme scan disk eor du cours 8 n'arrive à
retrouver le texte étant donné que ce n'est pas un codage par EOR.

Dommage.. donc, ici, rien à faire sinon comprendre le décodeur!
comme on l'a fait ci-dessus.

===============================================================================
ANNULER LA VERIFICATION (FIN DU DEPLOMBAGE)
===============================================================================

Vous avez retrouvé la vérification du disk original en mémoire ou sur le disk..
aucun probleme jusqu'ici qui n'ait pas été clarifié plus haut, n'est ce pas ?

Si vous ne l'avez qu'en mémoire, il faut la rechercher sur le disk.
Si elle se charge en ram codée, notez les premiers octets de la vérif CODéE
et recherchez les au copy II+ 5.x option sector editor / scan for bytes.

Vous savez donc maintenant où elle commence en ram et sur le disk.

Voici pour mieux décortiquer la suite, la vérif' prise sur Force 7 qui est
sensiblement invariable au fil des originaux. ( source en catalog ).

*---------------------------------------
* Vérification disk Datasoft 1988
*
* Source détaillé par Godfather
*
* Cours de déplombage 20 , Datasoft 88
*
* Update version 1.00 : 29/6 au 3/7/88 .
*---------------------------------------
         ORG    $1E00

Slot     =      $B7E9    ; Slot (boot 3.3) = #$60
Reset    =      $03F2
Piste    =      $B7EC
Secteur  =      $B7ED
Buffer   =      $B7F0    ; Buf.lo . $B7F1 = Buf.hi
NbSect   =      $B7E1
ReadSkt  =      $B793
Screen   =      $0432    ; Adr. affiche mess "PLEASE USE ORIGINAL"

HOME     =      $FC58

*-------------------------
         BIT    LOWSCR   ; L'image est chargée.. on l'affiche.
         BIT    MIXCLR   ;
         BIT    HIRES    ;
         BIT    TXTCLR   ;
*-------------------------
         LDA    Slot     ; X=#$60
         LSR             ;
         LSR             ;
         LSR             ;
         LSR             ;
         ORA    #$C0     ; A=#$C6
         STA    Reboot+2 ; Slot reboot (err*)
         STA    H1191
*-------------------------
         LDA    #<Reboot ; Si on presse CTRL-RESET => Reboot
         STA    Reset    ;
         LDA    #>Reboot ;
         STA    Reset+1  ;
         EOR    #$A5     ;
         STA    Reset+2  ;
*-------------------------
Go_ver   JSR    Vérif    ; JSR VERIFICATION DISK ($1EF9)
*-------------------------
* Sortie vérif avec : $1EB9 = #$10
*                     $1EBA = #$0B

         JSR    H1003    ; BLOADER PROGRAMME.. BOOT CONTINUE OK.

* Une routine move ram/aux, a été chargée avec
* le boot2 ($B700) en $B500-B6FF. Elle est ici
* mise à son adr. d'execution, soit en $280...
* Le source de cette routine est sur ce disk.

         LDY    #$4F     ; Move de :
Lp1      LDA    HB600,Y  ;
         STA    H0380,Y  ; $0380+4F soit $03CF
         DEY             ;
         BPL    Lp1      ;
         INY             ;
Lp2      LDA    HB500,Y  ;
         STA    H0280,Y  ; $0280
         DEY             ;
         BNE    Lp2      ; à $0180

*------------------------- BLOADER JEU + JMP $1000

* LANGUAGE CARD 1 $D000-FDFF ( PISTE $1C,0D à $1A,00 )

         LDA    #$1C     ; Piste $1C ( à vérifier )
         STA    Piste    ;
         LDA    #$0D     ; Secteur $0D ( id. )
         STA    Secteur  ;
         LDA    #$2E     ;
         STA    NbSect   ;
         LDA    #$FD     ; Adr.hi buffer ( #$FD )
         STA    Buffer+1 ;
         JSR    ReadSkt  ; Read.

* Première des 2 vérifications des résultats de la vérif disk

Check1   LDA    H1EB9    ; Ils se croient malins de revérifier ça ?
         CMP    #$10     ;
Go_vérif BCS    Go_ver   ; Erreur read.. est-ce le bon disk.. (retry)

* LOAD 64K AUX.MEM par groupe de 3 pistes soit $30 pages.
*
* BLOAD1 $6000-$8FFF ( PISTE $19,0F à $17,00 )
* BLOAD2 $6000-$8FFF ( PISTE $16,0F à $14,00 )
* BLOAD3 $6000-$8FFF ( PISTE $13,0F à $11,00 )
* BLOAD4 $6000-$8FFF ( PISTE $10,0F à $0E,00 )
* BLOAD5 $6000-$8FFF ( PISTE $0D,0F à $0B,00 )

H1E63    LDA    #$8F     ;
         STA    Buffer+1 ;
         LDA    #$30     ;
         STA    NbSect   ;
         JSR    ReadSkt  ;

         LDA    Cnt_Aux  ; Paramètre d'entrée..
         STA    $FD      ; mis en $FD. (voir autre source)
         JSR    H0280    ; JSR $0280 ( MOVE ? )

         LDX    Cnt_Aux  ; Cnt_Aux = Cnt_Aux + 01
         INX             ;
         STX    Cnt_Aux  ; ( de 01 à 05 )
         CPX    #$06     ;
         BNE    H1E63    ;

         BIT $C081       ; ram enable
         JSR HOME        ;
         BIT TXTSET      ; Mode texte

* BLOAD $2000-8FFF ( PISTE $0A,0F à $04,00 )

         LDA    #$0A     ;
         STA    Piste    ;
         LDA    #$70     ;
         STA    NbSect   ;
         LDA    #$8F     ;
         STA    Buffer+1 ;
         JSR    ReadSkt  ;

* Construction clé $0FFF soit $1000 pour le RTS = JMP $1000

         LDA    Secteur  ; Secteur = #$0F
         LDX    #$05     ;
         PHA             ; P=0F,
:<       TXA             ;
         STA    H03BF,X  ; H03BF + $05 = $0F
         DEX             ;
         BPL    :<       ;
         TXA             ;
         PHA             ; P=0F,FF d'où adr. $0FFF soit $1000.

* Ultime vérification des résultat de la vérif disk

Check2   LDA    H1EBA    ; Ils se croient malins de revérifier ça ?
         CMP    #$0B     ;
         BCS    Go_vérif ; Erreur read.. est-ce le bon disk.. (retry)

* Saut au jeu ( JMP $1000 via RTS )

Go_Game  RTS              ; PLA PLA : FF 0F soit $FFF +1 soit JMP $1000
*-------------------------
Reboot   JMP    $C600    ; (poke ici slot^$C0 pour redemarrer itou)
*-------------------------
Cnt_Aux  HEX    01       ; Compteur de chargements ram_aux
H1EB9    HEX    DD       ; Résultat vérification disk 1
H1EBA    HEX    A9       ; Résultat vérification disk 2
*-------------------------
Tempo    STA    $DD      ; Deux boucles l'une dans l'autre
Wait_Lp  LDA    #$B4     ; et on compte des valeurs.. égal..
Wait_Val CMP    Wait_Val ; Wait_Val = $CD
         SEC             ; pas égal.. on continue..
         SBC    #$01     ; et le temps passe..
         BNE    Wait_Val ; et les oiseaux chantent..
         DEC    $DD      ; sur les branches, jusqu'à ce que..
         BNE    Wait_Lp  ; tout le temps se soit écoulé..
         RTS             ;
*------------------------- C'EST UNE INFAME COPIE.
Plante   BIT    $C081    ; ram enable.
         JSR    HOME     ; Efface l'écran.
         BIT    TXTSET   ; Passe en mode texte (était en HGR)
         BIT    LOWSCR   ; Passe en page1 texte
         LDX    #$12     ; #$12 caractères à afficher
:<       LDA    Texte,X  ; Prends caractère à afficher un à un
         STA    Screen,X ; Place ce caractère sur l'écran
         DEX             ; passe au caractère suivant..
         BPL    :<       ; et boucle ...

Plantage JMP    Plantage ; puis boucle infinie.. planté!
*-------------------------
Texte    ASC "PLEASE USE ORIGINAL"
*------------------------- VERIFICATION DISK ORIGINAL
Vérif    LDX     Slot    ;
         LDY     #$00    ; Initialisation valeurs de départ
         STY     H1EB9   ; résultats vérif.. qui vont bouger!
         LDA     #$4A    ; et swinguer!
         STA     H1EBA   ;

* Start Drive

         LDA    $C089,X  ; Drive on
         LDA    $C08C,X  ;
:<       CMP    $C08C,X  ;
         BNE    :<       ; Look for Start of Track ( sector 00 )
         LDA    #$FA     ; Wait before read
         JSR    Tempo    ;

* Recherche headers :    ( CC AA 96 )

Start_Rd LDA    $C08C,X  ; Lecture nibble
         BPL    *-3      ;
         DEC    H1EB9    ; Nibble lu (compteur -1)
         BNE    :>>      ; $FF?
         DEC    H1EBA    ; Nibble lu (compteur suivant -1)
         BEQ    Go_Plante ; Sortie.. PLANTAGE !
:>>      CMP    #$CC     ; Est-ce un nibble valide.      = ( CC )
         BNE    Start_Rd ; non.. on recommence;
         LDA    $C08C,X  ; Lecture nibble
         BPL    *-3      ;
         CMP    #$AA     ; Est-ce un nibble valide.      = ( AA )
         BNE    :>>      ; non.. on revient en arrière.
         LDA    $C08C,X  ; Lecture nibble
         BPL    *-3      ;
         CMP    #$96     ; Est-ce un nibble valide.      = ( 96 )
         BNE    Start_Rd ; non..

* Remet 00 en H1EB9

         STY    H1EB9    ; =======> STOCKE xx en HB7E9

* Recherche headers :    ( D5 DE AA EB )

Cnt_Veri LDA    $C08C,X  ; Lecture nibble
         BPL    *-3      ;
         INC    H1EB9    ; =======> MODIFIE VALEUR 01
         CMP    #$D5     ; Est-ce un nibble valide.      = ( D5 )
         BNE    Cnt_Veri ; non ?
Rd       LDA    $C08C,X  ; Lecture nibble
         BPL    *-3      ;
:<       CMP    #$DE     ; Est-ce un nibble valide.      = ( DE )
         BNE    Rd       ; non ?
         LDA    $C08C,X  ; Lecture nibble
         BPL    *-3      ;
         CMP    #$AA     ; Est-ce un nibble valide.      = ( AA )
         BNE    :<       ; non ?
         LDA    $C08C,X  ; Lecture nibble
         BPL    *-3      ;
         CMP    #$EB     ; Est-ce un nibble valide.      = ( EB )
         BNE    :<       ; non ?

         STY    H1EBA    ; =======> STOCKE xx en VALEUR 02

         INY             ; Y = Y + 1
         BNE    End_ver  ; Si Y <> 00 then FIN VERIF.
         RTS             ; Sortie .
*-------------------------
Go_Plante JMP   Plante
*-------------------------
End_ver  LDA    $C08C,X
         BMI    a
         LDA    $C08C,X
         BMI    a
         LDA    $C08C,X
         BMI    b
         LDA    $C08C,X
         BMI    b
         LDA    $C08C,X
         BMI    b
a        BIT    H1EBA    ; =======> USES VALEUR 02
         NOP
         NOP
         NOP
         NOP
         DEY
         BEQ    Check
         BNE    End_ver
b        INC    H1EBA    ; =======> MODIFIE VALEUR 02
         NOP
         NOP
         NOP
         NOP
         BEQ    Check
         BNE    End_ver
*------------------------- CHECK RESULTS
Check    LDA    H1EB9    ; Il faut sortir avec : $1EB9 = #$10
         CMP    #$10     ;                       $1EBA = #$0B
         BCS    Go_Plante ;
         LDA    H1EBA    ;
         CMP    #$0B     ;
         BCS    Go_Plante ; Sinon...plantage.
*-------------------------
Ok_Exit  LDA    $C088,X  ; Drive off
         RTS             ; ok. exit vérif

H0280   =       $0280
H0380   =       $0380
H03BF   =       $03BF
H1003   =       $1003
H1191   =       $1191
HB500   =       $B500
HB600   =       $B600
*-------------------------
TXTCLR  =       $C050
TXTSET  =       $C051
MIXCLR  =       $C052
LOWSCR  =       $C054
HIRES   =       $C057

Les programmeurs fous pourront comme moi la désosser completement. Mes
remarques en bord de listing devraient les guider parfaitement clairement
s'ils sont perdu un tant soit peu.

        COMPRENDRE LE FONCTIONNEMENT DE LA VERIF , ET L'ANNULER
     --------------------------------------------------------------
                        ( Fa - ciiiii - le ! )

Je vais ici simplement vous parler de ce qui est interessant pour nous, dans
ce listing assez long, ma foi.. ok?

La vérification a pour fonction de lire le disk , de recherche un CC AA 96
et d'autres nibbles D5 DE AA EB par exemple... et doit sortir avec deux
valeurs, ou bien planter.

Si le format lu par la vérif n'est qu'un format 3.3 locksmith, la vérif
le remarquera tout de suite.. et le message fatidique apparaitra.
Si la format lu est écrit par un copieur fou et contient bien le CC AA 96
etc.. la vérif sortira sans afficher le message mais les valeurs de sorties
ne seront pas les bonnes.. et une vérif plus loin dans le bloader de ces
deux valeurs entrainera un plantage et l'affichage du message "use original".

Toute copie donc, entrainera l'affichage du message "use original disk". Ok?
Mais à différents niveaux dans la vérif, non visibles de l'utilisateur.

On remarque en listant la fin de la vérif (label "check" et suite..)
que la vérif ne note rien de plus que deux valeurs qui ne sont pas
utilisées plus loin que dans la suite du bloader. On peut penser à
mettre les bonnes valeurs dans ces adresses, et à sortir de la vérif (RTS)
ou bien penser à completement détourner la vérif.

Dans les explications qui vont suivre, je vais parler en labels du source
car cette vérif est relogée selon les originaux, et les adr. changent trop.
Il vous suffit de rechercher le label dont je parle dans le source (merlin,
option "F" pour find) et de regarder les instructions qui s'y trouvent.
Enfin, il suffira de rechercher ces instructions dans une nouvelle vérif
relogée pour venir à bout d'un nouvel original datasoft. c'est simple.

Voici ce qu'il faut penser à annuler (1ere méthode) :
-----------------------------------------------------

        1. Annuler le JSR Vérif (Label Go_ver, au début du listing)
        2. Annuler la routine Check1 (annuler le CMP)
        3. Annuler la routine Check2 (annuler le CMP)

Ici, ca donnerait les modifications du source, suivantes :

Go_ver   NOP             ; au lieu de JSR Vérif (3 octets)
         NOP             ;
         NOP             ;

Check1   NOP             ; au lieu de LDA H1EB9 (enlevement facultatif)
         NOP             ;
         NOP             ;
         NOP             ; au lieu de CMP #$10
         NOP             ;
Go_vérif NOP             ; au lieu de BCS    Go_ver
         NOP             ;

Check2   NOP             ; au lieu de LDA H1EBA (enlevement facultatif)
         NOP
         NOP
         NOP             ; au lieu de CMP #$0B
         NOP
         NOP             ; au lieu d BCS Go_vérif
         NOP

Ou bien plutot (2eme méthode) :
-------------------------------

        1. Remplacer le JSR Vérif (Label Go_ver, au début du listing)
           par un JSR à une routine qui place les deux bonnes valeurs
           dans les deux bonnes adresses (sub-routine du meme type que celle
           vue dans les -fou,fou,fou- cours 10 et 10.2)

Ici, ca donnerait pour force 7, les modifications du source, suivantes :

Go_ver  JSR Poke         ; au lieu de JSR Vérif

Poke    LDA #$10         ; à la fin de la vérif, il reste tjrs un peu de place
        STA H1EB9        ;
        LDA #$0B         ;
        STA H1EBA        ;
        RTS              ; sub_routine (fin : RTS)

J'espère que cette étape ne vous posera aucun probleme : c'est la + importante


                     SUB-ROUTINE POUR LE CHARGEMENT
                  ------------------------------------

Nous avons vu dans ce source que le boot se faisait en chargeant une routine
en $B500; qu'il déplacait ensuite en $280..etc..
C'est une routine simple permettant le chargement de données en carte
auxiliaire (chat mauve, 128k, appelez là comme ca vous chante..).
Les données sont chargées en ram normale, puis movées en ram_aux.
Le listing complet et désossé de cette routine move_aux est en catalog
en fichier source sur ce disk.. en voici ici le principal (parms entry),
car elle complete le bloader ci-dessus.

* Routine chargée au boot FORCE 7
* Complément du bloader + vérif
*
* 3 pistes viennent de se charger de $6000 à $8FFF
* Il faut les placer en ram_Aux selon le compteur en $FD

H0280    LDA    $FD     ; Valeur de $01 à $05 ( buffer aux place )
         LDX    #$05    ; Vérifie les valeurs des cases ram_aux
Lp       CMP    Cat,X   ; à charger..
         BEQ    :>      ; si elles sont toutes à zero, alors
         DEX            ; ma foi..
         BNE    Lp      ;
         RTS            ; on rentre à l'appelé.. fin load ram_aux

:>       LDA    Cat     ; Zéro la case correspondant
         STA    Cat,X   ; à ce que l'on va y placer maintenant

         LDA    $FD     ; Sauvegarde le num.case à remplir
         STA    Cat     ; maintenant en Cat

         LDA    Buf,X   ; Prend l'adr.hi buffer équivalent...
         TAX            ; >X

* Copie cette routine en ram_aux

         ...
         ...

*------------------------------
Buf      HEX    60104070A0D0
*------------------------------
Cat      HEX    000102030405
*------------------------------




                                   La suite de ce cours dans le fichier 2... G.
===============================================================================


Retour sommaire

hr cours GDF

Cours 20 data.


===============================================================================
COURS 20 : PROTECTION DATASOFT 1988                                   Godfather
===============================================================================
Fichier 2                                                         Révision 1.00

Salut et salut les jeunes!

Fixs intégrés
-------------
1. Le bloader vs facilite tout ( réutiliser le bloader et changer le JMP Game)
2. Fix intégré au boot, via rwts du boot.

Copieur d'originaux
-------------------
1. Pourquoi aucun copieur habituel n'arrive à en tirer de bonne copie ?
2. Faire un copieur adapté à ce format vérifié.. comment faire ?

Complements
-----------
1. Mise en catalog , que peut-on envisager d'assez simple en fonction de ça ?
2. Mad compactor , fac-iiiii-le !..

===============================================================================


Retour sommaire

hr cours GDF

Les programmes de ce disk.


===============================================================================
COURS 20 : PROTECTION DATASOFT 1988 , LES PROGRAMMES DE CE DISK       Godfather
===============================================================================

Salut et salut,

Ce disk contient tous les programmes necessaires à la bonne compréhension et
application de ce cours, avec tous les sources merlin pro à l'appui comme tjrs.

A savoir...



BOOT TRACER DATASOFT 1.00                       ( nom : BT.DATASOFT )
-------------------------
Pour boot tracer vos originaux jusqu'à la vérif du disk original.
L'adresse de suite du boot (vérif) est affichée à la fin du boot tracing par
ce programme fou, dont le source est également présent.
C'est pas très balaise : boot3.3, comme on en parle ds ce cours 20.

VERIFICATION DISK DATASOFT                      ( nom : DS.VERIFICATION DISK )
--------------------------
La routine de vérif du disk, brunable.. et reconstituée en source.
C'est là le principal du cours. Le source est abondamment commenté comme tjrs.

ROUTINE RAM AUXILIAIRE MOVE                     ( nom : DS.MOVE MEM AUX )
---------------------------
La routine qui se charge en boot1 avec la rwts et qui est appelée par le
bloader , movée un $280 , pour charger des données en ram auxiliaire.

ROUTINE CODAGE / DECODAGE DATASOFT              ( nom : DS.CODE DECODE )
----------------------------------
La routine de décodage issue de la protection v2.00 de Datasoft vue dans
ce cours, avec la routine de codage adaptée. source en catalog.


Si vous avez d'autres idées de programmes ou de routines permettant de
faciliter le déplombage de tels softs, ou de les améliorer automatiquement
et sensiblement (mise en catalog, fboot, etc...?) , merci de bien vouloir
m'en parler.. pour améliorer ce cours comme vous le souhaitez.

                                                         Amicalement, Godfather
===============================================================================


Retour sommaire

hr cours GDF

Appendix utilitaires.


UPDATE 07/07/88

             TOUS LES UTILITAIRES DES COURS DE DEPLOMBAGE PAR GODFATHER
         ================================================================
                      BIBLIOTEQUE D'UTILITAIRES / APPENDIX

 Pour plus de renseignements, contactez moi en teletel3 code RTEL bal GODFATHER


Cours 1 : Tout sur les protections par Dos Patched                Révision 4.10
-------------------------------------------------------------------------------
Advanced Demuffin 1.1.................................................The Stack
Plomb Disk Patched v1.08..............................................Godfather

Cours 2 : Tout sur les protections par Dos 3.3 modifié            Révision 1.2D
-------------------------------------------------------------------------------
Break....................................................................Tsunoo
Dos 3.3 Boot Tracer...................................................Godfather
Adv Dem. Boot Tracer 1.2..............................................Godfather

Cours 3 : Tout sur la RWTS 3.3                                    Révision 2.51
-------------------------------------------------------------------------------
Source complet et commenté de la RWTS...................................Wozniak
Rt.Rwts........................................................................
Mobby Disk II.....................................................The Acs-Dijon

Cours 4 : Tout sur le DOS 3.3                                     Révision 2.65
-------------------------------------------------------------------------------
Source complet et commenté du Command Handler (DOS 3.3).................Wozniak
Disket-Scopie.......................................................Hebdogiciel
Dos Library 1.00 (en face B)..........................................Godfather
Disk Recovery....(en face B caché).............................................

Cours 5 : Tout sur la signatures d'images 32 sect. accès direct   Révision 3.61
-------------------------------------------------------------------------------
VENDU SEPAREMENT DU COURS : Scanner double haute resol...(c) Godfather's P. #10
Picscan (+ Source Reconstitué Merlin Pro).............................The Alien
Chasseur d'Images...............................................Frédéric Latour
Smart Scan + Error..............................................David Microcosm
Quick Seeker................................................Cochonou Crack Band
Picture Finder........................................................Mister DD
Indiscretion 2.00......................................................Patchman
Manual Scan.............................................................Copyart
Autoscan.......................................................rr...Chip Select
Graphique Scan...........................................................Gateau
Oucéti ? (+ Source Merlin Pro).....................................Oliver Twist
Loquesmisse 5.0 (Jansky.Scan)...............................Le comcombre masqué
Window Works +Doc vf............................................Nibble Magazine
Mega-graph...........................................................Mega Match

Cours 6 : Tout sur le Plombage/Deplombage par Dos Patched         Révision 1.60
-------------------------------------------------------------------------------
Plomb Disk Gdf v1.08 (Patched D4 AA EB)...............................Godfather
Locksmith 6.0 Plombeur................................................Godfather
Locksmith 6.0 Déplombeur..............................................Godfather
Locksmith 6.0 Copieur de softs plombés................................Godfather
Copy II+ 5.x Fixed.....................................................Patchman
Disk Muncher 8.0......................................................The Stack

Cours 7 : Trucs en vrac...                                        Révision 2.30
-------------------------------------------------------------------------------
Plomb.Disk7 Vérif.....................................................Godfather
Sread/Swrite (Ajoute deux commandes au DOS 3.3)..............Hardcore Computist
Convert Hex/Decimal......................................................Nibble
Comute_2*Haute résolution graphique....................Godfather / Oliver Twist

Cours 8 : Tout sur la recherche d'octets (2 faces)                Révision 3.10
-------------------------------------------------------------------------------
Disk Fixer 4.00................................................................
Copy II+ 5.x.............................................Central Point Software
Recherche d'Octets.....................................................Pom's 29
Core Disk Searcher...........................................Hardcore Computist
Scan Disk Eor 1.00.......................................................Kristo
Anstrom 2.00............................................Dany Sector from P.A.D.
Searcher..........................................................Captain Crack
Zap (version Dos 3.3 / David-Dos)..............................................

Cours 9 : Tout sur la signature d'images compressées              Révision 1.00
-------------------------------------------------------------------------------
Traitimage 1.4..................................................Frédéric Latour
Infogrammes Comp' Décomp'...........................................The Softman
Beagle Bros Comp' Décomp'...........................................Beagle Bros
C.C.B. Comp' Décomp'..............................................Laurent Rueil
Hebdo Comp' Décomp'.................................................Hebdogiciel
N.4 Comp' Décomp'..............................................................
Hires Pictures Scrunch' Unscrunch'.............................................
Pac Comp' Décomp'..............................................................

Cours 10 : Tout sur la dernière protection EPYX                   Révision 1.61
-------------------------------------------------------------------------------
VENDU SEPAREMENT DU COURS : Epyx Copy 2.64  (C) Godfather's Products.....Kristo
VENDU SEPAREMENT DU COURS : Epyx Boot Maker (C) Godfather's Products........Gdf

Cours 10 suite : Tout sur l'évolution de la protection EPYX       Révision 1.00
-------------------------------------------------------------------------------

Cours 11 : Tout sur la technique de mise en CATALOG simple        Révision 1.65
-------------------------------------------------------------------------------

Cours 11.2 : Les nouvelles techniques de mise en CATALOG          Révision 1.00
-------------------------------------------------------------------------------
New Break 1.00 (Réinitialise dos)............................................HC
Wildcard Maker 1.00 (Accès direct disk)...............................Godfather
Wildcard Maker Sam 1.00 (Fichiers RAM 3.3)......................Sam + Godfather
Fastload cat 1.00.....................................................The Stack

Cours 12 : Tout sur les signatures des boots en mode TEXTE        Révision 1.90
-------------------------------------------------------------------------------

Cours 13 : Tout sur la pratique : signature d'une l'image compr'  Révision 1.00
-------------------------------------------------------------------------------

Cours 14 : Tout sur les protections ACTIVISION. 1er Chapitre.     Révision 2.00
-------------------------------------------------------------------------------
VENDU SEPAREMENT DU COURS : PLOMBEUR ACTIVISION 1   (C) Godfather's Products #4

Cours 15 : Tout sur les protections $23 pistes                    Révision 1.10
-------------------------------------------------------------------------------
Vérification présence Piste $23 (source Merlin Pro)...................Godfather
Vérification en basic retenue (erreur).............................Oliver Twist
Disk Muncher 8.0 $23 pistes...........................................Godfather
D.O.S. Disk Optimizer System.........................................The Wizard
Nibbles Away II vC3............................................................

Cours 16 : Tout sur les protections ACTIVISION. 2eme protection.  Révision 1.00
-------------------------------------------------------------------------------
Acti.Demuffin (source Merlin Pro).....................................Godfather
Advanced Demuffin Activision...........................................Mister Z
Fast Boot Activision (source Merlin Pro!)...............Godfather et Activision
Crazy Copy...............................................Lock-Killer Laboratory

Cours 17 : Tout sur la protection actuelle ORIGIN SYSTEMS         Révision 1.00
-------------------------------------------------------------------------------
Origin.Demuffin (source Merlin Pro)...................................Godfather
Super_Iob.Ultima4............................................Hardcore Computist

Cours 17.2 : La nouvelle protection d'OSI : Ultima 5              Révision 1.00
-------------------------------------------------------------------------------
Adv.Dem 1.1 + Module Ultima 5.RWTS...............................Deny (THE ACS)

Cours 18 : Fixez vous la vie                                      Révision 1.10
-------------------------------------------------------------------------------
(Programmes de recherche d'octets du cours 8 à savoir maitriser..)

Cours 18.2 : Fixez vous les jeux d'aventure, et fixs integré!     Révision 1.00
-------------------------------------------------------------------------------
Fix modele............................................Captain Crack + Godfather
Fix vies..............................................................Godfather
Fix immortel..........................................................Godfather
Fix vies + immortel...................................................Godfather

Cours 19 : Protection 18 secteurs Gustavson BR0DERBUND            Révision 1.00
-------------------------------------------------------------------------------
Gogsmith 1.00.........................................The Highlanders (ACS+GDF)
Copieur 18.N6..........................................................Numéro 6
RWTS18...........................................................Stef.Gustavson

Cours 20 : Protection actuelle Datasoft                           Révision 1.00
-------------------------------------------------------------------------------
DS.Code Decode  (+Source)..................................Datasoft + Godfather
DS.Move Ram Aux (+Source)..............................................Datasoft
DS.Boot tracing (+Source).............................................Godfather
DS.Verification Disk (+Source).........................................Datasoft

Cours 21 : Protection Electronic Arts MCode                       Révision 0.00
-------------------------------------------------------------------------------
(en préparation)

Cours 21.2 : Protection Electronic Arts 1988                      Révision 0.00
-------------------------------------------------------------------------------
(en préparation)


Retour sommaire

hr cours GDF

Déplombage Force 7.


 _____________________________________________________________________________
!                                                                             !
! Cracking of FORCE 7     (C) DataSoft     COPPERFIELD & LOOCKHEED, le 8/7/88 !
!_____________________________________________________________________________!



   Voici donc le cracking d'un soft acheté par le Black Chest (auquel toute
personne sensée devrait etre un membre...). Ce soft est fait par une des
nombreuses sous-boites de Datasoft : Intellicreations, la meme boite, ou plutot
le meme programmateur qui avait fait Dark Lord, jeu d'aventure avec de superbes
musiques. Ce programmateur, Kyle Freeman, est à l'origine des musiques de Dark
Lord et de celle de Force 7 (soit dit en passant : toutes ces musiques sont
extraites et en catalogue, et seront réunies dans un recueil de musiques que
nous vous concoctons), chaque fois que vous verrez son nom, à la présentation
d'un soft, attendez-vous à avoir des musiques agréables aux tympans usés par le
bruit sourd du <CTRL-G>.



   Ceci-dit passons au déplombage proprement dit : malgré un beau soft, un
plombage trés médiocre, et à plombage rapide, déplombage rapide; à classer dans
les "déplombages minute".
 
   Tout d'abord premier test : essai de copie au LFB (Locksmith Fast Backup).
Résultat : le soft se laisse copier sans aucun problème, jusqu'à la piste $1D.
(Aprés cette copie sans problèmes majeurs, on se dit "facile !")
 
   Que cela ne tienne, essayons de booter la copie.
Résultat : un message trés sympathique et trés plaisant: "PLEASE USE ORIGINAL",
Ce qui est trés sympa pour nous, car le message n'est codé d'aucune façon,
comme tout etre sensé l'aurait fait par un EOR, AND, ou le fait de mettre le
message à l'envers, enfin...
(A ce moment on se dit "trés facile !") premier réflexe chercher le message
qui nous amène au plantage, simple, une fois arrivé à ce message fatidique,
faire un reset et booter un David Dos 1 (et si vous ne l'avez pas, comme moi,
malgré son utilité, faites vous rapidement un mover en page texte),
chercher le message, en remontant au dessus de ces mots doux, on trouve la
routine qui affiche ce message, en $1ECC soit P$01/S$E/$CC sur le disque,
rappelons nous-en on en aura besoin pour l'ultime phase...

   Maintenant grace à ce meme David Dos, chercher $CC 1E en ram, ce qui
correspondrait soit à un JMP $1ECC (4C CC 1E) soit à un JSR, un BEQ, etc...
   Une fois trouvé on regarde ce qui se passe au dessus et ainsi on arrive à
remonter jusqu'à la RWTS de Force 7, son point d'entrée est en $1E00 mais c'est
en $1EF9 que ça ce passe, et on voit vers cette adresse de nombreux $C08C
("Q6L", permet la lecture des nibbles...), suivis de CMP et BNE pas du tout
cathodiques, ils correspondent à la vérif' des bonnes entètes, autrement dit on
a mis le doigt sur la vérif'!!!

   On est content, on a trouvé la vérif', alors quoi? Et bien on NOPe tout ça
(assez bestialement, il faut dire), donc en P$01/S$F, mettre à partir des
octets suivant inclus, quatre $EA : en $25, $2E, $37, $46, $4F, $58, et $61.
Seulement voila si on laisse ça comme ça et que l'on boote la disquette, on
s'apperçoit rapidement qu'une fois sur quatre nous avons encore la joie et le
privilège de voir apparaitre sur l'écran la phrase magique "PLEASE USE
ORIGINAL", pourquoi? Parcequ'il arrive, à cause de tous les NOP que l'on a
mis que la RWTS, n'est plus aussi fiable qu'avant, elle n'arrive pas à bien
lire sur la disquette, car elle n'a plus de points de repères.

   L'ultime phase :
   Ben alors on est fichu? Si on ne peux meme pas compter sur la RWTS...?
Non car puisque la RWTS de Force 7 saute à la routinne qui affiche le texte,
dans deux cas seulement : en présence d'une copie ou en cas de mauvaise lecture
(quoique c'est le cas précédent qui entraine celui-ci!!!), et bien nous
n'avons qu'à mettre au début de cette routinne qui nous affiche le message
fatidique (pour l'instant!!!) un JMP début de routinne de lecture.
   Soit, pour concrétiser cette idée : mettre en P$1,S$E,$CC (ce qui correspond
donc au début de l'afficheur du message) : 4C 00 1E (à la place de 2C 81 C0)
   Ainsi les deux cas ne sont plus envisageables : d'un nous avons NOPé les
vérifs et de deux nous avons annulé le cas de mauvaise lecture qui ne se
produisait environ une fois sur quatre puisque dans ce cas précis on
recommence à lire.



   Il faut avouer que faire un fichier bien explicité sur le déplombage, prend
plus de temps que déplomber ce soft (10mn! contre plus de 45mn pour le
fichier!!! ).
 Pour tout vous dire sur ce soft et sur ce qui vous attend : une version fixée
du jeu fue faite par Captain Crack & The Jokersoft, mais nous nous rendimes
comptes que (comme souvent) que le jeu fixé perdait tout son intéret car une
fois arrivé à la fin du jeu (ce qui est enfantin avec la version fixée), il ne
se passe rien, pas de scrolling, pas de musiques, RIEN. C'est alors que nous
décidames de mettre une animation pour récompenser comme il se devait le
vainqueur du jeu, et pas n'importe quelle animation! Une animation en DHGR
monocromme, ce qui est à ma conaissance une premiere, sachant que cette
animation sera faite à la main (sans utilitaire... )!!!

  Alors à trés bientot pour une nouvelle version de Force 7, appelée Force 7.2!


  _ _ _ _ __ ______ _ _ __ _ __ _ _ _ _ _ _ _ _ _ _ __ _ _ __ _ _ _ _ _ _ _ _
 F_O_R_C_E__7______(_K_)__B_Y__C_O_P_P_E_R_F_I_E_L_D__A_N_D__L_O_O_C_K_H_E_E_D


Retour sommaire