Index du Forum
IDENTIFICATION SERVEUR : 10.0.97.129 - CLIENT : 54.221.147.93

 FAQFAQ   RechercherRechercher   Liste des MembresListe des Membres   Groupes d'utilisateursGroupes d'utilisateurs   S'enregistrerS'enregistrer 
 ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

Paperboy (Mindscape, 1988)

 
Poster un nouveau sujet   Répondre au sujet     Index du Forum -> PROTECTION MALEFIQUE
Voir le sujet précédent :: Voir le sujet suivant  
Auteur Message
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 2949
Localisation: Le Chesnay, France

MessagePosté le: Dim 31 Jan 2016, 10:45    Sujet du message: Paperboy (Mindscape, 1988) Répondre en citant

#720 - The arcade classic comes home. Hop on your bike for a free-wheeling ride up the avenues of not-so-typical suburbia. This is the crack of the 8-bit version of the game.

Protection type
This is a ProDOS floppy (280 blocks, one-side) with:
- a change of markers (D5AA96 FFFF, D5AAAD FFFF)
- the Epyx desync thing (desync the drive head, read uncopiable nibbles, check the read values)

How to copy
Launch Advanced demuffin
Press P to pass boot
Enter the monitor:
- B930: 18 60 EA
- B98B: 18 60 EA
Press Ctrl-Y
Copy the disk

Some sort of boot-trace
As a source code is worth a thousands words, read the next message to understand the protection call and bypass.
But... ProDOS is loaded, PBLOAD.SYSTEM is then executed. It loads files then calls the protection at $21AA. On return, the load address of file PBMAP.BIN is set to $6000 if we have an original, otherwise the load address of $2000 is kept on a copy and the file is loaded where our current code is: that crashes!

How to crack
Now that you have a normalized but not runnable game because of the second on-disk protection, you have to change two bytes:
Launch Block.Warden
Prefix /P
Follow file PBLOAD.SYSTEM
At offset $3A: 20 AA 21 -> 20 40 22
That way, we bypass the nibble read and set the correct value to load the file PBMAP.BIN.
Write the block back onto disk.

Get the disk image at http://www.brutaldeluxe.fr/crack/

Reboot and... enjoy,

LoGo
1/2016


Dernière édition par toinet le Dim 31 Jan 2016, 10:56; édité 1 fois
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 2949
Localisation: Le Chesnay, France

MessagePosté le: Dim 31 Jan 2016, 10:48    Sujet du message: Répondre en citant

This is a working disassembled source code of PBLOAD.SYSTEM. Our crack changes the call address at $203A. Instead of jumping to the beginning of the protection check, we jump at the end to set the right value at the right place. That's all.

Code:

*
* Paperboy (8-bit)
* (c) 1984, Mindscape
* (k) 2016, LoGo
*

         mx    %11
         org   $2000
         lst   off
         typ   #$ff
         dsk   PBLOAD.SYSTEM

*---

SOFTEV   EQU   $03F2
PRODOS8  EQU   $BF00
KBD      EQU   $C000
SETSTDZP EQU   $C008
SETALTZP EQU   $C009
TXTCLR   EQU   $C050
MIXCLR   EQU   $C052
TXTPAGE2 EQU   $C055
HIRES    EQU   $C057
LCBANK2  EQU   $C083
RDROM1   EQU   $C08A
LCBANK1  EQU   $C08B
CROUT    EQU   $FD8E
PRBYTE   EQU   $FDDA
BELL     EQU   $FF3A

*---------------------------------------------------------*
*     Disassembled with The Flaming Bird Disassembler     *
*    (c) Phoenix corp. 1992,93  -  All rights reserved    *
*---------------------------------------------------------*

L2000    LDX   #<L232D
         STX   SOFTEV+1
         LDY   #>L232D
         JSR   L2117

         STA   KBD
         LDA   TXTPAGE2
         LDA   MIXCLR
         LDA   HIRES
         LDA   TXTCLR

         LDX   #<L2357
         LDY   #>L2357
         JSR   L2117

         LDA   #$00
         STA   $3C
         STA   $42
         LDA   #$60
         STA   $3D
         LDA   #$A4
         STA   $43
         LDA   #$FF
         STA   $3E
         LDA   #$7B
         STA   $3F
         SEC
         JSR   $C311

         JSR   L21AA      ; call protection

*--- We return from the protection with the carry set or clear
* but we don't care about that
*--- We also return with the load address of PBMAP.BIN to
* $2000 if we have a copy, and we replace that code with data -> crash
* $6000 if we have an original
*
         LDX   #<L234B    ; load PBMAP.BIN
         LDY   #>L234B
         JSR   L2117

         LDA   #$00
         STA   $3C
         STA   $42
         LDA   #$60
         STA   $3D
         LDA   #$40
         STA   $43
         LDA   #$DF
         STA   $3E
         LDA   #$B8
         STA   $3F
         SEC
         JSR   $C311

         LDX   #<L233F
         LDY   #>L233F
         JSR   L2117
         STA   SETALTZP
         JSR   L20EA

         LDA   #$00
         STA   $06
         LDA   #$60
         STA   $07
         LDA   #$00
         STA   $08
         LDA   #$D0
         STA   $09
         LDA   #$3F
         STA   $0A
         LDA   #$2F
         STA   $0B
         JSR   L20F8
         STA   SETSTDZP

         LDX   #<L2351
         LDY   #>L2351
         JSR   L2117
         STA   SETALTZP
         JSR   L20F1
         LDA   #$00
         STA   $06
         LDA   #$60
         STA   $07
         LDA   #$00
         STA   $08
         LDA   #$D0
         STA   $09
         LDA   #$FF
         STA   $0A

L20AA    LDA   #$0F
         STA   $0B
         JSR   L20F8
         JSR   L20EA
         STA   SETSTDZP
         LDX   #<L235D
         LDY   #>L235D
         JSR   L2117
         LDX   #<L2339
         LDY   #>L2339
         JSR   L2117
         STA   SETALTZP
         LDA   #$00
         TAX
L20CB    STA   $00,X
         INX
         BNE   L20CB
         JSR   $9A00
         STA   SETSTDZP
         LDX   #<L2345
         LDY   #>L2345
         JSR   L2117
         LDX   #<L2333
         LDY   #>L2333
         JSR   L2117
         STA   SETALTZP
         JMP   $6000

L20EA    LDA   LCBANK1
         LDA   LCBANK1
         RTS

L20F1    LDA   LCBANK2
         LDA   LCBANK2
         RTS

L20F8    LDY   #$00
L20FA    LDA   ($06),Y
         STA   ($08),Y
         INY
         BNE   L2105
         INC   $07
         INC   $09
L2105    LDA   $0A
         SEC
         SBC   #$01
         STA   $0A
         BCS   L20FA
         LDA   $0B
         SBC   #$00
         STA   $0B
         BCS   L20FA
         RTS

*--- Read a file

L2117    STX   $04
         STY   $05
         LDY   #$00
         LDA   ($04),Y
         STA   L2185
         INY
         LDA   ($04),Y
         STA   L2185+1
         INY
         LDA   ($04),Y
         STA   L2193
         INY
         LDA   ($04),Y
         STA   L2193+1
         INY
         LDA   ($04),Y
         STA   L2191
         INY
         LDA   ($04),Y
         STA   L2191+1
         JSR   PRODOS8
         DB    $C8
         DA    L2184
         BNE   L2163
         LDA   L2189
         STA   L218B
         STA   L2190
         STA   L2198
         JSR   PRODOS8
         DB    $CA
         DA    L218F
         BNE   L2163
         JSR   PRODOS8
         DB    $CC
         DA    L2197
         RTS

L2163    STA   L2199
         LDX   RDROM1
         JSR   PRBYTE
         JSR   BELL
         JSR   CROUT
L2172    JMP   L2172

L2175    JSR   PRODOS8
         DB    $80
         DA    L217E
         BNE   L2163
         RTS

L217E    DB    $03
         DB    $60
         DW    $1C00
         DW    $0000
L2184    DB    $03
L2185    DW    $0000
         DW    $1C00
L2189    DB    $00
L218A    DB    $02
L218B    DB    $FF
         ADR   $000000
L218F    DB    $04
L2190    DB    $00
L2191    DW    $0000
L2193    DW    $0000
         DW    $0000
L2197    DB    $01
L2198    DB    $00
L2199    DB    $00

L219A    DS    16,$FF

*--- The protection check

L21AA    LDX   #$F0       ; save zero page
L21AC    LDA   $00,X
         STA   L21AA-$100,X
         INX
         BNE   L21AC

         JSR   L2175      ; read block to move head

         LDA   #$0A       ; turn on drive
         STA   $F4
         LDX   $2B
         LDA   $C089,X
         LDA   $C08E,X
         LDA   #<L2250    ; pattern to check
         STA   $F6
         LDA   #>L2250
         STA   $F7
L21CB    LDA   #$80       ; counter
         STA   $F5
L21CF    DEC   $F5
         BEQ   L222F
         JSR   L225A      ; read nibbles
         BCS   L222F

         LDA   $F1        ; our counter
         CMP   #$07
         BNE   L21CF
         LDY   #$00       ; desync...
L21E0    LDA   $C08C,X
         BPL   L21E0
         DEY
         BEQ   L222F
         CMP   #$D5
         BNE   L21E0
         LDY   #$00
L21EE    LDA   $C08C,X
         BPL   L21EE
         DEY
         BEQ   L222F
         CMP   #$E7
         BNE   L21EE
L21FA    LDA   $C08C,X
         BPL   L21FA
         CMP   #$E7
         BNE   L222F
L2203    LDA   $C08C,X
         BPL   L2203
         CMP   #$E7
         BNE   L222F
         LDA   $C08D,X    ; oops!
         LDY   #$10
         BIT   $06        ; lose time
L2213    LDA   $C08C,X
         BPL   L2213
         DEY
         BEQ   L222F
         CMP   #$EE
         BNE   L2213
         LDY   #$07
L2221    LDA   $C08C,X    ; now compare desync nibbles
         BPL   L2221
         CMP   ($F6),Y    ; with our pattern
         BNE   L222F
         DEY
         BPL   L2221
         BMI   L2232
L222F    JMP   L2247

L2232    LDY   #$F0       ; end of process
L2234    LDA   L21AA-$100,Y ; restore
         STA   |$0000,Y
         INY
         BNE   L2234
         LDA   $C088,X    ; stop the drive
         LDA   #$60       ; WE'LL JUMP HERE NOW
         STA   L234F+1    ; change load address of file!
         CLC
         RTS              ; we're good

L2247    DEC   $F4
         BEQ   L224E
         JMP   L21CB

L224E    SEC              ; we're not good
         RTS

*--- The desync pattern

L2250    HEX   FCEEEEFCE7EEFCE7FEFE

L225A    LDY   #$FD
         STY   $F8
L225E    INY
         BNE   L2265
         INC   $F8
         BEQ   L22A2
L2265    LDA   $C08C,X
         BPL   L2265
L226A    CMP   #$D5
         BNE   L225E
         NOP
L226F    LDA   $C08C,X
         BPL   L226F
         CMP   #$AA
         BNE   L226A
         LDY   #$03
L227A    LDA   $C08C,X
         BPL   L227A
         CMP   #$96
         BNE   L226A
         LDA   #$00
L2285    STA   $F9
L2287    LDA   $C08C,X
         BPL   L2287
         ROL
         STA   $F8
L228F    LDA   $C08C,X    ; read our nibbles
         BPL   L228F
         AND   $F8
         STA   |$00F0,Y
         EOR   $F9
         DEY
         BPL   L2285
         TAY
         NOP
         CLC
         RTS

L22A2    SEC
         RTS

*--- Move arm routine (not used)

         STX   $2B
         STA   $2A
         CMP   $0478
         BEQ   L2300
         LDA   #$00
         STA   $26
L22B1    LDA   $0478
         STA   $27
         SEC
         SBC   $2A
         BEQ   L22EE
         BCS   L22C4
         EOR   #$FF
         INC   $0478
         BCC   L22C9
L22C4    ADC   #$FE
         DEC   $0478
L22C9    CMP   $26
         BCC   L22CF
         LDA   $26
L22CF    CMP   #$0C
         BCS   L22D4
         TAY
L22D4    SEC
         JSR   L22F2
         LDA   L2315,Y
         JSR   L2304
         LDA   $27
         CLC
         JSR   L22F5
         LDA   L2321,Y
         JSR   L2304
         INC   $26
         BNE   L22B1
L22EE    JSR   L2304
         CLC
L22F2    LDA   $0478
L22F5    AND   #$03
         ROL
         ORA   $2B
         TAX
         LDA   $C080,X
         LDX   $2B
L2300    RTS

         TAX
         LDY   #$A0
L2304    LDX   #$11
L2306    DEX
         BNE   L2306
         INC   $46
         BNE   L230F
         INC   $47
L230F    SEC
         SBC   #$01
         BNE   L2304
         RTS

L2315    HEX   01302824201E1D1C1C1C1C1C
L2321    HEX   702C26221F1E1D1C1C1C1C1C

*--- File info

L232D    DA    L2363      ; pointer to filename
         DW    $2000      ; length to load
         DW    $4000      ; where to load
L2333    DA    L2368
         DW    $FFFF
         DW    $6000
L2339    DA    L236F
         DW    $FFFF
         DW    $9A00
L233F    DA    L2379
         DW    $2F40
         DW    $6000
L2345    DA    L2381
         DW    $0D20
         DW    $0800
L234B    DA    L238B
         DW    $58E0
L234F    DW    $2000      ; changed to $6000 w/original
L2351    DA    L2395
         DW    $1000
         DW    $6000
L2357    DA    L239D
         DW    $1C00
         DW    $6000
L235D    DA    L23A5
         DW    $2710
         DW    $7000

L2363    STR   'LOGO'
L2368    STR   'PB.TSK'
L236F    STR   'PBSYS.TSK'
L2379    STR   'PBD.BIN'
L2381    STR   'PBCH2.BIN'
L238B    STR   'PBMAP.BIN'
L2395    STR   'PBC.BIN'
L239D    STR   'PBM.TSK'
L23A5    STR   'PBTITLE.PIC'

         DS    \
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
qkumba



Inscrit le: 29 Jan 2012
Messages: 176

MessagePosté le: Dim 31 Jan 2016, 18:58    Sujet du message: Répondre en citant

You could have replaced the protected sector for zero code changes. :-)
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
toinet
Site Admin


Inscrit le: 15 Juin 2007
Messages: 2949
Localisation: Le Chesnay, France

MessagePosté le: Dim 31 Jan 2016, 23:35    Sujet du message: Répondre en citant

qkumba a écrit:
You could have replaced the protected sector for zero code changes. Smile


You're right. I read your trick about that. Neat idea!
Revenir en haut de page
Voir le profil de l'utilisateur Envoyer un message privé Visiter le site web de l'utilisateur
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet     Index du Forum -> PROTECTION MALEFIQUE Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum


Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com