Index du Forum
IDENTIFICATION SERVEUR : 51.77.218.153 - CLIENT : 34.226.244.70

 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 

Cavern Cobra IIgs (PBI, 1987)

 
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Mar 05 Jan 2016, 22:51    Sujet du message: Cavern Cobra IIgs (PBI, 1987) Répondre en citant

During the Christmas holidays, I had fun cracking some Apple IIgs programs sent by 4am, thank you! That saves the time to image my original disks Wink

Cavern Cobra, by Greg Hale, was published in 1987 by PBI Software. It is one of the first arcade games available on the platform. One can copy the disk but one block will generate an I/O error, that is what the protection checks. We'll see in the next messages how to reverse engineer it thanks to The Flaming Bird Disassembler.

But, for now...

How to crack
Launch Block.Warden
Set Prefix to /COBRA
Follow file CR
At offset $6C9: 22 -> 60
Save the block

The disk image is available at http://www.brutaldeluxe.fr/crack/

Reboot and... enjoy,
Logo
12/2015


Dernière édition par toinet le Lun 11 Jan 2016, 16:20; édité 4 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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Mar 05 Jan 2016, 23:00    Sujet du message: Répondre en citant

If you boot your copy of the original disk, a warning message will be displayed on the screen: "Must Have Cavern Cobra In Drive"

With The Flaming Bird Disassembler, we'll find that text in the COBRA.SYS16 file (none) and the CR exe file, it is there at near the $4C90 address:

Code:

01/4C90: 20694E                     JSR   $4E69                                 
01/4C93: F40100                     PEA   $0001                                 
01/4C96: F45800                     PEA   $0058                                 
01/4C99: A2043A2200                 _MoveTo                                     
01/4CA0: 200271                     JSR   $7102                                 
01/4CA3: 212A204D75                 STR   '* Must have Cavern Cobra In DrI     
01/4CC5: 80FE                       BRA   $4CC5                                 ; That loops
01/4CC7: 60                         RTS                                         
01/4CC8: 0A312F6372                 STR   '1/cr.highs'                         
01/4CD3: 0000                       BRK   $00                                   
01/4CD5: 0000                       BRK   $00                                   
01/4CD7: F40001                     PEA   $0100                                 
01/4CDA: 203B79                     JSR   $793B                                 
01/4CDD: 68                         PLA                                         
01/4CDE: 8DD34C                     STA   $4CD3                                 
01/4CE1: 68                         PLA                                         
01/4CE2: 8DD54C                     STA   $4CD5                                 
01/4CE5: 20F24C                     JSR   $4CF2                                 
01/4CE8: 202274                     JSR   $7422                                 
01/4CEB: 20CB73                     JSR   $73CB                                 


That routine at $4C90 is called by a routine at $3C4A:

Code:

01/3C4A: 22647C00                   JSL   $017C64                               ; Call protection check
01/3C4E: C90000                     CMP   #$0000                                ; no err
01/3C51: F001                       BEQ   $3C54                                 ; We have a copy
01/3C53: 60                         RTS                                         ; or return
01/3C54: 20876F                     JSR   $6F87                                 
01/3C57: 20904C                     JSR   $4C90                                 ; Display message
01/3C5A: 20E35B                     JSR   $5BE3                                 
01/3C5D: 20896C                     JSR   $6C89                                 
01/3C60: 20E366                     JSR   $66E3                                 
01/3C63: 80FE                       BRA   $3C63                                 ; Loop...
01/3C65: 60                         RTS                                         


The routine at $3C4A is called twice:
- $49D8
- $4EAF

We have two options:
1. We BIT the two calls (20 4A 3C -> 2C 4A 3C) at the two addresses above, or
2. We RTS the routine at $3C4A

I have chosen the second solution as it implies changing one byte only...

Note: due to the way the OMF (code/data organization on S16 files) is, the patch is done on disk at offset $6C9 which is offset $3C4A in memory. Weird, isn't it? No, sort of optimization.
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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Mar 05 Jan 2016, 23:08    Sujet du message: Répondre en citant

Excerpts from the protection code that begins at $7C64.

Here is where the read_block is performed. It returns with #$00 in A if the read was successful, or #$30 if not.

Code:

01/8327: A9FF                       LDA   #$FF                                 
01/8329: 8D3085                     STA   $8530                                 
01/832C: A900                       LDA   #$00                                 
01/832E: 8D2F85                     STA   $852F                                 
01/8331: C230                       REP   #$30                                 
01/8333: 22A800E1                   JSL   GSOS                                 
01/8337: 2200                       DW    $0022           ; READ_BLOCK         
01/8339: 2C850100                   ADRL  $0001852C                             
01/833D: C210                       REP   #$10                                 
01/833F: E220                       SEP   #$20                                 
01/8341: 08                         PHP                                         
01/8342: AD5782                     LDA   $8257                                 
01/8345: F003                       BEQ   $834A                                 
01/8347: 20DC84                     JSR   $84DC                                 
01/834A: 28                         PLP                                         
01/834B: F003                       BEQ   $8350                                 ; no err
01/834D: 8270FF                     BRL   $82C0                                 
01/8350: C230                       REP   #$30                                 
01/8352: 60                         RTS                                         ; exit
...
01/82C0: A930                       LDA   #$30                                  ; I/O err
01/82C2: C230                       REP   #$30                                 
01/82C4: 60                         RTS                                         
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