Index du Forum
IDENTIFICATION SERVEUR : 51.77.218.217 - CLIENT : 3.233.215.231

 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 

Beach-head (Access Software, 1984)

 
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: Dim 21 Oct 2012, 20:53    Sujet du message: Beach-head (Access Software, 1984) Répondre en citant

Beach-head is a multi-screen action game which requires different skills and provides new sequences as you progress through the game.

I own the original game from the Triple Pack (Beach head, Beach head II, Raid over Moscow) and I believe the protection was de-activated on the original disk I own. Nevertheless, it is still interesting to learn as the original protection code is still present on the disk.


DISK FORMAT
It is a standard 16-sec disk.
It can be copied with Locksmith fast disk backup.
The disk I have boots and runs but I am sure the original disk does not run because of its protection check.

When one encounters a copyable disk, one has several options:
- there is no protection,
- the protection lies on track $23,
- the protection relies on nibble check or nibble count,
- there is an off-disk protection (Hello Carmen Sandiego).


BOOT TRACE
Remember, I use an Apple IIgs...
- 9600<C600.C6FFM
- 96FB:20 FDDA AD C0E8 60
- 9600G
01

Let's see what is at $0800:
- Oh, a standard DOS 3.3 boot sector!
- Data is loaded starting at $4000 until sector $D of track 0.

Let's get that boot stage:
- 96FB:A9 4C 8D 4A A9 59 8D 84B A9 FF 8D 84C 4C 801
- 9600G
*
- C0E8

Let's see what we have at $4000... Discover it in the next message. I could have gone further with the boot trace but as the protection code is turned off, I may give bad clues. The idea is to stop the boot process after the protection code is loaded (the routine is at $4600)


HOW TO REMOVE THE PROTECTION?
- From a disk editor (Hello Disk Fixer v4), read T0/S7,
- At offset $20: EA EA EA EA EA 4C 37 46,
- Save the sector back to disk.


WHERE'S THE DISK?
It is available at http://www.brutaldeluxe.fr/crack/BEACHHEAD.DSK and is not signed!


You're done! Enjoy the game!

LoGo
10/2012


Derničre édition par toinet le Dim 21 Oct 2012, 21:07; é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: 3043
Localisation: Le Chesnay, France

MessagePosté le: Dim 21 Oct 2012, 20:56    Sujet du message: Répondre en citant

This is the code loaded at $4000, from T0/S0 to T0/SD. The code displays the boot logo and calls the protection that is located at T0/SE to T0/SF

The RWTS is moved from $4100..$45FF to $0400..$08FF.

Code:

*
* Beach Head
*
* (c) 1984, Access Software
* (pseudo k) 2012, LoGo
*

         ORG   $004000
         MX    %11

SOFTEV   EQU   $03F2
TXTCLR   EQU   $C050
MIXCLR   EQU   $C052
TXTPAGE2 EQU   $C055
HIRES    EQU   $C057
SETPWRC  EQU   $FB6F

L4000    LDA   TXTCLR     ; HGR
         LDA   HIRES
         LDA   MIXCLR

         LDA   #$00       ; Reset vector
         STA   SOFTEV
         LDA   #$BF
         STA   SOFTEV+1
         JSR   SETPWRC

         LDA   #$C9       ; Some inits
         STA   $BFFF
         LDA   #$38
         STA   $BFC2
         LDA   #$74
         STA   $7655
         LDA   #$91
         STA   $8723

         JSR   L4649

         LDA   #$D0       ; A stack pointer
         STA   $0181

         LDY   #$00       ; Move the RWTS
L4034    LDA   L4100,Y
         STA   $0400,Y
         LDA   L4200,Y
         STA   $0500,Y
         LDA   L4300,Y
         STA   $0600,Y
         LDA   L4400,Y
         STA   $0700,Y
         LDA   L4500,Y
         STA   $0800,Y
         INY
         BNE   L4034

         STX   $0786      ; Save slot*16
         STX   $0794
         STX   $0586

         LDA   #$01
         STA   $0787
         STA   $0795
         TXA
         LSR
         LSR
         LSR
         LSR
         TAX
         LDA   #$00
         STA   $04F8,X
         STA   $0478,X

         LDA   #$16       ; From 16/7 to 18/6
         STA   $02        ; at $6000
         LDA   #$07
         STA   $03
         LDA   #$00
         STA   $04
         LDA   #$60
         STA   $05
         LDA   #$18
         STA   $06
         LDA   #$06
         STA   $07

         LDX   #$F0
         TXS
         JSR   $0400

         LDA   #$18       ; From 18/7 to 1A/0
         STA   $02        ; at $8000
         LDA   #$07
         STA   $03
         LDA   #$1A
         STA   $06
         LDA   #$00
         STA   $07
         STA   $04
         LDA   #$80
         STA   $05
         JSR   $0400
         JMP   L4600      ; Next load phase

         HEX   C3ACA4B3C2ACA4B3B3ACA4B3B3ACA4B2
         HEX   B38DD4C9B1B5A0C4C2A0A4B0B0ACA4B0
         HEX   B0ACA4B0B0ACA4B1B6ACA4B1B6ACA4B0
         HEX   B3ACA4B1C5ACA4B3B3ACA4B3B3ACA4B3
         HEX   B3ACA4B3C28DD4C9B1B6A0C4C2A0B2B0
         HEX   B7AC

L4100    HEX   A9CC8D8B07A9068D8C07A5048D8D07A5
         HEX   058D8E07A50638E5020A0A0A0A186507
         HEX   38E503186D8E078D8E07A5068D8907A5
         HEX   078D8A07A9008D8807A9018D91072080
         HEX   0720E105AD8A07C503D007AD8907C502
         HEX   F016CE8E07CE8A07AD8A071008CE8907
         HEX   A90F8D8A074C3E04A900854860EAEAEA
         HEX   EAEAEAEAEAEAEAEAEAEAEAEAEAEAEAEA
         HEX   A02088F064BD8CC010FB49D5D0F4EABD
         HEX   8CC010FBC9AAD0F2A056BD8CC010FBC9
         HEX   ADD0E7A900888426BC8CC010FB590007
         HEX   A426992907D0EE8426BC8CC010FB5900
         HEX   07A426990002C8D0EEBC8CC010FBD900
         HEX   07D016BD8CC010FBC9DED00DEABD8CC0
         HEX   10FBC9AAD0034C660838608A4A4A4A4A
         HEX   A860B18DBB8D00000000000000000000
L4200    HEX   A003B14848A52FA00E914868F009C52F
         HEX   F005A9204CC306A005B148A8B96808C5
         HEX   2DF0034C8706282080040890034C8706
         HEX   28A2008626207808AEF805182438A00D
         HEX   9148BD88C060862B852ACD7804F05DA9
         HEX   008526AD7804852738E52AF03DB00749
         HEX   FFEE7804900569FECE7804C5269002A5
         HEX   26C90CB0054C7905EAA838209E05B911
         HEX   074C8705EAEAEA200007A5271820A105
         HEX   B91D07200007E626D0B920000718AD78
         HEX   0429032A052BAABD80C0A62B6048A001
         HEX   B13C6A6890080A20BE054E780460852A
         HEX   20EB04B9780424353003B9F8048D7804
         HEX   A52A2435300599F80410039978044C46
         HEX   050878200006B003281860283860A0C3
         HEX   D3D7C8403700D4C5CDD0B1002600D4C5
L4300    HEX   84488549A0028CF806A0048CF804AE86
         HEX   07BD8EC0BD8CC0A008BD8CC048684868
         HEX   8EF805DD8CC0D00388D0EE08BD89C0A0
         HEX   06B148993600C8C00AD0F6A003B13C85
         HEX   47AD87076ABD8AC066352808D00BA007
         HEX   20000788D0FAAEF805A004B14820AD05
         HEX   28D011A447100DA01288D0FDE646D0F7
         HEX   E647D0F3A00CB1486A08A0308C7805AE
         HEX   F8052000089024CE780510F6AD780448
         HEX   A96020D006CEF806F028A9048DF804A9
         HEX   0020AD056820AD054C7A06A42ECC7804
         HEX   F017AD7804489820D00668CEF804D0E5
         HEX   F0CA68284C3D05EAEA4C00050001D8EF
         HEX   48A002B1486A663520EB04680A243530
         HEX   0599F804100399780460D0CC218007D2
         HEX   C5C1C4D3C5C3D421E105C3D4C3CBB9B8
L4400    HEX   A211CAD0FDE646D002E64738E901D0F0
         HEX   6001302824201E1D1C1C1C1C1C702C26
         HEX   221F1E1D1C1C1C1C1CA0A0B5D4A0B4C6
         HEX   A0A0CFD3A0D4A0A0B1A0A0CCA0A0A0C3
         HEX   A0A0CEA0A0C2A0A0A0A0A0A0A0A0A0A0
         HEX   A0A0A0A0CCA0A0A0C3A0C4BAA0CDA4B3
         HEX   A0ACB5BBB7B4A0B0A0A0CDA0A0A0A0A0
         HEX   A0A0A0A0ADA0A0C5A0C2CEA0A0D2A0A0
         HEX   A085A907600160010000000000000000
         HEX   0001000000000001989902039C040506
         HEX   A0A1A2A3A4A50708A8A9AA090A0B0C0D
         HEX   B0B10E0F10111213B81415161718191A
         HEX   C0C1C2C3C4C5C6C7C8C9CA1BCC1C1D1E
         HEX   D0D1D21FD4D52021D822232425262728
         HEX   E0E1E2E3E4292A2BE82C2D2E2F303132
         HEX   F0F1333435363738F8393A3B3C3D3E3F
L4500    HEX   A0FC8426C8D007E626D0034CE904BD8C
         HEX   C010FBC9D5D0EDEABD8CC010FBC9AAD0
         HEX   F2A003BD8CC010FBC996D0E7A9008527
         HEX   BD8CC010FB2A8526BD8CC010FB252699
         HEX   2C0045278810E7A8F0034CE904BD8CC0
         HEX   10FBC9DEF0034CE904EABD8CC010FBC9
         HEX   AAF0034CE9041860000D0B0907050301
         HEX   0E0C0A080604020FA000A256CA30FBB9
         HEX   00025E29072A5E29072A913EC8C426D0
         HEX   EB60601106C2C4B3C3201906C2C4B4C5
         HEX   212B06C2C4B5B4203106C2C4B7B46044
         HEX   06C2C4B7C6604806C2C4B9B0215906C2
         HEX   C4B8B7205006D4D2D9D4D2CB217406C2
         HEX   C4B9C5206706C2C4C1B0206906C2C4C2
         HEX   C3207A06C2C4C3B1208206D2C4C1C4D2
         HEX   B1B6210008C2C4C5C421AB06C2C4C3C5

*---------- The next load phase

L4600    LDA   #$00       ; From 0/E to 0/F
         STA   $02        ; at $4000
         LDA   #$0E
         STA   $03
         LDA   #$00
         STA   $04
         LDA   #$00
         STA   $06
         LDA   #$0F
         STA   $07
         LDA   #$05
         STA   L4636
         LDA   #$40
         STA   $05
         JSR   $0400      ; Load code

L4620    NOP              ; The protection check
         NOP              ; was here!!!!!!!!!!!!
         NOP
         NOP
         NOP
         JMP   L4637      ; Go to next phase

* LoGo: The code could have been the following:

L4620    JSR   $4000      ; Check protection
         BVC   *+3        ; -> copy
         JMP   L4637      ; -> original

*----------

         DEC   L4636      ; Give another try
         BNE   L4620
         LDA   TXTPAGE2   ; Switch to page 2
L4630    DEX
         BNE   L4630      ; Wait a little bit
         JMP   L48AB      ; and reboot

L4636    DB    $A0

L4637    INC   $0181      ; Set original disk
         INC   $BFFF      ; values
         DEC   $BFC2
         INC   $0181
         DEC   $0102
         JMP   $8000      ; and jumps!

*----------

L4649    TXA              ; Save X
         PHA              ; and set
         LDY   #$00       ; some values
         LDA   #$64
         STA   $0102
         LDA   #$61
         STA   $7649

         TYA              ; Clear HGR
L4658    STA   $2000,Y
         STA   $2100,Y
         STA   $2200,Y
         STA   $2300,Y
         STA   $2400,Y
         STA   $2500,Y
         STA   $2600,Y
         STA   $2700,Y
         STA   $2800,Y
         STA   $2900,Y
         STA   $2A00,Y
         STA   $2B00,Y
         STA   $2C00,Y
         STA   $2D00,Y
         STA   $2E00,Y
         STA   $2F00,Y
         STA   $3000,Y
         STA   $3100,Y
         STA   $3200,Y
         STA   $3300,Y
         STA   $3400,Y
         STA   $3500,Y
         STA   $3600,Y
         STA   $3700,Y
         STA   $3800,Y
         STA   $3900,Y
         STA   $3A00,Y
         STA   $3B00,Y
         STA   $3C00,Y
         STA   $3D00,Y
         STA   $3E00,Y
         STA   $3F00,Y
         INY
         INY
         INY
         BNE   L4658

L46BD    LDA   L48AB,Y    ; The reset code
         STA   $BF00,Y
         INY
         BPL   L46BD

*---------- The following code puts
*---------- data on the HGR page

         HEX   A200BDFB479D8E23BD06489D8E27BD11
         HEX   489D8E2BBD1C489D8E2FBD27489D8E33
         HEX   BD32489D8E37BD3D489D8E3BBD48489D
         HEX   8E3FBD53489D3620BD5E489D3624BD69
         HEX   489D3628BD74489D362CBD7F489D3630
         HEX   BD8A489D3634BD95489D3638BDA0489D
         HEX   363CE8E00BD09BA200BD61479DB021BD
         HEX   77479DB025BD8D479DB029BDA3479DB0
         HEX   2DBDB9479DB031BDCF479DB035BDE547
         HEX   9DB039E8E016D0D1
         PLA
         TAX
         RTS

         HEX   1B1B1616001B33001B1B3B333F003B1B
         HEX   1E363316163333333333003333003333
         HEX   23332D0023330C231B33333333333303
         HEX   00330600333303370C0003330C030B03
         HEX   33371B333316001B0C001B1B1B3B0C00
         HEX   1B1B0C030316333B3333333000330C00
         HEX   331B033B0C00031B0C030B30333B3333
         HEX   333300330C00333323330C0023330C23
         HEX   1B3333331B1B1616001B0C001B333B33
         HEX   1E003B331E3633161633FFFF000C3636
         HEX   3B16160000C081001823232333330000
         HEX   0000003303030303030000FFFF003303
         HEX   031B16160000E083003B030303303000
         HEX   000000003323232333330000FFFF0033
         HEX   36363B16160000B08600000000000000
         HEX   000000000016163B3F330C1B3B9FFC00
         HEX   3333232D33183323988C000333030C33
         HEX   33330300000016331B0C33331B1BBFFE
         HEX   003033030C3B3B1B03FC9F003333030C
         HEX   3B3333230000001616031E3333333BCF
         HEX   F900000000000000

*---------- The reset code
*---------- Clears memory and crashes...

         LDA   #$01
L48AB    STA   $00
         STA   $60
         LDA   #$E0
         STA   $01
         LDY   #$00
L48B5    LDA   ($00),Y
         STA   ($02),Y
         INY
         BNE   L48B5
         INC   $01
         INC   $03
         LDA   #$01       ; Always loop
         BNE   L48B5

         HEX   3F468142774254445345184707476C46
         HEX   95422B46D2443943404361422E42F546
         HEX   22453A45D8466B427142EB451344EF43
         HEX   8E465A43494303447B469944
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: Dim 21 Oct 2012, 21:00    Sujet du message: Répondre en citant

This is the protection (no longer called on my Triple pack disk) loaded at $4000 from T0/SE to T0/SF.

That is a nibble check routine. It first checks for nibbles then reads some of them then reads again some other nibbles. The nibbles are then compared.

What is original is the use of the V flag to determine whether we have an original disk (V is set) or a copy (V is clear)

It must be noted that the protection routine is EORed twice, first with #$CD then with #$B5, on both entry and exit!
What you have here is the decyphered code to ease readability. The next message will tell you how to decypher it.

Code:

*
* Beach Head
*
* (c) 1984, Access Software
* (pseudo k) 2012, LoGo
*

         ORG   $004000
         MX    %11

*---------- This is the protection call #1

L4000    PHP              ; Save the status flag
         PLA
         STA   L4156
         SEI

         LDA   #$FF       ; Flag
         STA   $06

L400A    LDX   #$FF       ; Decypher code
L400C    DEX              ; with key #$CD
         LDA   #$CD
         EOR   L4026,X
         STA   L4026,X
         CPX   #$00
         BNE   L400C
         LDA   $06
         CMP   #$00
         BNE   L4026
         CLI
         LDA   L4156      ; Reset the status flag
         PHA
         PLP
         RTS

L4026    JMP   L4166      ; Call #2

*----------

L4029    LDA   $0586      ; The slot*16
         TAX
         LDA   #$00
         STA   L4159
         BIT   L400C
         LDA   $C08E,X    ; Turn drive 1 on
         LDA   $C08C,X
         LDA   $C08A,X
         LDA   $C089,X
         JSR   L4131      ; wait
L4044    LDY   #$F0       ; retry value #1
         STY   L4155
         LDY   #$00       ; retry value #2
         STY   L4157
L404E    INC   L4157
         BNE   L405B
         DEC   L4155
         BNE   L405B
         JMP   L4118

*----------

L405B    LDA   $C08C,X    ; Check for
         BPL   L405B
L4060    CMP   #$AA       ; #$AA
         BNE   L404E
         NOP
L4065    LDA   $C08C,X
         BPL   L4065
         CMP   #$AD       ; #$AD
         BNE   L4060
         NOP
L406F    LDA   $C08C,X
         BPL   L406F
         CMP   #$AA       ; #$AA
         BNE   L4060
         LDY   #$13
L407A    LDA   $C08C,X
         BPL   L407A
         CMP   #$B3       ; #$B3
         BNE   L4060
L4083    LDA   $C08C,X
         BPL   L4083
         STA   L4141,Y    ; Save $14 nibbles
         DEY
         BNE   L4083
         LDA   #$00
L4090    INY
         EOR   L4141,Y    ; EOR them all
         CPY   #$13
         BNE   L4090
         CMP   #$FF       ; Must have #$FF
         BNE   L4118      ; -> copy
         LDY   #$F5       ; -> original
L409E    INY
         NOP
         BEQ   L4118
L40A2    LDA   $C08C,X
         BPL   L40A2
L40A7    CMP   #$AA       ; #$AA
         BNE   L409E
L40AB    LDA   $C08C,X
         BPL   L40AB
         CMP   #$AA       ; #$AA
         BNE   L40A7
         NOP
L40B5    LDA   $C08C,X
         BPL   L40B5
         CMP   #$AA       ; #$AA
         BNE   L40A7
         NOP
L40BF    LDA   $C08C,X
         BPL   L40BF
         CMP   #$AA       ; #$AA
         BNE   L40A7
         PHP              ; wait
         PLP
         PHP
         PLP
         PHP
         PLP
         NOP
         LDA   $C08C,X    ; Read $A nibbles
         LDY   L4159
         STA   L415B,Y
         INY
         STY   L4159
         CPY   #$0A
         BEQ   L40E3
         JMP   L4044

L40E3    STX   L415A      ; save slot*16
         LDY   #$0A       ; loop through the nibbles
         DEY
         LDA   #$00       ; index
         STA   L4165
L40EE    LDA   L415B,Y    ; compare nibbles
         DEY
         BMI   L410A
         CMP   #$00       ; with a 0
         BEQ   L4104
         LDX   L415B,Y
         CPX   #$00       ; is a 0
         BEQ   L4104
         CMP   L415B,Y    ; and its neighbour
         BNE   L40EE
L4104    INC   L4165      ; next
         JMP   L40EE

L410A    LDX   L415A      ; next++
         LDA   #$0A
         INC   L4165
         CMP   L4165
         BEQ   L4118
         CLV              ; clear V flag if copy

L4118    LDA   $C088,X    ; stop drive
         LDA   #$00       ; set flag
         STA   $06
         LDA   L4156      ; read end value
         BVC   L4129      ; jump if copy
         ORA   #$40       ; force if original
         JMP   L412B

L4129    AND   #$BF       ; force if copy
L412B    STA   L4156      ; save it
         JMP   L4166      ; end the protection check

*---------- Wait

L4131    LDY   #$FF
         STY   L4155
L4136    DEY
         BNE   L4136
         LDY   #$FF
         DEC   L4155
         BNE   L4136
         RTS

L4141    HEX   00000000000000000000000000000000
         HEX   00000000
L4155    DB    $00
L4156    DB    $30
L4157    DB    $00
         DB    $00
L4159    DB    $00
L415A    DB    $00
L415B    HEX   00000000000000000000
L4165    DB    $00

*---------- This is call #2

L4166    LDX   #$FF       ; Second decypher
L4168    DEX
         LDA   #$B5
         EOR   L4029,X
         STA   L4029,X
         CPX   #$00
         BNE   L4168
         LDA   $06
         CMP   #$00
         BNE   L417E
         JMP   L400A      ; Back to program
L417E    JMP   L4029      ; Call the protection

         HEX   57BE2910000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   00000000000000000000000000000000
         HEX   000000000000000000000000000000
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: Dim 21 Oct 2012, 21:03    Sujet du message: Répondre en citant

How to decypher the protection routine #1

Code:

         LDX   #$FF       ; Decypher code
L40      DEX              ; with key #$CD
         LDA   #$CD
         EOR   $4026,X
         STA   $4026,X
         CPX   #$00
         BNE   L40

         LDX   #$FF       ; Decypher code
L50      DEX              ; with key #$B5
         LDA   #$B5
         EOR   $4029,X
         STA   $4029,X
         CPX   #$00
         BNE   L50
         RTS


Move that routine at $0300 and execute it. The code starting at $4026 will reveal its secrets!
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