Index du Forum
IDENTIFICATION SERVEUR : 10.0.97.1 - CLIENT : 3.80.177.176

 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 

World Geograph 1.2 IIgs (MECC, 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: Lun 15 Fév 2016, 0:19    Sujet du message: World Geograph 1.2 IIgs (MECC, 1988) Répondre en citant

#722 - From bustling European cities to remote Amazon jungles, our amazing world is yours to explore through detailed maps and a powerful database that work together with a few clicks of a mouse.

Protection type
This is the usual unreadable block 8 on a standard 3.5" disk. If the block read generates a I/O error (#$27) then we have the original, otherwise we have a copy.

How to copy
Use ZZCopy or Photonix 2 to copy the original disk, then you store it in a dry and safe place. Note that the second disk is not copy protected.

Some sort of reverse engineering
We have a GS/OS application, so we search for the pattern 22 A8 00 E1 22 00 which stands for: call GS/OS READ_BLOCK.
We find three in segment 5 (init), the first two are useless in the copy protection check, the third one is. We find it at $103D where we exit with the carry clear with an original, or the carry set if we have a copy.
$103D is called by $A54 and sometimes several times. That routine calls READ_BLOCK for each device installed in the system. It exits with the carry set with a copy, or the carry clear with an original disk.
$A54 is called at $9D6 and we have the same carry usage. What is great is that the call above (the one that checks the PRODUCT.INFO file) can skip the call to the protection routine depending on some values. Note for other MECC crackers, the PRODUCT.INFO file is a sort of a backdoor Smile
What we do is that we force the bypass of the protection routine by replacing the BCC $9DB with a BRA (branch always) $9DB.

How to crack
Launch Block.Warden
Prefix /World.Geograph
Follow file World.Geograph
At offset $D8D3: 90 -> 80
Write the block back onto disk

The disk images are at http://www.brutaldeluxe.fr/crack/

Reboot and... enjoy,

LoGo
2/2016
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: Lun 15 Fév 2016, 0:20    Sujet du message: Répondre en citant

Some code...

Code:

The READ_BLOCK protection check

05/103D: A90900                     LDA   #$0009          ; block 9
05/1040: 8D7C10                     STA   $107C                                 
05/1043: 22A800E1                   JSL   GSOS                                 
05/1047: 2200                       DW    $0022           ; READ_BLOCK         
05/1049: 76100500                   ADRL  $00051076                             
05/104D: B026                       BCS   $1075           ; error, cannot verify disk
05/104F: A21100                     LDX   #$0011                               
05/1052: BD8010                     LDA   $1080,X                               
05/1055: DD5A13                     CMP   $135A,X                               
05/1058: D01A                       BNE   $1074           ; so leave in err
05/105A: CA                         DEX                                         
05/105B: CA                         DEX                                         
05/105C: 10F4                       BPL   $1052                                 
05/105E: CE7C10                     DEC   $107C           ; block 8 please
05/1061: 22A800E1                   JSL   GSOS                                 
05/1065: 2200                       DW    $0022           ; READ_BLOCK         
05/1067: 76100500                   ADRL  $00051076                             
05/106B: 9007                       BCC   $1074           ; no err => copy
05/106D: C92700                     CMP   #$0027          ; no I/O err -> copy
05/1070: D002                       BNE   $1074                                 
05/1072: 18                         CLC                   ; original!
05/1073: 60                         RTS                                         
05/1074: 38                         SEC                                         
05/1075: 60                         RTS                                         
05/1076: 0000                       DW    $0000           ;  device num         
05/1078: 5A130500                   ADRL  $0005135A       ;  buffer ptr         
05/107C: 0800                       DW    $0008           ;  block num         
05/107E: 0000                       BRK   $00                                   
05/1080: 4D454343                   ASC   'MECC'                               
05/1084: 0E576F726C                 STR   'World GeoGraph'                     
05/1093: 00                         DB    $00                                   

--- GS/OS information for Read_Block

05/1076: 0000                       DW    $0000           ;  device num         
05/1078: 5A130500                   ADRL  $0005135A       ;  buffer ptr         
05/107C: 0800                       DW    $0008           ;  block num         

----

The main protection routine check

05/0A54: 203D10                     JSR   $103D           ; Check protection
05/0A57: 904B                       BCC   $0AA4           ; OK, original, leave                     
05/0A59: A90100                     LDA   #$0001          ; next device
05/0A5C: 8D7610                     STA   $1076                                 
05/0A5F: 203D10                     JSR   $103D           ; read again
05/0A62: 9040                       BCC   $0AA4           ; ah, we're good
05/0A64: EE7610                     INC   $1076           ; no, next device
05/0A67: C91000                     CMP   #$0010                               
05/0A6A: F005                       BEQ   $0A71           ; until there's no more
05/0A6C: C91100                     CMP   #$0011                               
05/0A6F: D0EE                       BNE   $0A5F           ; or go to next

05/0A71: A204CA2200                 _InitCursor           ; tell the gentle user
05/0A78: 48                         PHA                   ; to insert the disk
05/0A79: F40500                     PEA   ^$0AA5          ; I mean, the original one
05/0A7C: F4A50A                     PEA   $0AA5                                 
05/0A7F: F40000                     PEA   $0000                                 
05/0A82: F40000                     PEA   $0000                                 
05/0A85: A215172200                 _Alert                                     
05/0A8C: A2120A2200                 _WaitCursor                                 
05/0A93: 20E40B                     JSR   $0BE4                                 
05/0A96: 68                         PLA                                         
05/0A97: C90100                     CMP   #$0001                               
05/0A9A: F0BD                       BEQ   $0A59                                 
05/0A9C: A9FFFF                     LDA   #$FFFF          ; unless the user quits
05/0A9F: 8FDD1202                   STAL  $0212DD                               
05/0AA3: 38                         SEC                                         
05/0AA4: 60                         RTS                                         

05/0AA5: 3C00                       DW    $003C           ; Alert rect         
05/0AA7: 9600                       DW    $0096                                 
05/0AA9: 7800                       DW    $0078                                 
05/0AAB: EA01                       DW    $01EA                                 
05/0AAD: B582                       DW    $82B5           ; Alert ID           
05/0AAF: 80                         HEX   80              ; First stage byte   
05/0AB0: 80                         HEX   80              ; Second stage byte   
05/0AB1: 80                         HEX   80              ; Third stage byte   
05/0AB2: 80                         HEX   80              ; fourth stage byte   
05/0AB3: F30A0500                   ADRL  $00050AF3       ; Ptr to item templat
05/0AB7: DB0A0500                   ADRL  $00050ADB       ; Ptr to item templat
05/0ABB: C30A0500                   ADRL  $00050AC3       ; Ptr to item templat
05/0ABF: 00000000                   ADRL  $00000000                             
05/0AC3: 0100                       DW    $0001           ; Item ID             
05/0AC5: 2B00                       DW    $002B           ; Item rect           
05/0AC7: CC00                       DW    $00CC                                 
05/0AC9: 3800                       DW    $0038                                 
05/0ACB: 1201                       DW    $0112                                 
05/0ACD: 0A00                       DW    $000A           ; Std button         
05/0ACF: 9E150200                   ADRL  $0002159E       ; Item descriptor     
05/0AD3: 0000                       DW    $0000           ; Item value         
05/0AD5: 0000                       DW    $0000           ; Bit flag           
05/0AD7: 00000000                   ADRL  $00000000       ; Ptr to color table 
05/0ADB: 0200                       DW    $0002           ; Item ID             
05/0ADD: 2B00                       DW    $002B           ; Item rect           
05/0ADF: 4200                       DW    $0042                                 
05/0AE1: 3800                       DW    $0038                                 
05/0AE3: 8800                       DW    $0088                                 
05/0AE5: 0A00                       DW    $000A           ; Std button         
05/0AE7: AF150200                   ADRL  $000215AF       ; Item descriptor     
05/0AEB: 0000                       DW    $0000           ; Item value         
05/0AED: 0000                       DW    $0000           ; Bit flag           
05/0AEF: 00000000                   ADRL  $00000000       ; Ptr to color table 
05/0AF3: 0300                       DW    $0003           ; Item ID             
05/0AF5: 0800                       DW    $0008           ; Item rect           
05/0AF7: 1E00                       DW    $001E                                 
05/0AF9: 2600                       DW    $0026                                 
05/0AFB: 5401                       DW    $0154                                 
05/0AFD: 0F80                       DW    $800F           ; Static text         
05/0AFF: 0B0B0500                   ADRL  $00050B0B       ; Item descriptor     
05/0B03: 0000                       DW    $0000           ; Item value         
05/0B05: 0000                       DW    $0000           ; Bit flag           
05/0B07: 00000000                   ADRL  $00000000       ; Ptr to color table 
05/0B0B: 40506C6561                 STR   'Please insert your World GeoGrI     
05/0B4C: 22A800E1                   JSL   GSOS                                 
05/0B50: 1000                       DW    $0010           ; Open               
05/0B52: A60B0500                   ADRL  $00050BA6                             
05/0B56: B04B                       BCS   $0BA3                                 
05/0B58: ADA60B                     LDA   $0BA6                                 
05/0B5B: 8DBF0B                     STA   $0BBF                                 
05/0B5E: 22A800E1                   JSL   GSOS                                 
05/0B62: 1200                       DW    $0012           ; Read               
05/0B64: BF0B0500                   ADRL  $00050BBF                             
SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS

The first call to the protection check

05/09D1: 204C0B                     JSR   $0B4C           ; Check PRODUCT.INFO 
05/09D4: 9005                       BCC   $09DB           ; no err, skip protec
05/09D6: 20540A                     JSR   $0A54           ; Call protection
05/09D9: B023                       BCS   $09FE           ; We have a copy!
05/09DB: 20A80E                     JSR   $0EA8           ; or we have an original
05/09DE: 201F0E                     JSR   $0E1F                                 
05/09E1: 20F80C                     JSR   $0CF8                                 
05/09E4: 20520F                     JSR   $0F52                                 
05/09E7: F40018                     PEA   $1800                                 
05/09EA: F41400                     PEA   $0014                                 
05/09ED: F41000                     PEA   $0010                                 
05/09F0: A21B0F2200                 _SetPurgeStat                               
05/09F7: A20F2A2200                 _DrawMenuBar                               
05/09FE: AD440C                     LDA   $0C44                                 
05/0A01: 48                         PHA                                         
05/0A02: AD420C                     LDA   $0C42                                 
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: Lun 15 Fév 2016, 0:21    Sujet du message: Répondre en citant

The Block.Warden view. Search for the >< pattern at offset $D3.

Code:

Block: $0073 (115)      Volume name: WORLD.GEOGRAPH  Saturday   14-Feb-16 11:52
Prefix: /WORLD.GEOGRAPH/                                                       
Following: WORLD.GEOGRAPH, Type S16, Rel block 109, Byte $00D8D3               
(c) Q      00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F            Edit mode
1988ZSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
    Z 000: AD 58 13 48 A5 24 18 69 00 05 48 A2 14 02 22 00   -X.H%$.i..H"..".   
  b Z 010: 00 E1 20 46 0C AD 58 13 48 A2 15 02 22 00 00 E1   .a F.-X.H".."..a   
B y Z 020: 20 46 0C AD 58 13 48 A5 24 18 69 00 07 48 A2 17    F.-X.H%$.i..H".   
L   Z 030: 02 22 00 00 E1 20 46 0C F4 FF FF A2 17 0D 22 00   ."..a F.t"..".   
O G Z 040: 00 E1 A2 16 02 22 00 00 E1 20 46 0C A2 05 02 22   .a".."..a F.".."   
C l Z 050: 00 00 E1 20 46 0C A2 1C 02 22 00 00 E1 AD 58 13   ..a F.".."..a-X.   
K e Z 060: 48 A5 24 18 69 00 08 48 A2 1B 02 22 00 00 E1 20   H%$.i..H".."..a   
  n Z 070: 46 0C 20 CD 0B 20 A8 10 20 5D 12 A2 12 02 22 00   F. M. (. ]."..".   
W   Z 080: 00 E1 20 46 0C AD 58 13 48 A5 24 18 69 00 09 48   .a F.-X.H%$.i..H   
A B Z 090: A2 13 02 22 00 00 E1 20 46 0C AF E1 12 02 48 AF   ".."..a F./a..H/   
R r Z 0A0: DF 12 02 48 A2 13 09 22 00 00 E1 A2 12 0A 22 00   _..H".."..a"..".   
D e Z 0B0: 00 E1 20 00 00 20 9B 00 A9 00 00 8F DD 12 02 8F   .a .. ..)...]...   
E d Z 0C0: 39 15 02 3A 8F 4E 15 02 8F 50 15 02 8F 52 15 02   9..:.N...P...R..   
N o Z 0D0: 20 4C 0B>90<05 20 54 0A B0 23 20 A8 0E 20 1F 0E    L... T.0# (. ..   
  n Z 0E0: 20 F8 0C 20 52 0F F4 00 18 F4 14 00 F4 10 00 A2    x. R.t..t..t.."   
    Z 0F0: 1B 0F 22 00 00 E1 A2 0F 2A 22 00 00 E1 AD 44 0C   .."..a".*"..a-D.   
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