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.
----------------------------------------------------------------------
DOS 3.3 |
Download Cours GDF 21 rev 1.00 (gzipped) |
Lien | Article |
Introduction. | |
Cours 21 révision 1.00. | |
Les programmes de ce disk. | |
Les dernières news. | |
Appendix prix cours. |
===============================================================================
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.
===============================================================================
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
===============================================================================
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..
===============================================================================
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.
-------------------------------------------------------------------------------
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.
-------------------------------------------------------------------------------