Mache hier mal einen hoffentlich sehr spannenden, neuen Thread auf (weil immer wieder mal Fragen dazu hier auftauchen) ... jeder Beitrag von euch ist natürlich herzlich willkommen.
C64 Cracks. Wie funktioniert das?
- Parser
- Thread is Unresolved
-
-
Puristische Formen sind Veränderungen von nur 1 oder 2 oder 3 Bytes im Vergleich zur Originaldiskette. Das betrifft aber meistens nur die ältesten und spezielle C64-Originaldisketten in der Frühphase mit vergleichsweise einfachen Kopierschutzverfahren (Read Errors in einzelnen Sektoren auf bestimmten Tracks oder Komplettfehlern auf einem (z.B. auch unformatierten) Gesamttrack).
Wie funktioniert das wohl?
-
Wie funktioniert das wohl?
Stephan Scheuer kennt sich da sehr, sehr gut aus auch ... übrigens.
Erstmal mit den ganz einfachen Sachen anfangen.
-
Ja, sicher.
-
Ja, sicher.
Der obige Code-Schnipsel ist übrigens Ocean Protection auf Track 22 Sektor 10 ... war nur ein einfaches Beispiel for Beginners.
-
Wer sich mit dem Thread-Thema erstmal und zuerst näher beschäftigen möchte, fängt in i.d.R. erstmal lektüremäßig mit diesem schicken Buch an.
-
Hier die Abfrage des Lesefehlers 23 im einzelen.
Code- sei
- ldx #$ff
- txs
- cli
- lda #$30
- sta a1098
- jsr rom_clall ; ---- $ffe7 - close or abort all files
- ldx #$86
- ldy #<x1086
- lda #>x1086
- jsr rom_setnam ; ---- $ffbd - set file name
- lda #$0f
- tay
- ldx #$08
- jsr rom_setlfs ; ---- $ffba - set file parameters
- jsr rom_open ; ---- $ffc0 - open log.file after setlfs,setnam
- lda #$02
- tay
- ldx #$08
- jsr rom_setlfs ; ---- $ffba - set file parameters
- lda #$01
- ldx #<x1089
- ldy #>x1089
- jsr rom_setnam ; ---- $ffbd - set file name
- jsr rom_open ; ---- $ffc0 - open log.file after setlfs,setnam
- lda #$08
- jsr rom_listen ; ---- $ffb1 - make serial device listen
- lda #$6f
- jsr rom_second ; ---- $ff93 - send secondary addr after listen
- ldx #$00
- b1041 stx a1097
- lda f108a,x
- beq b1052
- jsr rom_ciout ; ---- $ffa8 - output byte to serial
- ldx a1097
- inx
- bne b1041
- b1052 jsr rom_unlsn ; ---- $ffae - unlisten all serial devices
- b1055 ldx #$0f
- jsr rom_chkin ; ---- $ffc6 - open channel for input
- jsr rom_getin ; ---- $ffe4 - get a byte from channel - lesefehler ermitteln
- pha
- jsr rom_clrchn ; ---- $ffcc - restore default devices
- pla
- cmp #$0d
- beq b1055
- cmp #$32 ; ---- liegt lesefehler 23 vor?
- bne b1071 ; ---- wenn nicht, kopie erkannt
- lda #$30
- sta a1098
- bne b1079
- b1071 lda #$37 ; ---- und ab in den absturz
- sta a1098
- jmp e0150
- b1079 lda #$02
- jsr rom_close ; ---- $ffc3 - close a logical file
- lda #$0f
- jsr rom_close ; ---- $ffc3 - close a logical file
- jmp j1099 ; ---- weiter zum schnelllader
- x1086 !pet "i0:"
- x1089 !pet "#"
- f108a !pet "u1:2,0,22,10"
- !by $00
- a1097 !by $00
- a1098 !by $00
-
Hier die Abfrage des Lesefehler 23 im einzelen.
Könnte man dann z. B. allgemein & speziell wie folgt mit 1 Byte-Veränderung aushebeln.
-
Ach ... das ist ja einfach. Denkt ihr! Das ist nur das Allereinfachste im C84-Bereich. Bitte keine falsche Illusionen machen ... das wird hier alles noch viel schwieriger werden bis hin zu extrem schwierig.
-
Bei den relativ einfachen Sektorvarianten muss man übrigens im Code sehr gut hinschauen (wenn nicht EOR-ed, sprich mit einem Byte codemäßig verschlüsselt).
Oft muss man ggf. C9 32 C9 33 oder D0 und/oder F0 oder Bytefolgen wie 32 33 oder sogar C9 05 ändern. Da geht es dann schon los mit der Funktionsweise ...
.
-
Technisches & Allgemeines zum Verständnis:
Wie macht man z. B. aus einem .g64 mit Ocean Protection T22S10 denn nun ein .d64 das funktioniert?
nibconv filename.g64 filename.d64
.d64 (172 KB) umbenennen nach .bin
Alles weglöschen mit einem Hex-Editor ab Adresse 2AB00 (Error Map löschen) -> abspeichern als .bin (171 KB)
.bin umbenennen nach .d64
Byte-Patch entweder im .bin direkt vornehmen oder mit einem Disk-Editor (Disk Demon) im .d64 (171 KB ).
-
Genau!
-
Ich hoffe sehr, dass wir uns hier eine neue Cracker-Generation heranziehen, wenn die Alten mal weg sein werden!
Stichwort: Wissenstransfer
P.S.: Nur darum geht es hier ...
-
Das beste Buch zu dem Thema war doch das ANTI CRACKER BUCH
-
Ja, das konnte man nutzen, um einen Kopierschutz zu coden oder zu cracken.
Die meisten werden das Buch für zweites genutzt haben. Vielleicht ist das von Data Becker auch so gewollt.
Hier die Fat Track Abfrage mit Patchmöglichkeit.
Code- ; - c64 teiel - der patch zum umgehen des kopierschuts: xxxx - cmp #$ff --> cmp $10
- ; - 1541 teil - der patch zum umgehen des kopierschuts: yyyy - bne b0457 --> nop nop
- ; --------------------------------------------
- ; ---- der c64 teil der fat track abfrage ----
- ; --------------------------------------------
- lda #$0f
- tay
- ldx #$08
- jsr rom_setlfs ; ---- $ffba - set file parameters
- lda #$00
- jsr rom_setnam ; ---- $ffbd - set file name
- jsr rom_open ; ---- $ffc0 - open log.file after setlfs,setnam
- lda #$02
- tay
- ldx #$08
- jsr rom_setlfs ; ---- $ffba - set file parameters
- ldx #<x6ee3
- ldy #>x6ee3
- lda #$02
- jsr rom_setnam ; ---- $ffbd - set file name
- jsr rom_open ; ---- $ffc0 - open log.file after setlfs,setnam
- ldx #$0f
- jsr rom_chkout ; ---- $ffc9 - open channel for output
- ldx #$00
- b6e95 lda f6ee5,x
- jsr rom_chrout ; ---- $ffd2 - output character
- inx
- cpx #$0c
- bne b6e95
- jsr rom_clrchn ; ---- $ffcc - restore default devices
- ldx #$0f
- jsr rom_chkout ; ---- $ffc9 - open channel for output
- ldx #$00
- b6eaa lda f6ef1,x
- jsr rom_chrout ; ---- $ffd2 - output character - floppybefehl übertragen
- inx
- cpx #$05
- bne b6eaa
- jsr rom_clrchn ; ---- $ffcc - restore default devices
- ldx #$0f
- jsr rom_chkin ; ---- $ffc6 - open channel for input
- jsr rom_chrin ; ---- $ffcf - input character - wert für (nicht)bestanden aus floppypuffer $01ff laden
- sta a10 ; ---- und ab adresse $10 ablegen
- jsr rom_clrchn ; ---- $ffcc - restore default devices
- lda a10 ; ---- wert in adresse $10 in akku laden
- xxxx cmp #$ff ; ---- und mit kopierschutzabfrage bestanden vergleichen
- beq b6ed8 ; ---- wenn richtig, dann weiter im programm
- ldy #$00 ; ---- ansonsten geht es in den untergang
- lda #$00
- b6ecf sta f64e1,y
- dey
- bne b6ecf
- j6ed5 jmp j6ed5
- b6ed8 lda #$0f
- jsr rom_close ; ---- $ffc3 - close a logical file
- lda #$02
- jsr rom_close ; ---- $ffc3 - close a logical file
- rts
- x6ee3 !pet "#1"
- f6ee5 !pet "b-e 2 0 17 7" ; ---- floppycode ausführen
- f6ef1 !pet "m-r",$ff,$01 ; ---- floppy puffer $01ff auslesen
- ; -----------------------------------------------
- ; ---- der floppy teil der fat track abfrage ----
- ; -----------------------------------------------
- f0400 sei
- ldy #$ff ; ---- decrypter für abfragecode
- b0403 iny ; ---- decrypter
- lda f0412,y ; ---- decrypter
- eor a04ae ; ---- decrypter
- sta f0412,y ; ---- decrypter
- cpy a04b0 ; ---- decrypter
- bne b0403 ; ---- decrypter
- f0412 jsr s046f
- ldx #$00
- stx a0009 ; ---- sector for buffer 1
- ldx #$02
- stx a0008 ; ---- track for buffer 1
- lda #$23 ; ---- beginn der abfrage ab track 35
- sta a0006 ; ---- track for buffer 0
- b0424 ldy #$10 ; ---- beginn der abfrage ab sektor 16
- sty a0007 ; ---- sector for buffer 0
- b0429 lda #$80 ; ---- command code für sektor lesen
- sta a0000 ; ---- command code for buffer 0
- jsr s047f
- cmp #$01
- beq b0438
- sta a0009
- b0438 dec a0007
- bpl b0429
- jsr s048e
- dec a0008 ; ---- track and sector for buffer 1
- bpl b0424
- ldy #$02
- b0447 jsr s0487
- dey
- bpl b0447
- lda a0009
- yyyy bne b0457
- lda #$ff ; ---- wert für abfrage bestanden in adresse $01ff schreiben
- sta a01ff
- b0457 lda #$12 ; ---- weiter im code
- sta a0006 ; ---- track and sector for buffer 0
- lda #$00
- sta a0007
- lda #$b0 ; ---- command code für sektor suchen
- sta a0000 ; ---- command code for buffer 0
- jsr s047f
- jsr s046f
- jmp j04b2
- s046f lda a1c0c
- ora #$0e
- bne b047b
- lda a1c0c
- and #$fd
- b047b sta a1c0c
- rts
- s047f cli
- b0480 lda a0000 ; ---- command code for buffer 0
- bmi b0480 ; ---- warten bis job erledigt ist
- sei
- rts
- s0487 ldx a1c00 ; ---- pb, control port b
- dex
- jmp j0492
- s048e ldx a1c00 ; ---- pb, control port b
- inx
- j0492 txa
- and #$03
- sta a0044 ; ---- temp. work area; scratch pad
- lda a1c00 ; ---- pb, control port b
- and #$fc
- ora a0044 ; ---- temp. work area; scratch pad
- sta a1c00 ; ---- pb, control port b
- lda #$d0
- sta a1805 ; ---- timer
- b04a8 bit a1805 ; ---- timer
- bmi b04a8
- rts
- a04ae !by $ba
-
Die meisten werden das Buch für zweites genutzt haben.
Hatte es mir damals tatsächlich gekauft, um einen Kopierschutz zu bauen. Hab dann schnell gelernt, dass es keinen unüberwindbaren Kopierschutz gibt, sondern allenfalls eine Kopiererschwernis. In dem Buch steht viel über die Floppy 1541, und so konnte ich es auch gut zur Entwicklung meines Speeders gebrauchen.
Vielleicht ist das von Data Becker auch so gewollt.
Im Vorwort auf Seite 7 stehen zumindest ausdrückliche Warnungen, die Informationen des Buches nicht zum Cracken zu missbrauchen.
-
Naja, man kann das Cracken so aufwendig gestallten, dass den Crackern die lust vergeht. Zum Beispiel diverse Trigger im Spiel einbauen, Prüfroutinen, die sich gegenseitig auf Veränderung testen.
Den Kopierschutzcode mit einem Compilat, zum Beispiel Basic Boss, realisieren. Alles recht einfache Sachen, nur die Hersteller von Computerspielen machten es sich sehr einfach, indem immer den gleiche
Schutz genutzt wurde, wie z.B. Electronic Arts - Pirateslayer.
-
Alles recht einfache Sachen, nur die Hersteller von Computerspielen machten es sich sehr einfach, indem immer den gleiche
Schutz genutzt wurde, wie z.B. Electronic Arts - Pirateslayer.
Also eine Schliessanlage für alle Gebäude mit dem immer gleichen Schlüssel ... LOL.
Interessanter Thread hier auch für N00bs übrigens... wie mich
-
Alles recht einfache Sachen, nur die Hersteller von Computerspielen machten es sich sehr einfach, indem immer den gleiche
Schutz genutzt wurde, wie z.B. Electronic Arts - Pirateslayer.
Also eine Schliessanlage für alle Gebäude mit dem immer gleichen Schlüssel ... LOL.
Interessanter Thread hier auch für N00bs übrigens... wie mich
Ja, das war tatsächlich so. Ocean hatte fast immer den Read Error #23 auf Track #22 Sektor #10. Eine Kopie kann mittels Errormaker lauffähig gemacht werden.
Hewson hatte fast immer den GMA-Kopierschutz, der sehr einfach zu cracken war. Activision nutzte lange Zeit den "XEMAG - Fat Track" Kopierschutz. Dafür gab es auch mehrere Fat Track Maker,
die mehr oder weniger gut funktionierten.
-
Ich hoffe sehr, dass wir uns hier eine neue Cracker-Generation heranziehen, wenn die Alten mal weg sein werden!
Stichwort: Wissenstransfer
P.S.: Nur darum geht es hier ...Ich bin der Letzte, der etwas gegen Wissenstransfer hat! Deshalb: Interessantes Thema!
Aber: Neue C64-Cracker sind heutzutage so arbeitslos wie z.B. Pferdekutschenpferdetränkenwasserauswechsler.