-------------L.A. Crackdown------------ A 4am crack 2015-08-05 --------------------------------------- Name: L.A. Crackdown Genre: simulation Year: 1988 Authors: Nexa Publisher: Epyx Media: double-sided 5.25-inch floppy OS: custom Previous cracks: The Necromancer / First Class ~ Chapter 0 In Which Various Automated Tools Fail In Interesting Ways COPYA side A: immediate disk read error side B: no errors All further attention will be focused on side A. Locksmith Fast Disk Backup unable to read any track EDD 4 bit copy (no sync, no count) no read errors, but the copy swings to a high track and reboots Copy ][+ nibble editor all tracks use standard prologues (address: D5 AA 96, data: D5 AA AD) but modified epilogues (address: FF FF FF, data: FF FF FF) Disk Fixer ["O" -> "Input/Output Control"] set Address Epilogue to "FF FF FF" set Data Epilogue to "FF FF FF" Success! All tracks readable! T00,S00 -> looks like a DOS 3.3 boot0 T11 -> looks like a DOS 3.3 catalog Why didn't COPYA work? modified epilogue bytes (every track) Why didn't Locksmith FDB work? modified epilogue bytes (every track) Why didn't my EDD copy work? probably a nibble check during boot Next steps: 1. capture RWTS with AUTOTRACE 2. convert disk to standard format with Advanced Demuffin 3. find nibble check and bypass it ~ Chapter 1 In Which We Are Surprised [S6,D1=original disk] [S5,D1=my work disk] ]PR#5 CAPTURING BOOT0 ...reboots slot 6... ...reboots slot 5... SAVING BOOT0 ]BLOAD BOOT0,A$800 ]CALL -151 *801L 0801- A5 27 LDA $27 0803- C9 09 CMP #$09 0805- D0 1B BNE $0822 0807- 20 61 08 JSR $0861 <-- ! 080A- A5 2B LDA $2B 080C- 4A LSR 080D- 4A LSR 080E- 4A LSR 080F- 4A LSR 0810- 09 C0 ORA #$C0 0812- 85 3F STA $3F 0814- A9 5C LDA #$5C 0816- 85 3E STA $3E This looks like a normal DOS 3.3 boot0, except for that suspicious call to $0861 in the first-run part of the loop (at $0807). *861L ; write to the language card RAM bank 2 0861- AD 81 C0 LDA $C081 0864- AD 81 C0 LDA $C081 ; copy $F800..$FFF into LC RAM bank 2 0867- A9 F8 LDA #$F8 0869- 85 01 STA $01 086B- A9 00 LDA #$00 086D- A8 TAY 086E- 85 00 STA $00 0870- 85 02 STA $02 0872- A9 08 LDA #$08 0874- 85 03 STA $03 0876- B1 00 LDA ($00),Y 0878- 91 00 STA ($00),Y 087A- E6 00 INC $00 087C- D0 02 BNE $0880 087E- E6 01 INC $01 0880- C6 02 DEC $02 0882- D0 F2 BNE $0876 0884- C6 03 DEC $03 0886- D0 EE BNE $0876 ; read/write LC RAM bank 2 0888- AD 83 C0 LDA $C083 088B- AD 83 C0 LDA $C083 088E- 60 RTS That's not unheard of. Lots of programs do similar tricks to fight against modified hardware chips ("F8 ROMs"), which were popular among hackers in the 1980s. But wait! Here's the real reason: *8FE.8FF 08FE- EB 0C This disk is loading boot1 straight into the languard card, starting at $EB00! That's why it set RAM bank 2 to read/write (at $0888). The rest of boot0 is unsurprising. It ends up here: 083C- EE FE 08 INC $08FE 083F- EE FE 08 INC $08FE 0842- 20 89 FE JSR $FE89 0845- 20 93 FE JSR $FE93 0848- 20 2F FB JSR $FB2F 084B- A6 2B LDX $2B 084D- 4C 00 F0 JMP $F000 <-boot1 And that's where I need to interrupt the boot: $084D. *9600 - Advance to next parm - Exit edit mode R - Restore DOS 3.3 parameters O - Edit Original disk's parameters C - Edit Copy disk's parameters G - Begin demuffin process --^-- Pressing "G" switches to the Locksmith Fast Disk Copy UI. It assumes that both disks are in slot 6, and that drive 1 is the original and drive 2 is the copy. [S6,D1=original disk] [S6,D2=blank disk] --v-- LOCKSMITH 7.0 FAST DISK BACKUP R................................... W*********************************** HEX 00000000000000001111111111111111222 TRK 0123456789ABCDEF0123456789ABCDEF012 0................................... 1................................... 2................................... 3................................... 4................................... 5................................... 6................................... 7................................... 8................................... 9................................... A................................... B................................... C................................... D................................... 12 E................................... F................................... [ ] PRESS [RESET] TO EXIT --^-- Side B needs no conversion. COPYA was able to copy it, so it's already in a standard format. ~ Chapter 5 In Which We Are Finished Here is a little helper program that writes to the disk in slot 6, drive 1. There is no confirmation and no error checking, because life is nasty, brutish, and short. 08C0- A9 08 LDA #$08 08C2- A0 E8 LDY #$E8 08C4- 20 D9 03 JSR $03D9 08C7- AC ED 08 LDY $08ED 08CA- 88 DEY 08CB- 10 05 BPL $08D2 08CD- A0 0F LDY #$0F 08CF- CE EC 08 DEC $08EC 08D2- 8C ED 08 STY $08ED 08D5- CE F1 08 DEC $08F1 08D8- CE E1 08 DEC $08E1 08DB- D0 E3 BNE $08C0 08DD- 60 RTS *8E0.8FF +-- sector count v 08E0- 00 02 00 00 00 00 00 00 08E8- 01 60 01 00 00 02 FB 08 ^^ ^^ track/sector (both of these count down) 08F0- 00 4D 00 00 02 00 FE 60 ^^ address (also counts down) 08F8- 01 00 00 00 01 EF D8 00 *BSAVE WRITE BOOT1 DECRYPTED,A$8C0,L$40 *8C0G ...write write write... We have no use for that nibble check. Its two purposes in life were to check if we have an original disk (we don't) and decrypt the rest of boot1 (now permanently decrypted). So boot0 can jump straight to $EC00 instead of $F000 (at $084D). T00,S00,$4F change "F0" to "EC" ]PR#6 ...works... The disk can read itself, so the RWTS must be flexible enough to read disks in a standard format. This makes sense; the original side B was already in a standard format. But it confirms that they used a flexible RWTS instead of mucking about with an RWTS swapper. Quod erat liberandum. --------------------------------------- A 4am crack No. 393 ------------------EOF------------------