Cours de déplombage 22



Ecran
Ecran
Ecran
Ecran
Ecran


Disk : Gdf22.dsk
"-" files are DELETED files | "*" files are LOCKED files
----------------------------------------------------------------------
 A A$0000 (000000) L$01FB (000507) 003 HELLO
 T A$0000 (000000) L$5000 (020480) 080 T.KQ1.BOOT $57C6 $6633
 T A$0000 (000000) L$8300 (033536) 131 T.KQ1.BOOT $4000 $57C5
 A A$0000 (000000) L$0B84 (002948) 013 LECTEUR
*B A$0800 (002048) L$0783 (001923) 009 SCAN DISK EOR
 B A$0300 (000768) L$0024 (000036) 002 KQ1.VERIF MOVE MAINRAM
 B A$0901 (002305) L$0755 (001877) 009 KQ1.VERIFICATION $FF00.S
 T A$0000 (000000) L$6100 (024832) 097 T.COURS 22 REVISION 1.00
 B A$0901 (002305) L$0186 (000390) 003 KQ1.VERIF MOVE MAINRAM.S
 T A$0000 (000000) L$0400 (001024) 004 T.KQ1.VERIF MOVE MAINRAM
 T A$0000 (000000) L$0C00 (003072) 012 T.LES DERNIERES NEWS
 T A$0000 (000000) L$1100 (004352) 017 T.PARRAINAGE                 
 T A$0000 (000000) L$0600 (001536) 006 T.INTRODUCTION
 T A$0000 (000000) L$0500 (001280) 005 T.LES PROGRAMMES DE CE DISK
 T A$0000 (000000) L$0A00 (002560) 010 T.COURS D.ASSEMBLEUR 22

This catalog contains 15 files. 0 were DELETED.
----------------------------------------------------------------------


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


Sommaire


Lien Article
Voir Introduction.
Voir Cours 22 révision 1.00.
Voir Les programmes de ce disk.
Voir Cours d'assembleur 22.
Voir Les dernières news.
Voir Parrainage.

hr cours GDF

Introduction.


===============================================================================
COURS 22 INTRODUCTION : SIERRA ON LINE PROTECTIONS           Godfather , Oct 88
===============================================================================
REVISION 1.00



Salut!!

Ce cours très interessant car d'actualité (avant noel sont annoncés nombre
de merveilles sierra!) a été réalisé relativement rapidement (avant que les
nouveaux sierra n'arrivent, en quelques deux mois à peine!) mais vous permettra
de deplomber tous les sierra passés et à venir dans la série aventure cartoon
si excitante..

Moralité , voilà un beau cours bien interessant et bien utile..
et je vous souhaite bien bonne chance à son étude.. et à l'étude de la
protection sierra!...

Comme pour epyx, vous pourrez me demander des copies des originaux sierra
pour les deplomber vous memes, dés leur sortie en me postant alors un disk
avec une enveloppe timbrée et adressée, et en me donnnant le titre nouveau
désiré. ok? quand vous aurez eu vent que je l'ait eu.

On va s'amuser! croyez le bien.. ______________________________ Amicalement, G.


Retour sommaire

hr cours GDF

Cours 22 révision 1.00.


===============================================================================
COURS 22 REVISION 1.00 : SIERRA ON LINE 1988' PROTECTION              Godfather
===============================================================================

Salut et salut!

Voici un cours complet sur la protection actuelle de sierra on line, d'autant
plus actuelle qu'ils annoncent pour bientot (!) une tonne de nouveautés mafoi
très alléchantes.. et d'autant plus qu'ils ont déjà utilisé ce plombage de
nombreuses fois.. pour :
 _______________________________    *    __________________________________
!                               !       !                                  !
! King Quest I                  !   C   ! King Quest IV                    !
! King Quest II                 !   O   ! Leisure Suit Larry II            !
! King Quest III                !   U   ! Space Quest III                  !
! Space Quest I                 !   R   ! Manhunter                        !
! Space Quest II                !   S   ! Mother Gosse                     !
! The Black Cauldron            !       ! Gold Rush                        !
!_______________________________!   2   ! Police Quest I                   !
                                    2   ! Police Quest II                  !
                                        ! Silpheed                         !
                                    *   !__________________________________!

===============================================================================
PROTECTION : PREMIER DIAGNOSTIC
===============================================================================

Tous les originaux Sierra sont copiables au locksmith, mais la copie plante.
Disont plutot "lisibles" au locksmith. En effet, une "vérif de petite bete",
comme on en voyait par exemple avec la protection epyx, est présente sur
chaques originaux.. et il va nous falloir la déloger.

Je rappelle la méthode pour vérifier le format d'un disk sans pour autant avoir
à en faire une copie, il suffit de booter le locksmith rapide v6.0 only, et de
taper "1" (return) puis space. Avec l'original à tester en drive 1, (tapez 2
pour le drive 2), on est passé en option vérification format... s'il n'y a que
des points à l'écran après la vérification de tout le disk, c'est que tout le
disk est lisible. (ceci pour les fainéants qui préfèrent attendre 8 secondes
au lieu de 22 au locksmith!)..

Les chargements (les jeux étant tous en double haute résolution) étant toujours
très long, on trouve toujours un "please wait" au boot.. et c'est justement
pendant cette attente que l'original vérifie le disk, ou que la copie plante
sans faire de bruit. (elle ne rend pas la main : le programme doit se perdre
dans une boucle infinie genre jmp sur lui meme...)

Pour travailler, on va bien sur commencer par faire une copie locksmith de
l'original en question (la face de boot suffit bien sur, puisque c'est là
que réside le plombage!) et planquer l'original dans un lieu sur.

En attendant toutes leurs news, permettez.. on va travailler sur King Quest I.
Vous trouverez en effet une copie locksmith de ce soft (plombé) en face B!.

On ne considère pas vraiment que la vérif est au boot, dans le sens "au début
du boot" c'est à dire récupérable par un simple boot tracing comme dans le
cours 10; mais on va tout de meme essayer de boot tracer king quest "pour voir"

===============================================================================
1ERE ETAPE DU DEPLOMBAGE : ESSAI DE BOOT TRACING
===============================================================================

On commence comme toujours : 1600<C600.C700M , 16F8:4C 59 FF puis 1600G avec
la copie de king quest 1 dans le drive. On tombe sur 800- 01 et on liste le
boot1 en $0801. Voici ce que l'on trouve d'interessant (mais de pas vraiment
original pour ceux qui connaissent le boot 3.3 (cf cours 3)).

A noter :       $084A - JMP ($08FD)     avec $08FD: 00 B7 soit JMP $B700
C'est le jmp au boot suivant qui n'est autre qu'une rwts 3.3 des + classiques.

On continue le boot tracing comme pour tout boot 3.3 (16F8:A9 4C 8D 4A 08
A9 59 8D 4B 08 A9 FF 8D 4C 08 4C 01 08 , 1600G) et on liste le boot 2.
On doit remarquer le jmp au boot suivant, ainsi que le bloader :

$B700 - 8E B1 B7        STX $B7B1       ; On sauve le slot*16 en $B7B1,$B7E9
      - 8E E9 B7        STX $B7E9

$B706 - A2 FF           LDX #$FF
      - 9A              TXS
      - D8              CLD

$B70A - 20 84 FE        JSR $FE84       ; Initialisation page texte
      - 20 2F FB        JSR $FB2F       ; 40 colonnes. Mode Normal..etc...
      - 20 93 FE        JSR $FE93       ;
      - 20 89 FE        JSR $FE89       ;

$B713 - AD F3 03        LDA $03F3       ; $03F3 est l'adresse de CTRL-RESET
      - 45 A5           EOR $A5         ;
      - 8D F4 03        STA $03F4       ; si on presse reset : reboot!

$B71E - 20 48 B7        JSR $B748       ; Initialisation $B7E8+03, $B7E8+08

$B721 - A9 0B           LDA #$0B        , ?
      - 8D B2 B7        STA $B7B2
      - A9 32           LDA #$32        ; ?
      - 8D B3 B7        STA $B7B3
      - A9 40           LDA #$40        ; ?
      - 8D B4 B7        STA $B7B4

$B730 - 20 5D B7        JSR $B75D       ;

$B733 - A9 00           LDA #$00        ; ?
        8D B2 B7        STA $B7B2
        A9 00           LDA #$00        ; ?
        8D B3 B7        STA $B7B3
        A9 00           LDA #$00        ; ? Que des 00... bizarre!
        8D B4 B7        STA $B7B4

$B742 - 20 5D B7        JSR $B75D       ;

$B745 - 4C 00 40        JMP $4000       ; Jmp au boot3 (boot suivant).

Pour comprendre plus en détail ce bloader, on va devoir désassembler les deux
routines auquel il fait appel à savoir $B748 et $B75D. Les voici....commentées.




En $B748 (JSR $B748 en $B71E), on a ceci :

$B748 - A9 E8           LDA #$E8        ; On met l'adresse $B7E8 en ($FE)
        85 FE           STA $FE         ;
        A9 B7           LDA #$B7        ;
        85 FF           STA $FF         ;

$B750 - A0 03           LDY #$03        ; Y=3  ( ROUTINE Volume $B7EB = 00 )
        A9 00           LDA #$00        ; A=0
        91 FE           STA ($FE),Y     ; On met A dans ($FE)+3 soit $B7E8+3

$B756 - A0 08           LDY #$08        ; Y=8  ( ROUTINE BufferLow $B7F0 = 00 
)
        A9 00           LDA #$00        ; A=0
        91 FE           STA ($FE),Y     ; On met A dans ($FE)+8 soit $B7E8+8
        60              RTS             ;

Cette routine initialise donc $B7EB (le volume) à 00 de manière à ce que la
rwts de ce boot puisse lire les disks de tous volumes (on remarquera plus tard
que le repérage des diverses faces du jeu se fait au travers du numéro de
volume utilisé pour le formatage de ces faces.. méthode classique)...
et initialise aussi $B7F0 à 00 (le buffer low sera donc toujours 00, en
attendant un prochaine eventuelle modification). Donc, routine peu importante.




En $B75D (Deux JSR $B75D dans le bloader!), on a ceci :

$B75D - A0 04           LDY #$04        ; Initialisation $B7E8+04 (piste)
      - AD B2 B7        LDA $B7B2       ; qui est contenu en $B7B2 (avant jsr)
      - 91 FE           STA ($FE),Y     ;

$B764 - A0 05           LDY #$05        ; Initialisation $B7E8+05 (secteur)
      - A9 00           LDA #$00        ; secteur = 0
      - 91 FE           STA ($FE),Y     ;

$B76A - A0 09           LDY #$09        ; Initialisation $B7E8+09 (buffer hi)
      - AD B4 B7        LDA $B7B4       ; qui est contenu en $B7B4 (avant jsr)
      - 91 FE           STA ($FE),Y     ;

$B771 - A0 0C           LDY #$0C        ; Initialisation $B7E8+0C (commande)
      - A9 01           LDA #$01        ; commande = lecture.
      - 91 FE           STA ($FE),Y     ;

$B777 - AD B3 B7        LDA $B7B3       ; Nbre de secteurs.
      - F0 2C           BEQ $B7A8       ; si = 00 alors fin du chargement.
      - 20 A9 B7        JSR $B7A9       ; Lecture d'un secteur
      - CE B3 B7        DEC $B7B3       ; on décrémente le nombre de secteurs
      - 18              CLC             ;

$B783 - A0 09           LDY #$09        ; On incrémente le buffer_hi
      - B1 FE           LDA ($FE),Y     ;
      - 69 01           ADC #$01        ;
      - 91 FE           STA ($FE),Y     ;
      - 18

$B78C - A0 05           LDY #$05        ; On incrémente le secteur
      - B1 FE           LDA ($FE),Y     ;
      - 69 01           ADC #$01        ;
      - 91 FE           STA ($FE),Y     ;

$B794 - C9 10           CMP #$10        ; Si le secteur = $0F + $01,
      - 90 DF           BCC $B777       ; (non, alors on passe au suivant..)
      - A9 00           LDA #$00        ; (oui, alors...
      - 91 FE           STA ($FE),Y     ;  on remet le sect. à 00
      - A0 04           LDY #$04        ;  et on passe à la piste suivante).
      - B1 FE           LDA ($FE),Y     ;
      - 18              CLC             ;
      - 69 01           ADC #$01        ;
      - 91 FE           STA ($FE),Y     ;

$B7A5 - 4C 77 B7        JMP $B777       ; On revient pour la suite du chargemt.



Il faut donc renoter ces caractéristiques pour le bloader utilisé ici :

* $B7B2 mis en $B7EC ( $B7E8+04 ).. $B7B2 : Piste
* $B7B3 compteur du nombre de secteurs à charger
* $B7B4 mis en $B7F1 ( $B7E8+09 ).. $B7B4 : Buffer de chargement (adr.haute)
* Buffers de chargement croissants avec les secteurs.
* Secteurs croissants.

On peut donc ainsi comprendre sans probleme le bloader ci-dessus qui a pour
effet de charger depuis la piste $0B secteur $00 et à partir de $4000, dans
l'ordre des buffers et des secteurs croissants, $32 secteurs..  (lecture en
$4000-71FF des secteurs de la piste $0B 00 à $0E 01.).. puis pour effet
de se positionner en piste $00 secteur $00 (en lisant ce secteur en $0000).
Cela est bien étrange.. pourquoi se positionner en $00 00 ?? sachant que ce
secteur vient juste de se charger en $0800 lors du boot et qu'il est encore en
mémoire ??.. ca ne sert à rien de le relire, et surtout pas en $0000...

Seule explication : c'est là que doit se trouver la "petite bete"..
La vérif' de cette petite bete ne doit donc pas etre loin... car en effet,
quand on veut observer un terrain et que l'on se positionne juste au dessus,
c'est qu'on s'apprete à l'observer.. sinon, à quoi cela sert-il que l'on se
positionne ?????...

Voilà donc tout ce que peut nous apprendre ce bloader...
Que reste-t-il à faire ??.. ma foi, continuer le boot par ce qui vient de se
charger à savoir par le programmes (de $32 pages!) qui est chargé maintenant
en $4000. Pour cela, il faut continuer le boot tracer en interrompant le
programme lors du jmp $4000 qui se trouve en $B745. ($16F8 : A9 4C 8D 4A 08
A9 10 8D 4B 08 A9 17 8D 4C 08, $1710 : A9 59 8D 46 B7 A9 FF 8D 47 B7 4C 0 B7,
et 1600G avec l'original en drv1.. puis $4000L).

Pour étudier la suite du boot vous pouvez aussi vous reporter directement aux
secteurs de votre copie.. depuis la piste $0B secteur $00 et suivants...
C'est ce que j'ai décidé de faire pour varier les plaisirs..
d'autant plus que si on se rapproche de la vérif, il va falloir la destroy une
fois localisée sur le disk.. avec un éditeur de secteur, alors autant booter
tout de suite mon fétiche : Copy II+ 5.X du copy enfoires.
(si vous ne l'avez pas, demandez le moi vite!)

En suivant le code trouvé en $4000 (ou sur le disk en $B0 00 et suivants..)
et en l'assemblant, on en arrive très très lentement à un appel de la
vérification disk.. un premier appel sans doute.. mais il faut ici, vous
l'avez compris, tout décortiquer de A à Z.. c'est ce que j'ai bien commencé
à faire pour cette méthode et pour vous, mais cela s'avère la méthode la
plus lente et la moins sure qui soit..

Pour voir mon boulot à ce sujet, néanmoins très interessant s'il était
achevé car ceci correspond au "dos sierra", vous pouvez sans probleme
lister avec merlin pro (si vous ne l'avez pas, reclamez le!) les fichiers
sources suivants : "KQ1.BOOT $4000 $57C5" et "KQ1.BOOT $57C6 $6633".
Ecris sous mode texte, il faudra faire un "R) Read Source File" sous
merlin pro /Dos3.3.

Vous l'avez compris, et je l'ai compris trop tard.. continuer dans cette
voie - bien que tout cela soit très clean au demeurant - n'est qu'une
perte de temps.. on pourra bien sur revenir à ce listing pour vérifier
ce que l'on trouverait autrement, mais en attendan il y a mieux à faire..

Le boot tracing n'a mené à rien de concluant, voyons le sector editing..(!)

===============================================================================
2EME ETAPE DU DEPLOMBAGE : ESSAI DE RECHERCHE SUR DISK
===============================================================================

On sait exactement à quoi l'on a affaire.. à une recherche de petite bete
comme dans le fameux cours 10 sur la protection HLS/Epyx.

Je n'ai pas encore fait de cours sur les commandes drive.. je le sais..
(attention, ne pas confondre avec les commandes dos.)
Les commandes drive en assembleur, ce sont ces petits bouts de code qui
vous permettent de balader la tete de votre drive de haut en bas, de
droite à gauche, en travers, de lui faire lire le disk ou écrire,
de lui faire danser le mambo, etc.. (j'en rajoute à peine.. après mon
la bemol joué par la tete de lecture au boot de test drive, on peut me
croire un peu plus quant aux impossibilités que je rends possible, non ??)
(mais non, il se vante pas.. il s'éxalte le papi!, c'est tout!)

Bref, une commande drive à connaitre est le $C08C,X. X vaut alors slot*16
soit pour le slot 6 la valeur #$60. Ainsi , $C08C,X vaut $C0EC. $C0EC est
un commutateur tel les commutateurs graphiques par exemple ($C050,$C056..)
et voila et voila.. mieux qu'un commutateur, on en parle comme commande drive
sauf votre respect monseigneur.

En attendant un cours complet, donc, ces explications pour les curieux..
LDA $C08C,X BPL *-3 (ou LDA $C0EC..) equivaut à la lecture d'un nibble
(en mode read).. le nibble disk va etre lu bit à bit à chaque LDA $C08C,X
jusqu'à ce que le nibble soit lu completement (BPL..).

Pour les autres et les fainéants, il suffit de se rappeler que pour écrire
une vérification disk du type "petite bete", on a besoin de faire des accès
à cette commande d'une manière ou d'une autre.. en général par $C08C,X avec
X completant pour avoir $C0EC... ou par $C0EC directement.. ou avec une
autre adresse et une autre valeur de X (pour tromper l'ennemi, comme dans
la dernière protection electronic arts 88 de DrSmith) mais de manière à ce
que ca donne toujours $C0EC. Un vérification disk se faisant toujours au
niveau "nibblesque"..

Le LDA $C08C,X étant le plus utilisé, on va commencer par rechercher sur le
disk des 8C C0 ($C08C). Bootez un COPY II+ 5.x /Dos3.3 et faites dans le
sector editor, "S" pour /Scan for bytes option, puis entrez en "H"exa,
les octets 8C C0 à rechercher.

Vous allez d'abord en trouver sur la piste $00. C'est on ne peut plus normal
puisque la piste $00 contient toujours la rwts necessaire au chargement des
autres pistes, et la rwts passe toujours par une lecture de nibble (logique
puisque les infos disk sont stockées ainsi.. et qu'il faut bien les lire!),
donc directement par $C08C,X (ou autre selon les rwts tordues..)
Bref, on a deux cas concernant la vérif qui contient donc théoriquement
les octets 8C C0. Soit elle se trouve en piste $00 avec la rwts auquel cas elle
va logiquement (je n'ai pas dit "obligatoirement!") se charger au boot et
auquel cas le boot tracing la localisera (cas HLS/Epyx); soit la rwts seule
se trouve en track $00 (et peut etre dans les pistes $1,$2..aussi...comme
pour le prodos par exemple.. mais on néglige ca car c'est trop rare..)
et la vérif se trouve donc ailleurs..

Ne l'ayant pas localisée par boot tracing et ne voulant pas passer en revue
toujours le 8C C0 (nombreux!) de la rwts, il convient donc de commencer la
recherche en piste $01... ok? Et de cette piste, tous les 8C C0 (rares!)
trouvés seront décortiqués..

A vrai dire, on a de la chance car sierra a des programmeurs très clean..
en effet, on ne trouve la rwts (et ses 8C C0) qu'en track $00 et le seul (!)
8C C0 ($C08C) que l'on trouve en dehors (piste $01 à $22) est celui de ce
que l'on cherchait : la lecture de la petite bete qui fait qu'un disk est
vérifié comme étant l'original, et pas un autre...!

On va décortiquer comme je l'ai fait dés que le copy II+ 5.x a localisé ces
deux octets, la routine qui se trouve là...

===============================================================================
PARAMETRES CONCERNANT LES ORIGINAUX SIERRA PASSES..
===============================================================================

Pour King Quest 1   , on trouve cette vérif en piste $0E secteur $0F octet $02
Pour Black Cauldron , ________________________ piste $11 secteur $0F octet $__

===============================================================================
LA ROUTINE QUE L'ON VIENT DE LOCALISER SUR LE DISK.. EN RAM ??
===============================================================================

Pour étudier cette routine, on a préféré l'étudier directement telle qu'on
la trouve en ram c'est à dire en trouvant son point d'entrée éxact.
Pour cela, rien n'est bien difficile.. La première chose à faire est déjà de
booter le jeu et d'attendre qu'il plante (pour etre sur que la vérif' ait
toutes les chances d'etre en ram quelque part.. reste à trouver où.)
Bootez donc une copie locksmith, et quand elle plante, tapez Pomme_Ctrl_Reset
puis Ctrl_Reset rapidement pour passer au basic. Tapez ensuite CALL-151 et
vous etes en moniteur avec (presque toute) la ram intacte. On peut alors passer
par un scanner ram genre david dos ou autres (cf cours 8!) mais on ne trouvera
rien et pour cause : la vérif est en carte language en $FF00..
Comment j'ai pu avoir cette idée ?.. simple : le programme commence par un
jsr $FFB7.. (dans les premières lignes du code.. Cette routine est labellée
Disk dans le source ci-dessous..) .. on va donc y jeter un oeil..
Pour cela, après votre double pom/contr-reset, vous devrez lancer le
programme suivant :

* Vérif move mainram Sierra
* (C) GDF Aout 88 C22
* Mais on s'en fout!...

        ORG     $0300

        STA     $C083   ; Switche mode $F0..Bank
        STA     $C083   ;

Loop0   LDX     #$00    ; Move octets $F000 en $2000...
Loop1   LDA     $F000,X ;
        STA     $2000,X ;
        INX             ;
        BNE     Loop1   ;
        INC     Loop1+2 ;
        INC     Loop1+5 ;
        LDA     Loop1+5 ;
        CMP     #$30    ;
        BNE     Loop0   ;

        STA     $C082   ; Retour rom enabled.
        JMP     $FF59   ; End of routine.. back to monitor

Ce programme a pour effet de déplacer la ram $F000-FFFF en $2000-2FFF
afin que vous puissiez la décortiquer à volonté. Le code à taper en moniteur
est le suivant :

 $300: 8D 83 C0 8D 83 C0 A2 00 BD 00 F0 9D 00 20 E8 D0 F7 EE 0A 03 EE 0D 03
 $317: AD 0D 03 C9 30 D0 E8 8D 82 C0 4C 59 FF (puis tapez 300G).

(plus simplement, puisque la ram $FF00 Language card n'est pas effacée au boot
d'un dos, vous pouvez bootez ce cours et taper BRUN KQ1.VERIF MOVE MAINRAM
ce qui aura le meme effet..).

Un fois cette routine executée, vous pourrez lister $2F00 (equivalent du code
executable en $FF00) et retrouver la vérif disk retrouvée au sector editor :
C'est bien une vérification de disk original.. (recherche d'une suite de
bits formant ceci : #%11001001).

* Verification KING QUEST I
* (c) Sierra on line
* (k) Godfather , cours 22
* Aout 1988

        ORG     $FF00

Secteur =       $B7ED
Piste   =       $B7EC
Cmd     =       $B7F4
IOB     =       $B7E8
rwts    =       $B7B5

Count1  =       $BB00
Count2  =       $BB01
Count3  =       $BB02

HFF00   LDA     #$00    ; commande
        TAX             ; piste
        TAY             ; secteur
        JSR     Disk    ; seek piste $00 secteur $00

        LDA     #$00
        STA     $48
        LDA     $C089,X ; Drive on
        LDA     #$05
        STA     Count1

HFF13   JSR     D5AA96
        BPL     HFF19

HFF18   HEX     20      ; Piege pour ns troubler le listing!!!

HFF19   INY
        CPY     #$30
        EOR     $C08C,X
        BCC     HFF19
        LDA     $C08C,X
        BPL     HFF30
HFF26   CMP     #%11001001
        BNE     Plante

DrvOff  LDA     $C088,X ; Drive off
        JMP     Sortie

HFF30   NOP
        NOP
        LDA     $C08C,X
        BMI     HFF26

****************************

Plante  DEC     Count1
        BNE     HFF13
        PHA
        TYA
        PHA
        PLA
        JMP     DrvOff

Sortie  LDA     Count1  ; Sortie avec Count1 ds Accumulateur
        RTS             ; sortie de la vérification disk

D5AA96  LDA     #$1C
        STA     Count3

        LDA     $C08E,X ; Lecture mode
Retry   LDA     $C08C,X ;
        BPL     Retry   ; rd nib
FindD5  CMP     #$D5    ; search         ( D5 )
        NOP             ; tempo
        NOP             ; //
        BEQ     D5Found ;
        DEC     Count2  ; not found.. essai en moins?
        BNE     Retry   ; retry
        DEC     Count3  ; not found.. essai2 en moins?
        BNE     Retry   ; retry
        PLA             ; Tempo
        PLA             ; //
        JMP     Plante  ; Mauvaise sortie!

D5Found LDA     $C08C,X ; Rd Nib
        BPL     D5Found ;
FindAA  CMP     #$AA    ; Find :      ( AA )
        BNE     FindD5  ;
        PHA             ; Tempo
        PLA             ; //
AAFound LDA     $C08C,X ; Rd Nibv
        BPL     AAFound ;
Find96  CMP     #$96    ; Find :       ( 96 )
        BNE     FindAA  ;

*****************************

D5AA96Fd LDY    #$05
        JSR     wait
        CMP     #$AA
        BNE     Retry
        LDA     $C08C,X
        BPL     *-3
        CMP     #$AA
        BNE     Retry
        PHA
        PLA
loop0   LDA     $C08C,X
        BPL     loop0
HFF96   CMP     #$D5
        BNE     loop0
        NOP
loop1   LDA     $C08C,X
        BPL     loop1
        CMP     #$AA
        BNE     HFF96
        NOP
        LDY     #$00
        JSR     wait
        LDY     #$5B

***************************

wait    LDA     $C08C,X
        BPL     wait
        PHA
        PLA
        DEY
        BNE     wait
        RTS

****************************

Disk    STA     Cmd
        STX     Piste
        STY     Secteur
        LDA     #>IOB
        LDY     #<IOB
        JMP     rwts

Il n'est pas necessaire de la comprendre.. on s'en fout.. compte juste de
pouvoir reperer qu'elle ne fait que lire pour vérifier une petite bete
et qu'elle ne rajoute rien au programme qu'on la laisse avec l'original,
ou qu'on la déconnecte.. (pas comme dans certaines versions de la
protection epyx! par exemple..)

===============================================================================
CURIOSIOTE
===============================================================================

Par curiosité , on peut rechercher des JSR $FF00 dans le code que l'on a boot
tracé tout au début , et trouvé en $4000.. Regardez les sources, on trouve
plusieurs appels (notés dans ce source) à une routine en $FF00. On voit meme
la routine de chargement en ram de la vérif' disk.. en $FF00 oeuf corse et
toujours.

===============================================================================
DECONNECTER CETTE VERIFICATION DISK DIRECTEMENT SUR LE DISK
===============================================================================

Voyant par étude et listing de cette vérif qu'il suffit de la deconnecter
betement pour qu'elle n'ait plus aucun effet, il nous reste deux solutions pour
venir à bout de ce plombage.. le premier est de rechercher des appels à
cette vérif (rechercher des JSR $FF00 et les annuler par des NOP NOP NOP (EA)),
mais cette méthode ne nous garanti pas que nous avons trouvés tous les appels
à cette vérif (et qui vous dit que le soft ne charge pas une autre routine
indispensable cette fois-ci, et après la vérif, en $FF00 ??? et que vous
mutileriez donc ce programme!); donc.. no way baby! autre methode please..
ou la seconde solution consiste à mettre un RTS au début de cette vérif'
c'est à dire à laisser les appels à cette vérif' se faire mais qu'ils
tombent sur un RTS.

C'est la méthode la plus sage..

Pour King Quest 1 donc et par exemple, il suffira de mettre en piste $0E
secteur $0F octet $02, la valeur $60 (pour rts).

(il y a toujours un décalage, à vous de reperer le début du listing de
la vérif' dont je viens de vous donner le source ci-dessus)


Et c'est déplombé! ============================================================




                                        Que ce jour t'aime!,

                                                        Amicalement, Godfather


Retour sommaire

hr cours GDF

Les programmes de ce disk.


===============================================================================
COURS 22 PROGRAMMES : SIERRA ON LINE PROTECTIONS             Godfather , Oct 88
===============================================================================
REVISION 1.00


Vous trouverez en catalog sur ce disk...





*** Sources dos sierra on line

 T 131 T.KQ1.BOOT $4000 $57C5
 T 080 T.KQ1.BOOT $57C6 $6633

*** Utilitaires cracking sierra

 B 002 KQ1.VERIF MOVE MAINRAM
 B 003 KQ1.VERIF MOVE MAINRAM.S

*** Verification sierra source

 B 009 KQ1.VERIFICATION $FF00.S

*** Le cours, et les fichiers annexes

 T 097 T.COURS 22 REVISION 1.00
 T 012 T.LES DERNIERES NEWS
 T 017 T.PARRAINAGE
 T 006 T.INTRODUCTION
 T 005 T.LES PROGRAMMES DE CE DISK

============================================================== Bonne chance! G.


Retour sommaire

hr cours GDF

Cours d'assembleur 22.


===============================================================================
COURS D'ASSEMBLEUR #22 : CES QUESTIONS QUE L'ON SE POSE.. PART #1
===============================================================================

On m'a recemment posé la question suivante : Comment reconnaitre un IIe d'un
IIgs ? Comment un programme qui tourne peut-il savoir sur quelle machine il
tourne sans le demander à l'utilisateur ?

A priori la réponse est simple, puisque les roms du IIgs et de IIe sont très
différentes mais si l'on étend le probleme au IIe, //c, II+, II, IIgs etc..
la réponse est bien plus dure à trouver...

Voici le résultat d'une très très longue recherche, croyez le bien..
Voici le tableau de différence rom qui permet de définir précisement sur
quelle machine on travaille.


                    System         $FBB3    $FBC0   $FBBF
                   _______________________________________

                     Apple II        $38     $60     $2F
                     Apple II+       $EA     $EA     $EA
                     Apple IIe       $06     $EA     $C1
                     Apple IIe+      $06     $E0     $00
                     Apple IIgs      $06     $E0     $00
                     Apple IIc       $06     $00     $FF
                     Apple IIc+      $06     $00     $00


Le probleme reste posé entre le IIe+ et le IIgs.. En effet, aucun différence
rom n'est perceptible puisque les roms sont les memes.. le IIe kité en IIgs
boote en marquant IIgs et est un vrai IIgs!
seul moyen fou de faire la différence, ce petit programme à executer au cas
où vous trouviez les valeurs $06 $E0 $00 aux adresses citées ci-dessus, c'est
à dire si vous détectiez un IIe+ ou IIgs :

        STA $C082       ; Rom enabled
        SEC
        JSR $FE1F
        BCS It_Is_Apple_IIe+
        BCC It_Is_Apple_IIgs



Bonne utilisation, au cas de programmes spécifiques à telle ou telle machine,
de ces données, je l'espère, car répondre completement à ce pb m'a reelement
posé bcp de soucis..

_____________ Pour vous, toujours! _____________________ Amicalement, Godfather


Retour sommaire

hr cours GDF

Les dernières news.


===============================================================================
Liste des dernieres news Godfather                            Update : 24/09/88
===============================================================================
                                                         Last Update : 19/09/88
Utilitaires
-----------
Copy II+ 8.2  (Bit copier 3"5)  - 2 faces
Video Title Shop (pour VHS)     - 1 face.
II Write                        - 2 faces.
Art of Noise #1                 - 1 face. (musique)

Docs (80 colonnes)
------------------
Coolware 1                      - Journal sur disk! , 2 faces
SygmApple 01 , 02               - Journal sur disk! , 2 faces chaque
Doc on the rocks 17 , 18        - Nouvelles docs , 1 face each
Dox à Gaz numéro 01 , 02        - Docs en francais! très bien réalisé , 1 f.e.
HDC Network 1 , 2 , 3           - 2 faces , 1 f. , 1 f. (codes transpac)

Arcades
-------
Starfix 6                       - 2 faces , 128K
Dive Bomber                     - 2 faces , Epyx
Alf                             - 1 face
Ice Hockey (Indoor Sports II)   - Mindscape      ( Black Chest Software )
Test Drive + Fix                - 2 faces , 128k ( marche pas sur IIgs ).
Xevious    + Fix                - 1 face                (super jeu d'arcade!)
Force 7    + Fix                - 1 face  , 128k
Eagle Nest + Fix                - 1 face  , 128k
Paperboy   + Fix                - 1 face
Gauntlet                        - 2 faces      
Space Quest II                  - 8 faces , 128k
Death Sword                     - 1 face  , 128k

Role Aventure Simulation Wargames
---------------------------------
Pirates Nocode version          - 2 faces
King Quest III                  - 10 faces
Strike Fleet                    - 2 faces , le dernier eoa !
Alternate Reality II            - 3 faces
Bards tale 3                    - 4 faces
Wasteland                       - 4 faces
Death Lord                      - 3 faces
Le Justicier du Bahut           - 2 faces
Ultima 5                        - 8 faces
Echelon                         - 2 faces
Panzer Strike Africa            - 4 faces
Los Angeles Crackdown           - Epyx! , cf cours 10 et 10.2
The Shadows of Mordor           - 2 faces , black chest software
Sons of liberty                 - 2 faces.

Educatifs ou jeux nuls
----------------------
Alpha Builder                   - 1 f.
$100,000 pyramid                - 1 f. (jeu tv)
Batman                          - 1 f. (adv game)
Riddle Magic                    - 2 f.
Conjoncture                     - 2 f. (jeu tv)

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


J'attends votre réponse, quelle qu'elle soit, au plus vite!. Merci.


Retour sommaire

hr cours GDF

Parrainage.


===============================================================================
PARRAINAGE                                      Idée lancée le 07 juillet 1988!
===============================================================================
Update 07/07/88

                  DES COURS GRATUITS , CA VOUS INTERESSE ???

Les cours sont trop chers, me dites vous..?

Je peux m'en expliquer.. En effet, voila déjà 3 ans que j'ai commencé la
rédaction de cette vingtaine de disks de cours.. après 2 ans d'étude perso'
des systems de protections sur Apple.. et le prix de ces cours, croyez moi,
a souvent été revu en fonction de la demande. L'offre, elle est unique puisque
personne d'autre n'a eu l'idée de faire de tels cours dans cette forme là,
la seule vraiment efficace, c'est à dire avec des copies d'originaux...
et les prix sont étudiés en fonction de la demande.

Vous remarquerez tout de meme par exemple, que le prix moyen des cours est
de 140,150F.. et que le prix d'une heure de maths avec un prof particulier
tourne dans les memes zones de prix..

God knows that it does take much more than one hour of my time to write
suck a cracking lesson !..

Mais laissons cela..
Quoi que je puisse dire, les cours sont trop chers!...

Il y a deux méthodes pour avoir des cours gratuits..

La première ne conviendra pas à tout le monde, mais la deuxieme...hum!

Laissez moi vous en parler !...ok?

Méthode 1 : SI VOUS SAVEZ PROGRAMMER... il y a les concours gdf!
----------------------------------------------------------------
Dans certains cours (cours 5 entre autre...) vous trouverez les regles d'un
concours qui a déjà permis à deux personnes de gagner 5 cours gratuits!
Ce n'est pas rien.. pour un concours de programmation (aux regles précises
cependant..). et j'essaye, à chaque fois qu'un cours s'y prete, de donner
les regles d'un concours permettant de gagner des cours !..

Méthode 2 : SI VOUS VOUS BOUGEZ UN PEU... il y a le parrainage!
---------------------------------------------------------------
J'essaye dans la mesure du possible de faire passer des messages de "pub"
à propos de mes cours, partout où je peux.. cracking.. disks doc.. etc...
mais tout le monde n'est pas touché, et tout le monde n'y fait pas attention,
et tout le monde n'a pas un minitel pour m'appeler, etc..
Le parrainage consiste à me trouver des eleves pour mes cours, dans vos
relations!.. ne paniquez pas, ce n'est pas bien dur.. et ca rapporte à tout
le monde. Des cours aux nouveaux eleves, des cours gratuits au parrain de
cet eleve, et des cours vendus pour ma pomme...
Vous avez recu la liste de me cours, il suffit d'en parler à ceux que vous
connaissez et de chercher les personnes que ca branche.
Vous n'avez ensuite qu'à m'écrire un courrier bref avec votre adresse et
l'adresse ou les adresses des personnes interessées.. je leur envoie alors
aussitot la liste des cours ainsi qu'un courrier spécial, et dés qu'ils
m'auront commandé plus d'un cours, je vous posterais personnellement
LE COURS DE VOTRE CHOIX , et ce bien sur TOTALEMENT GRATUITEMENT !

Je suis obligé, vous le comprendre, de considérer un eleve comme tel
dés qu'il a prit deux cours au moins. à un cours, je ne peux pas dire
s'il va en prendre d'autre alors qu'à deux j'en suis plus sur, et je ne
désire plus donner deux cours pour le prix d'un (!) car je me suis fait
déjà arnaquer de la sorte par de faux nouveaux élèves.. j'espère que vous
comprendrez.. mais ca ne change que peu de choses. le résultat est le meme!!

Les cours sont trop chers ???

Remuez vous.. Balladez vous sur les serveurs aux rubriques Apple..
Parlez en à vos correspondants.. et communiquez moi des adresses..

Rien de plus simple pour avoir LES COURS QUE VOUS VOUDREZ , GRATUITEMENT !!

Merci de ne pas communiquer directement ma liste de cours.

                                                                Amicalement, G.
===============================================================================


Retour sommaire