Cours de déplombage 22
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.
----------------------------------------------------------------------

|
DOS 3.3
|
Download Cours GDF 22 rev 1.00 (gzipped)
|
Sommaire
Lien |
Article |
 |
Introduction. |
 |
Cours 22 révision 1.00. |
 |
Les programmes de ce disk. |
 |
Cours d'assembleur 22. |
 |
Les dernières news. |
 |
Parrainage. |
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
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
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
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
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
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