Index du Forum
IDENTIFICATION SERVEUR : 10.0.97.129 - CLIENT : 54.156.92.243

 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 

Desktop Plan II (Personal Software, 1981)

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

MessagePosté le: Ven 08 Sep 2017, 18:42    Sujet du message: Desktop Plan II (Personal Software, 1981) Répondre en citant

#938 - An early utility to manage data and plan stuff, using Visicalc files or its own. A powerful yet uncracked sofware, that's weird! Thanks to Jeremy and Paul for the disks. Paul has imaged two versions, the same crack applies on both.

Disk structure
This is a standard DOS 3.3 disk that can be copied. Too bad, the copy boots but whenever you launch an option, it crashes to GOSUB error line 1275...

How to copy
Use Locksmith Fast Disk Backup to copy your disk. Then, store it in a dry and safe place.

Boot trace
A funny one. It is a DOS 3.3 disk. The boot program is HELLO. It runs DESKTOP/PLAN-II. That one executes a binary file "FSTLDR" then executes the MENU file where the options are handled. I focused on the CATALOG option of that BASIC program. It is worth mentioning that each option executes the binary CHAIN program to run the aforementioned options. That rings a bell, doesn't it?
So, let's load the CHAIN program at address 520 ($208) and bingo! We find self-modifying code that is explained later in the thread. The idea is to decypher code with key EOR #$29, execute the protection check at $237 (looking for hidden nibbles that are not copied by a sector-to-sector copier) and return correctly or crash with a GOSUB error at line 1275 if a copy is found.

It is important to modify the right data. As the protection sets the ampersand vector to value #$00 (BRK) on entry and sets it back to #$4C (JMP) on exit on an original disk. As the protection sets a pointer in zero page addresses $00..$01, it is important to keep the pointer intact. So, we'll force the ampersand vector to remain 4C and return only when the zero pages addresses are correctly initialized, thus the RTS at offset $62.

How to crack
Boot my copy disk, launch Disk Fixer.
Insert the DESKTOP PLAN disk in drive 2
Follow file CHAIN
Type X and set #$29 as the EOR value
Type ctrl-T to activate the mask
That is pure magic, you'll see the decyphered code
Type ctrl-T to turn the mask off
Perform the following changes
At offset $36: 29 becomes 65 (00 to 4C)
At offset $62: 94 becomes 49 (BD to 60)
Save the sector back onto disk.
You are done!

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

Reboot and... enjoy,

LoGo
9/2017
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: 2893
Localisation: Le Chesnay, France

MessagePosté le: Ven 08 Sep 2017, 18:44    Sujet du message: Répondre en citant

Changing the bytes. First screen is as-is, second is with mask on, third is with patch applied and mask on, fourth is the patched valued with mask off

Code:

-------------- DISK EDIT ---------------
TRACK $19/SECTOR $0E/VOLUME $FE/BYTE $36
----------------------------------------
$00: 08 50 C8 01 4C 0E 02 00    .PH.L...
$08: FF 2F AD 31 02 8D AE 03    ?/-1....
$10: 18 69 61 AA A0 1A A9 40    .)!* .)@
$18: 18 69 09 8D 98 03 8E 31    .).....1
$20: 02 98 69 0F 8D 99 03 EE    ..).....
$28: 8F 03 CE 93 03 4C D0 03    ..N..LP.
$30: 4C 8C 03 AC 2C 80-29-A4    L..,,.)$
$38: D1 2A 09 CA 2A AC 28 AD    Q*.J*,(-
$40: 29 89 39 98 29 A4 75 2A    ).9.)$5*
$48: A4 43 2A A4 44 2A A4 52    $C*$D*$R
$50: 2A 89 26 98 29 A4 72 2A    *.&.)$2*
$58: A4 40 2A A4 45 2A A4 53    $@*$E*$S
$60: 2A 83 94 A0 E9 89 31 94    *.I ).1.
$68: A5 E9 19 2C A1 F9 D1 D9    %).,!9QY
$70: 38 80 39 AC 28 80 2D AC    8.9,(.-,
$78: 2B 51 EF 29 F9 20 EF 28    +Q/)9 /(
----------------------------------------
BUFFER 0/SLOT 6/DRIVE 2/MASK OFF/NORMAL
DOS3.3:CHAIN                        /$00
----------------------------------------
COMMAND :                               

-------------- DISK EDIT ---------------
TRACK $19/SECTOR $0E/VOLUME $FE/BYTE $36
----------------------------------------
$00: 21 79 E1 28 65 27 2B 29    !9!(%'+)
$08: D6 06 84 18 2B A4 87 2A    VF.X+$.*
$10: 31 40 48 83 89 33 80 69    1@H..3.)
$18: 31 40 20 A4 B1 2A A7 18    1@ $1*'X
$20: 2B B1 40 26 A4 B0 2A C7    +1@&$0*G
$28: A6 2A E7 BA 2A 65 F9 2A    &*':*%9*
$30: 65 A5 2A 85 05 A9-00-8D    %%*.E)@.
$38: F8 03 20 E3 03 85 01 84    8C #C.A.
$40: 00 A0 10 B1 00 8D 5C 03    @ P1@.\C
$48: 8D 6A 03 8D 6D 03 8D 7B    .*C.-C.;
$50: 03 A0 0F B1 00 8D 5B 03    C O1@.[C
$58: 8D 69 03 8D 6C 03 8D 7A    .)C.,C.:
$60: 03 AA BD 89 C0 A0 18 BD    C*`.@ X=
$68: 8C C0 30 05 88 D0 F8 F0    .@0E.P80
$70: 11 A9 10 85 01 A9 04 85    Q)P.A)D.
$78: 02 78 C6 00 D0 09 C6 01    B8F@PIFA
----------------------------------------
BUFFER 0/SLOT 6/DRIVE 1/MASK ON /NORMAL
DOS3.3:CHAIN                        /$00
----------------------------------------
COMMAND : _                             

-------------- DISK EDIT ---------------
TRACK $19/SECTOR $0E/VOLUME $FE/BYTE $36
----------------------------------------
$00: 21 79 E1 28 65 27 2B 29    !9!(%'+)
$08: D6 06 84 18 2B A4 87 2A    VF.X+$.*
$10: 31 40 48 83 89 33 80 69    1@H..3.)
$18: 31 40 20 A4 B1 2A A7 18    1@ $1*'X
$20: 2B B1 40 26 A4 B0 2A C7    +1@&$0*G
$28: A6 2A E7 BA 2A 65 F9 2A    &*':*%9*
$30: 65 A5 2A 85 05 A9-4C-8D    %%*.E)L.
$38: F8 03 20 E3 03 85 01 84    8C #C.A.
$40: 00 A0 10 B1 00 8D 5C 03    @ P1@.\C
$48: 8D 6A 03 8D 6D 03 8D 7B    .*C.-C.;
$50: 03 A0 0F B1 00 8D 5B 03    C O1@.[C
$58: 8D 69 03 8D 6C 03 8D 7A    .)C.,C.:
$60: 03 AA BD 89 C0 A0 18 BD    C*`.@ X=
$68: 8C C0 30 05 88 D0 F8 F0    .@0E.P80
$70: 11 A9 10 85 01 A9 04 85    Q)P.A)D.
$78: 02 78 C6 00 D0 09 C6 01    B8F@PIFA
----------------------------------------
BUFFER 0/SLOT 6/DRIVE 1/MASK ON /NORMAL
DOS3.3:CHAIN                        /$00
----------------------------------------
COMMAND : _                             

-------------- DISK EDIT ---------------
TRACK $19/SECTOR $0E/VOLUME $FE/BYTE $36
----------------------------------------
$00: 08 50 C8 01 4C 0E 02 00    HPHALNB@
$08: FF 2F AD 31 02 8D AE 03    ?/-1B..C
$10: 18 69 61 AA A0 1A A9 40    X)!* Z)@
$18: 18 69 09 8D 98 03 8E 31    X)I..C.1
$20: 02 98 69 0F 8D 99 03 EE    B.)O..C.
$28: 8F 03 CE 93 03 4C D0 03    .CN.CLPC
$30: 4C 8C 03 AC 2C 80-65-A4    L.C,,.%$
$38: D1 2A 09 CA 2A AC 28 AD    Q*IJ*,(-
$40: 29 89 39 98 29 A4 75 2A    ).9.)$5*
$48: A4 43 2A A4 44 2A A4 52    $C*$D*$R
$50: 2A 89 26 98 29 A4 72 2A    *.&.)$2*
$58: A4 40 2A A4 45 2A A4 53    $@*$E*$S
$60: 2A 83 94 A0 E9 89 31 94    *.I ).1.
$68: A5 E9 19 2C A1 F9 D1 D9    %)Y,!9QY
$70: 38 80 39 AC 28 80 2D AC    8.9,(.-,
$78: 2B 51 EF 29 F9 20 EF 28    +Q/)9 /(
----------------------------------------
BUFFER 0/SLOT 6/DRIVE 1/MASK OFF/NORMAL
DOS3.3:CHAIN                        /$00
----------------------------------------
COMMAND :                               


And the second byte

Code:

-------------- DISK EDIT ---------------
TRACK $19/SECTOR $0E/VOLUME $FE/BYTE $62
----------------------------------------
$00: 08 50 C8 01 4C 0E 02 00    .PH.L...
$08: FF 2F AD 31 02 8D AE 03    ?/-1....
$10: 18 69 61 AA A0 1A A9 40    .)!* .)@
$18: 18 69 09 8D 98 03 8E 31    .).....1
$20: 02 98 69 0F 8D 99 03 EE    ..).....
$28: 8F 03 CE 93 03 4C D0 03    ..N..LP.
$30: 4C 8C 03 AC 2C 80 29 A4    L..,,.)$
$38: D1 2A 09 CA 2A AC 28 AD    Q*.J*,(-
$40: 29 89 39 98 29 A4 75 2A    ).9.)$5*
$48: A4 43 2A A4 44 2A A4 52    $C*$D*$R
$50: 2A 89 26 98 29 A4 72 2A    *.&.)$2*
$58: A4 40 2A A4 45 2A A4 53    $@*$E*$S
$60: 2A 83-94-A0 E9 89 31 94    *.. ).1.
$68: A5 E9 19 2C A1 F9 D1 D9    %).,!9QY
$70: 38 80 39 AC 28 80 2D AC    8.9,(.-,
$78: 2B 51 EF 29 F9 20 EF 28    +Q/)9 /(
----------------------------------------
BUFFER 0/SLOT 6/DRIVE 2/MASK OFF/NORMAL
DOS3.3:CHAIN                        /$00
----------------------------------------
COMMAND : _                             

-------------- DISK EDIT ---------------
TRACK $19/SECTOR $0E/VOLUME $FE/BYTE $62
----------------------------------------
$00: 21 79 E1 28 65 27 2B 29    !9!(%'+)
$08: D6 06 84 18 2B A4 87 2A    V...+$.*
$10: 31 40 48 83 89 33 80 69    1@H..3.)
$18: 31 40 20 A4 B1 2A A7 18    1@ $1*'.
$20: 2B B1 40 26 A4 B0 2A C7    +1@&$0*G
$28: A6 2A E7 BA 2A 65 F9 2A    &*':*%9*
$30: 65 A5 2A 85 05 A9 00 8D    %%*..)..
$38: F8 03 20 E3 03 85 01 84    8. #....
$40: 00 A0 10 B1 00 8D 5C 03    . .1..\.
$48: 8D 6A 03 8D 6D 03 8D 7B    .*..-..;
$50: 03 A0 0F B1 00 8D 5B 03    . .1..[.
$58: 8D 69 03 8D 6C 03 8D 7A    .)..,..:
$60: 03 AA-BD-89 C0 A0 18 BD    .*=.@ .=
$68: 8C C0 30 05 88 D0 F8 F0    .@0..P80
$70: 11 A9 10 85 01 A9 04 85    .)...)..
$78: 02 78 C6 00 D0 09 C6 01    .8F.P.F.
----------------------------------------
BUFFER 0/SLOT 6/DRIVE 2/MASK ON /NORMAL
DOS3.3:CHAIN                        /$00
----------------------------------------
COMMAND : _                             

-------------- DISK EDIT ---------------
TRACK $19/SECTOR $0E/VOLUME $FE/BYTE $62
----------------------------------------
$00: 21 79 E1 28 65 27 2B 29    !9!(%'+)
$08: D6 06 84 18 2B A4 87 2A    V...+$.*
$10: 31 40 48 83 89 33 80 69    1@H..3.)
$18: 31 40 20 A4 B1 2A A7 18    1@ $1*'.
$20: 2B B1 40 26 A4 B0 2A C7    +1@&$0*G
$28: A6 2A E7 BA 2A 65 F9 2A    &*':*%9*
$30: 65 A5 2A 85 05 A9 00 8D    %%*..)..
$38: F8 03 20 E3 03 85 01 84    8. #....
$40: 00 A0 10 B1 00 8D 5C 03    . .1..\.
$48: 8D 6A 03 8D 6D 03 8D 7B    .*..-..;
$50: 03 A0 0F B1 00 8D 5B 03    . .1..[.
$58: 8D 69 03 8D 6C 03 8D 7A    .)..,..:
$60: 03 AA-60-89 C0 A0 18 BD    .*`.@ .=
$68: 8C C0 30 05 88 D0 F8 F0    .@0..P80
$70: 11 A9 10 85 01 A9 04 85    .)...)..
$78: 02 78 C6 00 D0 09 C6 01    .8F.P.F.
----------------------------------------
BUFFER 0/SLOT 6/DRIVE 2/MASK ON /NORMAL
DOS3.3:CHAIN                        /$00
----------------------------------------
COMMAND : _                             

-------------- DISK EDIT ---------------
TRACK $19/SECTOR $0E/VOLUME $FE/BYTE $62
----------------------------------------
$00: 08 50 C8 01 4C 0E 02 00    .PH.L...
$08: FF 2F AD 31 02 8D AE 03    ?/-1....
$10: 18 69 61 AA A0 1A A9 40    .)!* .)@
$18: 18 69 09 8D 98 03 8E 31    .).....1
$20: 02 98 69 0F 8D 99 03 EE    ..).....
$28: 8F 03 CE 93 03 4C D0 03    ..N..LP.
$30: 4C 8C 03 AC 2C 80 29 A4    L..,,.)$
$38: D1 2A 09 CA 2A AC 28 AD    Q*.J*,(-
$40: 29 89 39 98 29 A4 75 2A    ).9.)$5*
$48: A4 43 2A A4 44 2A A4 52    $C*$D*$R
$50: 2A 89 26 98 29 A4 72 2A    *.&.)$2*
$58: A4 40 2A A4 45 2A A4 53    $@*$E*$S
$60: 2A 83-49-A0 E9 89 31 94    *.I ).1.
$68: A5 E9 19 2C A1 F9 D1 D9    %).,!9QY
$70: 38 80 39 AC 28 80 2D AC    8.9,(.-,
$78: 2B 51 EF 29 F9 20 EF 28    +Q/)9 /(
----------------------------------------
BUFFER 0/SLOT 6/DRIVE 2/MASK OFF/NORMAL
DOS3.3:CHAIN                        /$00
----------------------------------------
COMMAND :                               


Dernière édition par toinet le Ven 08 Sep 2017, 18:47; é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: 2893
Localisation: Le Chesnay, France

MessagePosté le: Ven 08 Sep 2017, 18:45    Sujet du message: Répondre en citant

And the disassembly and explanations of the CHAIN code

Code:

The CHAIN program

0208:4C 0E 02       JMP   $020E         
020B:00             BRK                 
020C:FF             @@@                 
020D:2F             @@@                 
020E:AD 31 02       LDA   $0231         ; 4C
0211:8D AE 03       STA   $03AE         ; save it
0214:18             CLC                 
0215:69 61          ADC   #$61          ; 4C+61
0217:AA             TAX                 ; =AD
0218:A0 1A          LDY   #$1A         
021A:A9 40          LDA   #$40         
021C:18             CLC                 
021D:69 09          ADC   #$09          ; 40+09
021F:8D 98 03       STA   $0398         ; =49 becomes EOR
0222:8E 31 02       STX   $0231         ; save AD
0225:98             TYA                 ; 1A
0226:69 0F          ADC   #$0F          ; +0F
0228:8D 99 03       STA   $0399         ; =29 becomes EOR #$29
022B:EE 8F 03       INC   $038F         ; 01 becomes 02
022E:CE 93 03       DEC   $0393         ; 04 becomes 03
0231:4C D0 03       JMP   $03D0         ; it is now LDA
0234:4C 8C 03       JMP   $038C         ; next step
0237:AC 2C 80       LDY   $802C         

===

The routine that decyphers the protection check

038C:A9 37          LDA   #$37          ; we decypher the code
038E:85 01          STA   $01           ; changed to $02
0390:A9 02          LDA   #$02         
0392:85 04          STA   $04           ; changed to $03
0394:A0 00          LDY   #$00         
0396:B1 02          LDA   ($02),Y       
0398:69 15          ADC   #$15          ; changed to EOR #$29
039A:91 02          STA   ($02),Y       
039C:E6 02          INC   $02           
039E:D0 02          BNE   $03A2         
03A0:E6 03          INC   $03           
03A2:A5 02          LDA   $02           ; from $0237 to $038B
03A4:C9 8C          CMP   #$8C         
03A6:D0 EE          BNE   $0396         
03A8:A5 03          LDA   $03           
03AA:C9 03          CMP   #$03         
03AC:D0 E8          BNE   $0396         ; and call the next step
03AE:AD 80 03       LDA   $0380         ; changed to JMP (4C)
03B1:A9 08          LDA   #$08         
03B3:85 02          STA   $02           
03B5:A9 02          LDA   #$02         
03B7:85 03          STA   $03           
03B9:A9 60          LDA   #$60         
03BB:A0 00          LDY   #$00         
03BD:91 02          STA   ($02),Y       
03BF:E6 02          INC   $02           
03C1:D0 FA          BNE   $03BD         
03C3:E6 03          INC   $03           
03C5:4C BD 03       JMP   $03BD         
03C8:20 B1 03       JSR   $03B1         
03CB:6C 00 00       JMP   ($0000)       
03CE:20 50 41       JSR   $4150         

===

----------- DISASSEMBLY MODE -----------
0380:20 37 02       JSR   $0237         ; the protection
0383:20 32 03       JSR   $0332         ; the return
0386:20 CC 02       JSR   $02CC         
0389:4C C8 03       JMP   $03C8         

===

Entry point of the protection check

0237:85 05          STA   $05           ; save pointer
0239:A9 00          LDA   #$00          ; crash the & vector
023B:8D F8 03       STA   $03F8         
023E:20 E3 03       JSR   $03E3         ; get IOB pointer
0241:85 01          STA   $01           
0243:84 00          STY   $00           
0245:A0 10          LDY   #$10          ; get values
0247:B1 00          LDA   ($00),Y       ; and init our routine
0249:8D 5C 03       STA   $035C         ; previous drive
024C:8D 6A 03       STA   $036A         
024F:8D 6D 03       STA   $036D         
0252:8D 7B 03       STA   $037B         
0255:A0 0F          LDY   #$0F         
0257:B1 00          LDA   ($00),Y       ; previous slot
0259:8D 5B 03       STA   $035B         
025C:8D 69 03       STA   $0369         
025F:8D 6C 03       STA   $036C         
0262:8D 7A 03       STA   $037A         
0265:AA             TAX                 
0266:BD 89 C0       LDA   $C089,X       ; turn drive on
0269:A0 18          LDY   #$18          ; wait
026B:BD 8C C0       LDA   $C08C,X       
026E:30 05          BMI   $0275         
0270:88             DEY                 
0271:D0 F8          BNE   $026B         
0273:F0 11          BEQ   $0286         
0275:A9 10          LDA   #$10          ; counters
0277:85 01          STA   $01           
0279:A9 04          LDA   #$04         
027B:85 02          STA   $02           
027D:78             SEI                 
027E:C6 00          DEC   $00           
0280:D0 09          BNE   $028B         
0282:C6 01          DEC   $01           
0284:D0 05          BNE   $028B         
0286:BD 88 C0       LDA   $C088,X       ; return
0289:58             CLI                 
028A:60             RTS                 
028B:BD 8C C0       LDA   $C08C,X       ; read nibbles
028E:10 FB          BPL   $028B         
0290:C9 D5          CMP   #$D5         
0292:D0 EA          BNE   $027E         
0294:A0 0C          LDY   #$0C         
0296:EA             NOP                 
0297:BD 8C C0       LDA   $C08C,X       
029A:10 FB          BPL   $0297         
029C:88             DEY                 
029D:D0 F7          BNE   $0296         
029F:C9 AA          CMP   #$AA         
02A1:D0 DB          BNE   $027E         
02A3:F0 00          BEQ   $02A5         
02A5:BD 8C C0       LDA   $C08C,X       
02A8:C9 08          CMP   #$08         
02AA:B0 D2          BCS   $027E         
02AC:BD 80 C0       LDA   $C080,X       
02AF:10 FB          BPL   $02AC         
02B1:C9 EB          CMP   #$EB         
02B3:D0 C9          BNE   $027E         
02B5:BD 80 C0       LDA   $C080,X       
02B8:10 FB          BPL   $02B5         
02BA:C9 FD          CMP   #$FD         
02BC:D0 C0          BNE   $027E         
02BE:C6 02          DEC   $02           
02C0:D0 C9          BNE   $028B         
02C2:BD 88 C0       LDA   $C088,X       ; we're good
02C5:A9 4C          LDA   #$4C          ; reset the & vector
02C7:8D F8 03       STA   $03F8         
02CA:58             CLI                 
02CB:60             RTS                 ; exit

The exit check

0304:A5 05          LDA   $05           ; get it back
0306:C9 03          CMP   #$03         
0308:D0 DF          BNE   $02E9         
030A:AD F8 03       LDA   $03F8         ; is our vector
030D:D0 17          BNE   $0326         ; different from 0
030F:A2 04          LDX   #$04          ; no, copy, crash
0311:86 76          STX   $76           ; with GOSUB ERR
0313:A2 FB          LDX   #$FB          ; at line 1275
0315:86 75          STX   $75           
0317:20 FB DA       JSR   $DAFB         
031A:A2 D2          LDX   #$D2         
031C:A0 45          LDY   #$45         
031E:91 00          STA   ($00),Y       
0320:88             DEY                 
0321:D0 FB          BNE   $031E         
0323:4C 19 D4       JMP   $D419         ; end of crash

0326:A5 05          LDA   $05           ; we're good
0328:A0 51          LDY   #$51          ; we clear our table
032A:91 00          STA   ($00),Y       
032C:88             DEY                 
032D:D0 FB          BNE   $032A         
032F:4C 08 02       JMP   $0208         ; return and exit
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