Cours de déplombage 21



Ecran
Ecran
Ecran


Disk : Gdf21.dsk
"-" files are DELETED files | "*" files are LOCKED files
----------------------------------------------------------------------
 T A$0000 (000000) L$8A00 (035328) 138 T.COURS 21 REVISION 1.00
 B A$2400 (009216) L$0069 (000105) 002 SG.BLOADER $0400
 B A$0901 (002305) L$04CE (001230) 006 SG.BLOADER $0400.S
 B A$0901 (002305) L$1ADB (006875) 028 SG.BLOADED $4100.S
 B A$4100 (016640) L$0300 (000768) 005 SG.BLOADED $4100
 B A$6000 (024576) L$1000 (004096) 018 SG.PASSWRD $6000             
 B A$0901 (002305) L$1818 (006168) 026 SG.PASSWRD $6000.S
 T A$0000 (000000) L$0600 (001536) 006 T.INTRODUCTION
 B A$0901 (002305) L$0264 (000612) 004 SCAN PROTECT VISU 1.00.S
 B A$0300 (000768) L$0067 (000103) 002 SCAN PROTECT VISU 1.00
 T A$0000 (000000) L$0600 (001536) 006 T.LES PROGRAMMES DE CE DISK
 T A$0000 (000000) L$1700 (005888) 023 T.APPENDIX PRIX COURS
 A A$0000 (000000) L$0B75 (002933) 013 HELLO
 A A$0000 (000000) L$0030 (000048) 002 SCAN PROTECT VISU
 A A$0000 (000000) L$01D3 (000467) 003 UTILITAIRES STARGLIDER
 T A$0000 (000000) L$0C00 (003072) 012 T.LES DERNIERES NEWS

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


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


Sommaire


Lien Article
Voir Introduction.
Voir Cours 21 révision 1.00.
Voir Les programmes de ce disk.
Voir Les dernières news.
Voir Appendix prix cours.

hr cours GDF

Introduction.


===============================================================================
INTRODUCTION COURS 21 STARGLIDER , PROTECTION PASSWORD                Godfather
===============================================================================
Révision 1.00                                                  Aout / Sept 1988



Salut et salut !!!

Vous allez voir, je n'ai pas chomé pendant ces vacances.. Il fallait bien que
je vous prépare un petit quelque chose d'appétissant pour la rentrée, non ?
Un nouveau type de protection - et donc de déprotection! - dans mes cours :
la protection mot de passe vue entre autre dans starglider de chez rainbird.

Super sympa..

Avec un nouvel utilitaire de scanning d'octets en catalog.. new wave!

Bon, je vous laisse..

Lisez bien mon cours et essayer - c'est un conseil d'ami - de tout reprendre
seul face à une copie de la face b (copie locksmith!) - pour déplomber
starglider. Il faut néanmoins s'y connaitre un minimum pas mal assez et
suffisament en assembleur.. m'enfin...

Bonne chance !!

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


Retour sommaire

hr cours GDF

Cours 21 révision 1.00.


===============================================================================
COURS 21 : Protection PASSWORD , Editeurs Anglais / STARGLIDER        Godfather
===============================================================================
Révision 1.00                                            Update : 01 Sept. 1988


Salut !!_

Voici le sommaire de ce giga-cours :

PROTECTION : PASSWORD  ,  ORIGINAL : STARGLIDER

1. La protection que l'on doit vaincre (!)
2. Localiser et lister la routine concernée (2 méthodes!)
3. Listing de cette routine "password" et commentaires
4. Annulation de la vérification

===============================================================================
INTRODUCTION
===============================================================================

Pour nombre d'editeurs, dupliquer une disquette ne peut etre fait que par
l'intermédiaire de sociétés de duplication industrielle garantissant des copies
100% identiques à l'original, c'est à dire garanties error free (sans erreurs)
aussi, bien souvent, plomber ces copies pose enormement de probleme, puisqu'il
faut comprendre comment adapter les machines multi-format de ces sociétés
barbares au format 'original' désiré.

La solution ultime et brutale est donc simple : mettre une demande de mot de
passe au debut du programme pour vérifier que l'utilisateur possede bien la
documentation du programme, vendue avec l'original. c'est une vérification,
c'est un plombage, c'est une protection anti-copie comme une autre.. mais
seulement un peu plus embettante pour l'utilisateur.. mais tellement plus
simple pour l'éditeur.

Cette solution a également été choisie par broderbund, mais certainement pas
pour des jeux d'action.. pour des jeux d'aventure en... texte! à savoir
mindwheel et breakers... et quelques autres titres récents. m'enfin...

A noter : si l'on enleve (en déplombant ce soft) la demande de mot de passe
(rébarbative, c'est certain) on a une copie plus agréable que l'original..
une copie plus sympa que l'original !.. sympa, ca.. non ?
et grace au cracker.. waouh !!

Allez.. assez de bla-bla.. let's go, folks!

===============================================================================
1. LA PROTECTION QUE L'ON DOIT VAINCRE : STARGLIDER
===============================================================================

La protection que l'on doit vaincre est une demande de mot de passe. Il faut
l'annuler purement et simplement. Starglider ne contient aucune protection
format.. en effet, le disk est entierement copiable au locksmith rapide et la
copie est 100% identique à l'original : la demande de mot de passe incluse!
Le déplombage ne passera QUE par la localisation de la routine assembleur (?)
qui demande le mot de passe, et par son annulation.

Le soft - que l'on parle de l'original ou d'une copie, donc - boote sous dos
et vite, après le titre - en texte - vous tombez sur le bla bla rébarbatif
suivant - ici traduit pour vous plaire - à savoir :

"Protection : On vous demande de rentrer un mot de la nouvelle (doc) qui se
 trouve etre à une page, paragraphe, ligne et mot indiqué ci-dessous.
 La ponctuation, les numéros de chapitres et les lettres doubles doivent etre
 ignorés. Vous aurez trois essais pour trouver le mot juste. Par exemple :
 page 2 paragraphe 3 ligne 2 mot 6 dans la nouvelle , le mot est 'bore'.      "

A vous de perdre alors du temps à trouver le bon mot dans les dizaines de pages
que fait la doc de ces jeux rainbird. Rébarbatif, il n'y a pas pire !...
le reste est simple, si vous entrez le bon mot.. le jeu commence. et dans
l'autre cas, le boot cesse après trois essais et vous devrez recommencer avec
un nouveau mot si vous tentez courageusement un reboot par pomme-ctrl-reset.

===============================================================================
2. LOCALISER LA ROUTINE PASSWORD                                   (3 METHODES)
===============================================================================

Il y a - en gros - deux méthodes pour localiser la routine de password, qui
sont le boot tracing (et suivre le code que l'on trouve jusqu'à la bonne
routine) et la recherche ram de la routine password après son chargement.

Comme toujours,je passerais en détails sur ces deux méthodes très interessantes
La methode de recherche ram est la plus rapide, la plus efficace, la plus tout
ce que vous voudrez.. mais je commencerais par la methode de boot tracing - et
meme mieux, de boot tracing décortiquant tout sur son passage avec
reconstitution des sources du bloder, etc.. - car elle vous appredra plus de
choses. Néanmoins, c'est la plus cool des deux (ram search) qui pourra vous
etre des plus utiles par la suite pour d'autres cracks fous. M'enfin...

Let's go folks..

                1ERE METHODE : BOOT TRACING et CODE TRACING
             -------------------------------------------------
                     ( Sources détaillés en catalog )

Quand on boote l'original de starglider (voir en face B), on doit noter ceci :

Le Boot de Starglider est apparemment un DOS 3.3 bete et méchant (voir le ])

Le Bloader se trouve en page texte (et on doit théoriquement le retrouver
en catalog) puisqu'on est sous dos 3.3. On va essayer donc de faire le CATALOG
de ce disk.

On essaye au boot de taper Ctrl-Reset qui n'est pas protégé (rare!)
puis on tape sous le prompt, la commande CATALOG qui ne donne rien sinon un
SYNTAX ERROR. Question : les commandes DOS auraient elles été changées ??..
on va voir ca, un peu plus loin.

On ne peut taper CATALOG avec le dos original ?.. Qu'à cela ne tienne, il
suffit de booter un dos quelconque et de taper cette meme commande avec
l'original de starglider dans le drive courant. Et on obtient un catalog simple
ne contenant qu'un seul fichier :

 B 003 STARGLIDER

On va donc essayer, toujours sous ce dos, de le charger. mais ]BLOAD STARGLIDER
ne marche pas !... encore une fois, on tombe sur une err* : FILE NOT FOUND.
Ca commence à faire beaucoup. Qu'ils changent les commandes dos , c'est
une chose.. mais inserer des caractères de control- (invisibles) dans le nom
des fichiers catalog, ca fait beaucoup pour pas grand chose.. En effet, ca ne
peut etre que ca.. On a vu ce type de protections dans le cours 4... Rappelez
vous. J'ai pondu tout un fichier sur le sujet en complement de ce cours 4 /DOS.

Pour voir le véritable nom de ce fichier, il suffit donc de booter un
Copy II+ 5.X (copy disk enfoires) et d'utiliser l'option CATALOG /FILE LENGHTS
sur le disk starglider (original). et on voir en effet que trois fois à la fin
de ce nom (juste après le R de -GLIDER) a été tapé Ctrl-C. On repasse donc sous
DOS 3.3 pour taper non plus ]BLOAD STARGLIDER mais ]BLOAD STARGLIDER suivi de
Ctrl-C, Ctrl-C, Ctrl-C.. puis <return>.

Et le programme se charge.. plus de file not found error* !!..

Pour retrouver ceci, on aurait aussi bien pu aller voir directement dans le
dos avec le sector editor du copy II+ 5.x, on aurait vu le nom véritable du
fichier de boot (STARGLIDER^c^c^c) ainsi que l'absence des commandes classiques
dos. (normalement en piste $01 secteur $07). m'enfin..

A noter aussi que pour charger ce fichier, on aurait pu simplement le renommer
toujours avec les utilitaires du Copy II+ 5.x.. avant de faire un ]BLOAD PRG
par exemple. ca aurait marché puisqu'on aurait fait disparaitre sous ce nouveau
nom personnel, les caractères de controle que l'on soupçonnait mais que l'on ne
connaissait alors pas encore.

En faisant ce bload, on remarque que le fichier en question - comme on l'avait
déjà remarqué au boot - se charge en page texte. Pour changer cela, il suffit
de taper : ]BLOAD STARGLIDER^c^c^c,A$2400 au lieu de le laisser se charger en
$0400 (page texte, première ligne).

Vous trouverez en catalog le source complet de ce fichier qui n'est qu'un bete
bloader utilisant d'une manière un peu torturée (pas habituée diront-nous) la
rwts 3.3 du dos original de starglider... et l'objet sauvé en $2400. (L$0069)
Il charge trois secteurs en mémoire à savoir :
                _____________________________________________
               !                                             !
               !   Adresse $4100   Piste $0F   Secteur $0F   !
               !   Adresse $4200   Piste $0F   Secteur $0E   !
               !   Adresse $4300   Piste $0F   Secteur $0D   !
               !_____________________________________________! puis va en $4100

Voici le source :

* Fichier de boot STARGLIDER
* Cours de Deplombage #21
* Godfather , Aout 1988
*
* BLOADER ROUTINE PASSWORD + PRG.
*
* Lecture de $03 secteurs
* Ordre Secteurs Decroissant Buffer Croissant
* Pistes décroissantes
* Piste $0F secteur $0F buffer_start $4100

        ORG     $2400

RWTS    =       $03D9
GETIOB  =       $03E3
BLOADED =       $4100

        LDA     #$0F
        STA     Piste
        LDA     #$03
        STA     Nb_Sect
        LDA     #$41    ; Buffer $4100
        STA     Buffer  ;
*-------
        JSR     GETIOB
        STY     $FE
        STA     $FF
*-------
Read    LDA     #$0F
        STA     Secteur
*-------
:<      LDA     #$01    ;
        JSR     Parms   ; Initialisation parms rwts iob
        DEC     Nb_Sect ;
        BEQ     Exit    ;
        INC     Buffer  ; Buffer croissant
        DEC     Secteur ; Sectr. décroissants
        BPL     :<      ;
        DEC     Piste   ; Pistes décroissantes
        BNE     Read    ;
Exit    JMP     Run     ;
*-------
Parms   LDY     #$0C    ; Init commande : 01 _ Lecture
        STA     ($FE),Y ;
        LDY     #$03    ; Init volume  : 00 _ Read Any Disk Volume
        LDA     #$00    ;
        STA     ($FE),Y ;
        INY             ;
        LDA     Piste   ; Init piste
        STA     ($FE),Y ;
        INY             ;
        LDA     Secteur ; Init secteur
        STA     ($FE),Y ;
        LDY     #$08    ; Init buffer_low : 00
        LDA     #$00    ;
        STA     ($FE),Y ;
        INY             ;
        LDA     Buffer  ; Init buffer_high : $41 (début)
        STA     ($FE),Y ;
*-------
        JSR     GETIOB
        JSR     RWTS
*-------
        LDA     #$00
        STA     $48
        RTS
*-------
Piste   HEX     00
Secteur HEX     00
Nb_Sect HEX     00
Buffer  HEX     00
*-------
Run     JMP     BLOADED

On va donc, pour pouvoir étudier la suite du boot, à savoir le programme que
l'on retrouve en $4100, modifier ce fichier en mémoire avant de le lancer,
en remplaçant le JMP $4100 par un JMP au moniteur (JMP $FF59 soit 4C 59 FF).

Le nom du fichier STARGLIDER^c^c^c est en catalog : SG.BLOADER $0400
mais est le code objet relogé en $2400.

Bloadez ce fichier, puis passez en moniteur et tapez à l'adresse $2466
les octets 4C 59 FF au lieu de 4C 00 41 pour modifier ce JMP puis lancez
le tout par un 2400G (lancez la routine en $2400). Vous vous retrouverez donc
presque aussitot (après le chargement de ce qui nous interesse en mémoire,
si vous avez bien pris le soin de laisser l'original de starglider en drive 1)
en moniteur. Vous n'aurez alors qu'à taper 4100L (list $4100).

En étudiant la routine (longue) en $4100, vous aurez pas mal de boulot pour
tout comprendre. ma foi, c'est ce que j'ai fait pour vous en catalog.
Le source reconstitué à partir du code en $4100 s'appelle SG.BLOADED $4100.S.
Vous devriez, par curiosité, aller y jeter un coup d'oeil avec merlin.pro.

Voici ce qui ressort de ce bloader $4100, d'interessant pour nous :
(c'est la routine qui charge TOUT le programme en mémoire)

J'ai repéré plusieurs routines interessantes.

D'abord, il y a un pseudo catalog en $42B9...que voici.

*-------
* Table des fichiers du disks.
*
* Ils commencent tous en secteur $0F
* Les parametres sont ordonnés ainsi :
*
* Piste / Nbre de secteurs à charger / Buffer Page
* Piste décroissantes
* Sect. décroissants
* Buffer croissant
*-------
H42B9   HEX 222020      ; $2000 - $3FFF Image
H42BC   HEX 2010D0      ; $D000 - $DFFF
H42BF   HEX 1F2DD0      ; $D000 - $FCFF
H42C2   HEX 1C0107      ; $0700 - $07FF
H42C5   HEX 1B4B44      ; $4400 - $8FFF
H42C8   HEX 161808      ; $0800 - $1FFF
H42CB   HEX 142020      ; $2000 - $3FFF Image
H42CE   HEX 101060      ; $6000 - $6FFF
*---
H42D1   HEX 0000
H42D3   HEX B942
H42D5   HEX B942        ; $42B9 , Adr. des parms du 1er fichier
*---
        HEX 0000
        HEX BC42
        HEX BC42        ; $42BC , Adr. des parms du 2nd fichier
*---
        HEX 0000
        HEX BF42
        HEX BF42        ; $42BF , Adr. des parms du 3eme fichier
        ... ....
        ... ....        ; etc...


La routine qui appelle ce "catalog" pour charger chacun des fichiers est
labellée dans mon source "LdFile" (pour load_file). Elle prend l'adresse où
se trouve les parms du fichier numéro x (dans l'accumulateur) et elle saute
au bloader de fichiers proprement dit. (label Bloader). Cette routine va
prendre à l'adresse des parms, les parametres pistes , nombre de secteurs à
charger et buffer de départ pour les mettres dans les labels correspondants
(voir ci-dessous) avant de charger ledit fichier avec ces parms-ci :

Piste   HEX 00          ; parms file to bload stockés ici
Secteur HEX 00          ;
Nb_Sect HEX 00          ;
Buffer  HEX 00          ;

*** PLACE LES PARAMETRES DU FICHIER A CHARGER DANS LES LABELS CI-DESSUS

Bloader LDY #$00        ; Charge parms de la table
        LDA ($06),Y     ;
        STA Piste       ;
        INY             ;
        LDA ($06),Y     ;
        STA Nb_Sect     ;
        INY             ;
        LDA ($06),Y     ;
        STA Buffer      ;
        JSR GETIOB      ;
        STY $FE         ;
        STA $FF         ; Adr.iob table en $FE , $FF

*** CHARGEMENT FICHIER

loop    LDA #$0F        ; On commence au secteur $0F . (each file!)
        STA Secteur     ;
LoopRd  LDA #$01        ;
        JSR RdSect      ;
        DEC Nb_Sect     ;
        BEQ endld       ;
        INC Buffer      ;
        DEC Secteur     ;
        BPL LoopRd      ;
        DEC Piste       ;
        BNE loop        ;
endld   RTS             ;

*** ROUTINE LECTURE D'UN SECTEUR AVEC LA RWTS           ($FE,$FF) = $B7E8

RdSect  LDY #$0C        ; Commande.
        STA ($FE),Y     ;
        LDY #$03        ;
        LDA #$00        ;
        STA ($FE),Y     ; Volume.
        INY             ;
        LDA Piste       ; Piste
        STA ($FE),Y     ;
        INY             ;
        LDA Secteur     ; Secteur
        STA ($FE),Y     ;
        LDY #$08        ;
        LDA #$00        ;
        STA ($FE),Y     ; Buf_lo
        INY             ;
        LDA Buffer      ;
        STA ($FE),Y     ; Buf_hi
        JSR GETIOB      ;
        JSR RWTS        ;
        LDA #$00        ;
        STA $48         ;
        RTS             ;

Ca, c'était pour vous présenter les quelques routines interessantes de
ce source de bloader.. on va y revenir bientot.

Ce qui nous interesse plus, à notre age, c'est la routine que l'on trouve
en $418C qui n'est rien d'autre que la routine principale du bloader.. celle
qui appelle et qui charge tout le programme (tous les fichiers vu ci-dessus
forment le programme complet de starglider, images, données et protection
comprise!).

Elle appelle la routine LdFile au départ en chargeant le fichier numéro $05
et elle passe aux autres en chargeant certains fichiers en mémoire auxiliaire.

*------
H418C   JSR LdFile      ; Charge un fichier du "catalog"
        CMP #$01        ;
        BNE H4196       ;
        JSR LC          ; charge les fichiers en aux
H4196   CLC             ;
        ADC #$01        ; charge fichiers 01 , 02 , 03 , 04
        CMP #$04        ;
        BNE H41AC       ;
        STA H418B       ; H418B : num. last file loaded (not7)
*------

Voilà!

A ce moment là, tous les fichiers sont chargés.. et le programme continue par
un JSR $6000. Il se situe à peu près au bon endroit dans le boot (après le
chargement, dés que le drive s'arrete de tourner) pour pouvoir etre la routine
de demande de mot de passe.

On fouille, alors fouillons!..

*------
H41A0   JSR $6000       ;
        JSR HGR         ;
        JSR LC          ;
*------

Pour pouvoir étudier la routine en $6000, ou tout le reste de la ram chargé,
le mieux - pour récupérer toute la ram intacte - est de bloquer le programme
au moment de ce jsr $6000 en remplacant ce jsr par un jmp au moniteur. ($FF59)
Pour cela, tapez en moniteur : 41A0:4C 59 FF et lancez le bloader par $4100G.
Dés que ca plante, après l'image de boot, vous n'aurez qu'à lister $6000.

Vous pouvez également bestialement arreter le programme par pomme-ctrl-reset
et d'un ctrl-reset très bref.. comme on sait tous le faire.. mais vous perdriez
quelques octets (2 par page / $FF octets).. alors vaut mieux etre clean.
Ou encore utiliser break, en tapant ctrl-reset dés que le drive stoppe.
(voir cours 11 ou cours 11.2 ou encore certains deplombage mode d'emploi).

Si vous récuperez la routine $6000 intacte (aucun probleme!) et que vous la
lancez calmement du moniteur par un 6000G, vous comprendrez tout de suite que
c'est bien la routine de demande de mot de passe. en effet, dés 6000G, le titre
du jeu s'affiche et dés que vous appuyez sur une touche, le bla bla fou du
plombeur apparait!.. et suit la demande de password aléatoire.

ON VIENT DONC DE TROUVER , EN BOOT TRACANT CALMEMENT , LA DEMANDE DE PASSWORD !

On l'étudiera plus loin dans ce cours.. et on va voir aussi plus loin,
comment l'annuler en étant sur que le programme est bien déplombé.

On remarquera, puisque l'on a tout compris - si vous lisez attentivement le
source du bloader $4100 en catalog - que la routine password est en catalog
dans le pseudo catalog rainbird vu ci-dessus. C'est d'ailleurs le dernier
fichier du catalog (adresse : $42CE). Les parms de ce fichiers indiquent
qu'il se trouve en piste $10 secteur $0F jusqu'en $10 secteur $00. (on le
reconnait à son buffer $6000).

ON VIENT DONC DE TROUVER LA ROUTINE PASSWORD SUR LE DISK !

On aurait pu, puisqu'on la connait en mémoire, rechercher les premiers octets
de cette routine sur le disk, sans avoir à lister et refaire tous ces sources..
je vous l'accorde. et on l'aurait tout aussi efficacement localisée en $10 0F.
M'enfin.. soyons clean. et passons à la seconde méthode pour la retrouver.

Faut qu'ça swingue !...


                2EME METHODE : RECHERCHE BESTIALE EN RAM
             ----------------------------------------------
             (Ou: comment trouver cette routine en 30 sec.)

Un déplombeur est toujours à la recherche d'indices quand il part de zero
pour trouver une routine. Il peut, comme on vient de le faire ci-dessus,
tout lister, tout comprendre, pour finalement trouver ce qu'il cherche après
plusieurs heures (!) de recherches, ou encore y aller plus au flair, à la ruse
et à la peche aux indices. C'est la deuxieme méthode qui pourra encore bien
vous etre utile par la suite pour d'autres cracks ram de ce genre.

Il s'agit d'abord d'avoir ce texte et la routine que l'on recherche, en ram
au moment de la recherche que l'on va commencer ici. Pour cela, il suffit
d'interrompre le programme au moment de cette dite demande de mot de passe.
Si vous n'avez pas de rom modifiées comme moi (je pense à vous à ce sujet,
c'est pour bientot _ Je cherche des eproms pas cheres!) pour tout interrompre
à volonté, l'idéal est d'utiliser break pour tout avoir intact (cf cours 11).
Vous pouvez cependant aussi faire pomme/ctrl-reset*2.. m'enfin..

On a donc la main en moniteur (CALL-151 si besoin est) avec en mémoire
"quelque part" le texte qui accompagne la routie password.
On va y aller à l'oeil. Vous allez comprendre pourquoi.. tapez d'abord la
routine suivante en $0300 (zone ram libre) :

$0300-   A2 00          LDX #$00        ;
$0302-   BD 00 08       LDA $0800,X     ; get tous les octets ram..un à un..
$0305-   49 80          EOR #$80        ; passe en mode normal texte.
$0307-   20 ED FD       JSR $FDED       ; affiche mémoire
$030A-   E8             INX             ; octet suivant meme page memoire
$030B-   D0 F5          BNE $0302       ;
$030D-   EE 04 03       INC $0304       ; page suivante mémoire
$0310-   AD 04 03       LDA $0304       ;
$0313-   C9 C0          CMP #$C0        ; End affiche (end ram) = $C000
$0315-   F0 03          BEQ $031A       ;
$0317-   4C 00 03       JMP $0300       ; Loop
$031A-   4C 59 FF       JMP $FF59       ; Fin du programme (fin de la ram)

Cette routine va afficher à l'écran, toute la mémoire de $0800 à $BFFF...
Tous les octets en inverse, etc..seront forcés au mode texte normal..pour une
plus grande clarté et pour que vous ne laissiez pas passer les caracteres en
minuscules inverse et flash..

Quand vous verrez à l'écran le texte de la routine password défiler (vous ne
pouvez pas le manquer à vrai dire!) vous n'aurez qu'à taper sur ctrl-reset
et lister la routine en $0300. L'adresse approximative (page) de ce texte sera
en $0302. (avec le LDA). Vous n'aurez qu'à aller voir de ce coté.

Je vous ai listé ici la routine la plus primaire que j'ai écrite pour ce type
de recherche, mais en catalog vous en trouverez une version avec source,
beaucoup plus évoluée. Quand vous verrez le texte apparaitre, appuyez
simplement sur une touche et l'adresse du texte approximative s'affichera..
et le programme s'arretera aussitot.

On trouve ainsi le texte (essayez, je me repete.. vous ne pouvez pas le rater,
meme s'il faut attendre quelque peu que toute la ram de $0800 à $6000 - avant
le texte précisement - ne défile sans rien voir passer de spécial concernant
starglider et sa protection)... en $6000 et quelques.. à ce niveau là, ce n'est
que de la fouille comme on en a fait beaucoup dans les cours 11 et 11.2 de
mise en catalog, pour retrouver que l'adresse - evidente - de la routine
password est $6000.

Ce n'est d'ailleurs, à ce moment là, que la recherche d'un programme en ram,
à mettre en catalog.. referez vous donc aux gigas-cours 11 et 11.2 et aux
techniques de recherches d'adresse de départ etc.. qui y sont expliquées..
Vous pouvez ainsi mettre la routine password en catalog. (A$6000,L$1000).

Si vous ne comprenez pas tout ici, essayez la routine en catalog SCAN TEXT VISU


                3EME METHODE : RECHERCHE BESTIALE SUR DISK
             ------------------------------------------------
              (Ou: comment trouver cette routine en 10 sec.)

La routine de password affiche du texte (un long bla bla dont je vous parlais
en début de ce cours 21).. et c'est là notre indice principale.
Pour etre cynique, on notera par exemple que le mot "protection" se trouve dans
la routine de protection.. et on va le rechercher à l'aide du Scan Disk Eor du
cours 8, programmé par Kristo le traitre.

On trouvera rapidement ce texte en eor #$80 sur un des secteurs de la piste $10
Si l'on prend ensuite le disk fixer 4.00 et que l'on eor #$80 ce-dit secteur
(tapez x pour rentrer un codage ou décodage des secteurs lu, puis ctrl-t pour
passer du décodé au normal) on voit bien en effet apparaitre ici le texte du
message de la routine password.

Une fouille en-avant, en-arriere sur cette piste nous montre ensuite nettement
en piste $10 0F le début de la routine password. La page $6000 est en $10 0F.

===============================================================================
3. LISTING DE LA ROUTINE PASSWORD AINSI LOCALISEE (source en catalog)
===============================================================================

Voici le source commenté tel qu'on le trouve en catalog sous merlin pro, de la
routine password qu'il nous faut annuler. On verra plus loin comment...

* Password Routine Starglider

        ORG $6000

HPage   =   $0300
HParag  =   $0301
HLigne  =   $0302
HWord   =   $0303
Pass    =   $0304
NbChars =   $FF          ; Nbre de caracteres au mot rentré.

         JMP Start       ;
Essais   HEX 03          ; Nbre d'essais d'entrée passwords
Start    JSR Titre       ; Affichage titre + Wait key
         JSR BlaBla      ; Affichage commentaire
         JSR Password    ; Get password.. compare..
         BCS Plante      ; Tjrs mauvais après trois essais!... plante
         RTS             ; Bon après au plus trois essais.!... continue
*-------
Plante   JMP Plantage    ; Mauvais!
*-------
Password LDA #$03        ; Essais.. initialisés à #$03
         STA Essais      ;
Retry    LDA #$0D        ; Retour chariot
         JSR PrtChar     ;
         LDX #<TxtGetW   ; Affiche "please enter word :"
         LDY #>TxtGetW   ;
         JSR Print       ;
         JSR H6058       ;
         JSR CmpWord     ;
         BCC Sortie      ; Sortie..ok! password bon.. (sinon, bad!)
         DEC Essais      ; essai suivant.. (que 3!)
         BNE Retry       ; si nb_essais = 00 alors c'est la fin!! bad!
         LDX #<Typist    ; Affiche "terrible typist!, no?"
         LDY #>Typist    ;
         JSR Print       ;
         SEC             ; Flag  = Password not found!
Sortie   RTS             ;
*-------
TxtGetW  FLS "PLEASE ENTER THE WORD AT :-"
         HEX 0D0D00
*-------
H6058    LDA $4E         ; Nbre aléatoire.. (get_wait! ; cf cours)
H605A    CMP #$5A
         BCC H6065
         EOR $4F
         INC $4F
         JMP H605A
*-------
H6065    ASL             ; Entrée $4E = #$5A , $4F = #$..
         CLC             ;
         ADC #$0F        ;
         STA $00         ; Get adr.lo de l'adresse du mot.
*---
         LDA #$64        ;
         ADC #$00        ;
         STA $01         ; Put adr.hi de l'adresse du mot. (#$64)
*---
         LDY #$00        ; Get adresse word
         LDA ($00),Y     ;
         TAX             ;
         INY             ;
         LDA ($00),Y     ;
         STA $01         ;
         STX $00         ;
*---
         LDY #$00        ;
LoopChar LDA ($00),Y     ; Get word chars..
         STA HPage,Y     ; Stk word chars to $0300
         CMP #$A7        ; char = #$A7 ?  (caract. separation mots)
         BEQ CharOk      ; oui.. end word!
         INY             ;
         CPY #$80        ; next char. (Max #$80)
         BCC LoopChar    ;

CharOk   LDX #$03        ; Decode char. (3 premiers caractères)
LpDecode LDA HPage,X     ; qui étaient codés avec un EOR #$AA
         EOR #$AA        ;
         STA HPage,X     ;
         DEX             ;
         BPL LpDecode    ;

         JSR PrtPage     ; Affiche coordonnées word in book
         JSR Parag       ;
         JSR PrtLine     ;
         JSR PrtWrNbr    ; Affiche word number et compare word !!!

         LDA #$0D        ; Retour chariot
H60A8    JSR PrtChar     ;

         LDA #"?"        ;
         STA $33         ;
:<       JSR $FD6A       ; Get chars.. to $0200
         CPX #$00        ;
         BEQ :<          ;
         STX NbChars     ;
         RTS             ;
*---
PrtPage  LDX #<Page      ;
         LDY #>Page      ;
         JSR Print       ;
         LDA HPage       ;
         JMP Inter       ;
*-------
Page     FLS "PAGE"
         HEX 00
*-------
Parag    LDX #<Paragraf  ;
         LDY #>Paragraf  ;
         JSR Print       ;
         LDA HParag      ;
         JMP Inter       ;
*-------
Paragraf FLS "PARAGRAPH"
         HEX 00
*-------
PrtLine  LDX #<Line      ;
         LDY #>Line      ;
         JSR Print       ;
         LDA HLigne      ;
         JMP Inter       ;
*-------
Line     FLS "LINE"
         HEX 00
*-------
PrtWrNbr LDX #<TWord     ;
         LDY #>TWord     ;
         JSR Print       ;
         LDA HWord       ;
         JMP Inter       ;
*-------
TWord    FLS "WORD"
         HEX 00
*-------
Inter    PHA             ; sauve acc
         LDA #$20        ; print space (entre chaque parm)
         JSR PrtChar     ;
         PLA             ; recup acc

         JSR H6125
         STX H0380
         CMP #$30
         BEQ H611A
         JSR PrtChar
H611A    LDA H0380
         JSR PrtChar
         LDA #$20        ; print space...
         JMP PrtChar     ;
*-------
H6125    PHA
         JSR H612F
H6129    TAX
         PLA
         LSR
         LSR
         LSR
         LSR

H612F    AND #$0F
         ORA #$30
         CMP #$3A
         BCC H6139
         ADC #$06
H6139    RTS
*-------
CmpWord  LDY #$00        ;
H613C    LDA IN,Y        ; Get chars mot entré par l'utilisateur
         CMP #$E0        ; cmp fin...?
         BCC H6145       ;
         SBC #$20        ; calc. (aucun interet)
H6145    AND #$7F        ; decode
         EOR #$AA        ; decode
H6149    CMP Pass,Y      ; compare au mot.. en $0304
         BNE H6176       ; mauvais caractere.. goto essai suivant
         INY             ; bon caractere.. on passe à la suite.. ok
         CPY NbChars     ; bons caracteres jusqu'au dernier..
         BNE H613C       ; loop

         LDA Pass,Y      ; bon chars jusqu'au dernier... ok!!!
         CMP #$A7        ; C'est bien le dernier caractere du password
         BNE H6176       ; sinon.. plante!

*** PASSWORD CORRECT !!!

         LDX #<Correct   ; Mot trouvé! autant le faire savoir!
         LDY #>Correct   ;
         JSR Print       ;

Tempo    LDX #$00        ; Routine de temporisation!!!
         LDY #$00        ;
         LDA #$0A        ;
LpWait1  PHA             ;
LpWait0  DEX             ;
         BNE LpWait0     ;
         DEY             ;
         BNE LpWait0     ;
         PLA             ;
         SEC             ;
         SBC #$01        ;
         BNE LpWait1     ;

         CLC             ; Mot trouvé! sortie avec :   CLC (Carry = 0)
         RTS             ;

*** PASSWORD FAUX !!!

H6176    LDA #$07        ; Bip..
         JSR PrtChar     ;
         LDA #$07        ; Bip.. (ctrl-g)
         JSR PrtChar     ;

         LDX #<Wrong     ; Wrong.. autant le faire savoir!!!
         LDY #>Wrong     ;
         JSR Print       ;

         SEC             ; Sortie avec SEC       (Carry = 1)
         RTS             ;
*-------
Wrong    HEX 0D
         FLS "WRONG!!!"
         HEX 0D00
*-------
Correct  HEX 0D
         FLS "CORRECT"
         HEX 0D
         FLS "PLEASE WAIT"
         HEX 0D00
*-------
Typist   HEX 0D0D
         FLS "YOU MUST BE A TERRIBLE TYPIST!"
         HEX 0D00
*-------
PrtChar  ORA #$80        ; Passe tt caracteres en masc normal..
         CMP #$E0        ;
         BCC bipbop      ;
bipbop   SBC #$20        ;
         JMP Cout        ;
*-------
Titre    BIT $C051       ; Texte..page1..
         BIT $C054       ;
         JSR $FC58       ;
*---
         LDA #<Plantage  ; Reset sur plantage
         STA $03F2       ;
         LDA #>Plantage  ;
         STA $03F3       ;
         EOR #$A5        ;
         STA $03F4       ;
*---
         LDX #$00        ; Clear Keyb. + Routine Tempo
lp0      STA $C010       ;
         INC $4E         ;
         BNE lp1         ;
         INC $4F         ;
lp1      INX             ;
         BNE lp0         ;
*---
         LDX #<H6211     ;
         LDY #>H6211     ;
         JSR Print       ; Affiche le titre ci-dessous..
:<       INC $4E         ; Selection nbr aleatoire
         LDA $C000       ; (voir cours)
         BPL :<          ;
RtsTitre STA $C010       ;
         JMP $FC58       ; Retour.. (RTS)
*-------
H6211    HEX 0D0D0D0D0D0D0D
         FLS "        S T A R G L I D E R"
         HEX 0D
         FLS "        ==================="
         HEX 0D0D0D0D0D0D0D
         FLS "   PLEASE PRESS A KEY TO CONTINUE"
         HEX 0D
         HEX 00
*-------
H6278    STY $01
         LDY #$00
         STY $00
         LDA #$FF
H6280    STA ($00),Y
         INY
         BNE H6280
         INC $01
         DEX
         BNE H6280
         BIT $C083
         RTS
*-------
Plantage LDX #$00
H6290    LDA H6278,X
         STA HPage,X
         INX
         BNE H6290
         LDY #$08
         LDX #$B8
         JMP HPage
*-------
BlaBla   LDX #<H62C0     ; Affiche bla bla protection
         LDY #>H62C0     ;
         JMP Print       ; et retour.. (RTS)
*-------
Print    STX H62AE
         STY H62AF
LoopPrt  LDA $FFFF
         BEQ H62BF
         JSR PrtChar
         INC H62AE
         BNE LoopPrt
         INC H62AF
         BNE LoopPrt
H62BF    RTS
*-------
H62C0    FLS "PROGRAM PROTECTION"
         HEX 0D
         FLS "------------------"
         HEX 0D0D0D
         FLS "YOU ARE REQUIRED TO ENTER A WORD FROM"
         HEX 0D
         FLS "THE NOVELLA, WHICH IS AT THE PAGE,"
         HEX 0D
         FLS "PARAGRAPH, LINE AND WORD SELECTED BELOW,"
         HEX 0D
         FLS "PUNCTUATION, CHAPTER NUMBERS AND BOLD"
         HEX 0D
         FLS "TYPE SHOULD BE IGNORED."
         HEX 0D0D0D
         FLS "YOU ARE GIVEN THREE ATTEMPTS TO FIND"
         HEX 0D
         FLS "THE RIGHT WORD."
         HEX 0D0D0D
         FLS "E.G. PAGE 2 PARAGRAPH 3 LINE 2"
         HEX 0D
         FLS "WORD 6 IN THE NOVELLA IS 'BORE'."
         HEX 0D0D
         HEX 00

IN      = $0200
H0380   = $0380
Cout    = $FDED


Voici donc LA routine a annuler.

===============================================================================
4. ANNULATION DE CETTE VERIFICATION                                (3 METHODES)
===============================================================================

Pour ce faire, trois moyens sont utilisables :

        - Supprimer le JSR $6000 en $41A0 par trois NOP (EA EA EA <= 20 00 60)
          sur la disquette. (il suffit de scanner les octets 20 00 60 et de
          mettre trois nop à cet endroit là)
        - Deconnecter la routine bestialement en mettant un CLC RTS tout
          au début , en $6000 . Allez donc en piste $10 0F et mettez en $00
          les valeurs hex 18 60 (pour clc rts) ainsi la routine password se
          réduit à un retour de sub-routine.
        - Deconnecter la routine après l'affichage du titre en mettant un
          CLC RTS en $6007 (au moment du jsr BlaBla). Pour cela, allez donc en
          piste $10 0F et mettez en $07 les valeurs hex 18 60 (méthode copyart)

Et alors,   S T A R G L I D E R   est déplombé !!!

Le probleme et la raison qui m'ont poussé à reconstituer ce source complet,
outre l'attrait qu'il peu avoir en soi (au fait! il manque la librairie de mots
et de coordonnés page,etc.. dans ce source, mais pas dans le code objet qui est
comme toujours en catalog)... est que peut etre que certaines routines
n'étaient executées que si le bon mot de passe était rentré, et non pas si
on rentrait un mauvais mot de passe ou si on déconnectait la routine purement
et simplement comme ci-dessus..

Chance : Les plombeurs n'y ont pas pensé.. et donc il suffit de déconnecter
cette routine poour qur ca marche comme l'original, mieux que l'original! car
sans cette demande fastidieuse quand on veut se défouler sur un jeu d'action !.

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

Allez.. maintenant, un conseil.. essayez de tout reprendre à zero et de tout
comprendre sans ce cours sous les yeux !!.. ce sera super !!..

                                                         Amicalement, Godfather


Retour sommaire

hr cours GDF

Les programmes de ce disk.


===============================================================================
LES PROGRAMMES DE CE DISK
===============================================================================
Révision 1.00                                                  Aout / Sept 1988


Vous trouverez en catalog, le source détaillé du boot.STARGLIDER _ du Bloader
principal du programme et de son pseudo-catalog (cf cours) _ le source
également de la routine de protection principale du soft _ et enfin,
le source complet d'un petit nouveau programme de scanning d'octets fait sur
mesure pour vous dans ce cours!

Je vous laisse.. avec le catalog de ce disk au 29 aout 1988. Bonne chance !

*** Fichiers texte

 T 006 T.INTRODUCTION
 T 138 T.COURS 21 REVISION 1.00
 T 006 LES PROGRAMMES DE CE DISK

*** Fichiers sources / obj du BLoader + Protection

 B 002 SG.BLOADER $0400
 B 006 SG.BLOADER $0400.S
 B 005 SG.BLOADED $4100
 B 028 SG.BLOADED $4100.S
 B 018 SG.PASSWRD $6000
 B 026 SG.PASSWRD $6000.S

*** Fichier source / obj du nouveau scanner d'octets inédit !!! (c) gdf 8/88

 B 002 SCAN PROTECT VISU
 B 004 SCAN PROTECT VISU.S

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


Retour sommaire

hr cours GDF

Les dernières news.


===============================================================================
Liste des dernieres news Godfather                            Update : 29/08/88
===============================================================================
                                                         Last Update : 18/08/88
Utilitaires
-----------
Copy II+ 8.2  (Bit copier 3"5)  - 2 faces
Multiscribe 3.02C + Dico        - 3 faces    ( version ok ).
Video Title Shop (pour VHS)     - 1 face.

Musique
-------
Art of Noise #1                 - 1 face.

Communication
-------------
HDC Network 1 , 2 , 3           - 2 faces , 1 f. , 1 f. (codes transpac)

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.

Arcades
-------
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
---------------------------------
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

En attente (voir coolware)
----------
Street Sports Soccer            - Epyx
Police Quest IIe                - Sierra on line , bientot un cours !
Uridium                         - Mindscape
Demon Wrath                     - 2 faces
Spingboard Publisher            - 6 faces

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


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


Retour sommaire

hr cours GDF

Appendix prix cours.


-------------------------------------------------------------------------------
Appendix cours/prix   Update : 29 Aout 1988                           Godfather
-------------------------------------------------------------------------------
Cours 1....Révision 4.20.....02 Aout 88....Dos Patched......140F...1F..Cracking
Cours 2....Révision 1.2D.....02 Fev. 88....Dos Modifiés.....140F...1F..Cracking
Cours 3....Révision 2.31.....10 Jan  88....Rwts du DOS......140F...1F..Connaiss
Cours 4....Révision 2.65.....04 Sept 87....Dos / Vtoc.......140F...1F..Connaiss
Cours 5....Révision 3.61.....11 Dec. 87....Signatures.......250F...2F..Signatur
Cours 6....Révision 1.60.....25 Aout 87....Plomb/Déplomb....150F...1F..Cracking
Cours 6.2..Révision 1.00.....23 Juil 88....Examen d'passage...0F!..2F..Cracking
Cours 7....Révision 2.30.....10 Jan. 88....Questions/Rép....140F...1F..Cracking
Cours 8....Révision 3.30.....29 Aout 88....Recherches.......140F...2F..Cracking
Cours 9....Révision 1.00.....28 Juil 88....Signatures.......120F...2F..Signatur
Cours 10...Révision 1.61.....21 Dec. 87....Crack Epyx 1987..150F...1F..Cracking
Cours 10.2.Révision 1.20.....01 Mai  88....Crack Epyx 1988..150F...1F..Cracking
Cours 11...Révision 2.00.....01 Dec. 88....Mise Catalog.....140F...1F..Catalog
Cours 11.2.Révision 1.00.....18 Avr. 88....Mise Catalog 88..140F...1F..Catalog
Cours 12...Révision 1.95.....23 Juil 87....Signatures.......110F...1F..Signatur
Cours 13...Révision 1.00.....20 Juin 87....Sign. + Epyx.....120F...1F..Signatur
Cours 14...Révision 2.00.....29 Juil 87....Activision 1984..140F...1F..Cracking
Cours 14.2.Révision 1.00.....22 Juil 88....Activision 1988..180F...1F..Cracking
Cours 15...Révision 1.10.....12 Oct. 87....Plomb/Déplomb....140F...1F..Cracking
Cours 16...Révision 1.00.....31 Oct. 87....Activision 1985..150F...1F..Cracking
Cours 17...Révision 1.01.....21 Avr. 88....Origin Systems...150F...1F..Cracking
Cours 17.2.Révision 1.00.....18 Avr. 88....Origin S. 1988...150F...1F..Cracking
Cours 18...Révision 1.10.....07 Mai. 88....Fixez vs la vie..140F...1F..Fix.Chp1
Cours 18.2.Révision 1.00.....11 Mai. 88....Fixez vla vie 2..170F...1F..Fix.Chp2
Cours 19...Révision 1.00.....07 Juil.88....Datasoft 1988....150F...1F..Cracking
Cours 20...Révision 1.00.....07 Mai. 88....Broderbund 1988..150F...1F..Copy18s.
Cours 21...Révision 1.00.....29 Aout 88....Rainbird Passwrd.150F...1F..Cracking

Et en projet de cours :

Cours 22...Révision 0.00.....----------....Sierra on Line...390F...1F..Cracking
Cours 23...Révision 0.00.....----------....Electr.Arts MC...390F...1F..Cracking
Cours 23.2.Révision 0.00.....----------....Electr.Arts 88...390F...1F..Cracking
-------------------------------------------------------------------------------
Gdf'P 1....Révision 2.40.....07 Nov. 87....Plomb' Cours 2...050F...1F..Plombeur
Gdf'P 2....Révision 1.00.....22 Aout 87....Dos Eor Maker....120F...1F..Protect'
Gdf'P 3....Révision 1.00.....08 Aout 87....Dos Code Maker...120F...1F..Protect'
Gdf'P 4....Révision 3.21.....20 Dec. 87....FBoot SAM 3.21...180F...1F..FBoot.S
Gdf'P 9....Révision 1.51.....19 Dec. 87....FBoot EOA.S......120F...1F..FBoot.S
Gdf'P 11...Révision 1.20.....25 Juil 88....Accolade boot!...150F...2F..Signatr
Gdf'P 12...Révision 2.02.....05 Avr. 88....Short r/w/f......180F...1F..Cracking
-------------------------------------------------------------------------------

     Pour me commander un cours, rien de plus simple.. postez moi un
     courrier contenant :

     - Une belle lettre, avec votre nom, le numéro du/des cours commandé, etc..
     - Le reglement du/des cours (si possible en liquide, sinon en cheque
       sans nom..).ok?. Mais attention! si vous postez du liquide, on ne doit
       pas le discerner de l'exterieur du courrier. mettez ca ds une enveloppe!
     - Si vous souhaitez recevoir votre courrier au plus vite, vous pouvez
       joindre une enveloppe timbrée et adressée. ca facilitera pas mal de
       choses. mais là, c'est comme vous le sentez!

     Rappelez vous également que vous pouvez avoir des COURS GRATUITS..
     Pour cela, vous n'avez qu'à vanter les mérites de mes cours autour de
     vous, et à me communiquer les adresses des personnes interessées..
     Si elles me prennent bien des cours, je vous posterai aussitot le
     cours de votre choix, gratuitement.. pensez-y, ca vaut le coup..
     Mais ne me postez pas toutes les adresses de vos correspondants!
     Assurez vous qu'ils sont déjà très interessé, et eventuellement,
     faites leur passer la liste sur disk des-dits cours.

     Pour recevoir le cours 6.2 (cours gratuit!) il faut avoir au moins
     déjà pris plusieurs cours sur les problemes de format (cours 6..)
     et sur le demuffin (cours 1 et/ou 2..). et si possible sur le dos
     (cours 3/4..).. et pourquoi pas, sur les signatures.
     Vous pouvez aussi me le demander impunément, je broncherais pas..
     mais son efficacité sera très fortement tronquée. Le but de ce cours :
     c'est une sorte d'examen de passage pour la suite des cours (post-6)
     pour voir si vous avez bien tout assimilé des cours 1-5.
     Pour le recevoir, postez moi juste une enveloppe timbrée et adressée..
     un disk vierge, un seul.. et un petit mot. et tenez moi au courant de
     vos résultats.

     Pour tout autre renseignement, contactez moi sur minitel
     en T3 (3615) code RTEL ou T2 (3614) code 135060318 bal GODFATHER.

-------------------------------------------------------------------------------


Retour sommaire