480 lines
16 KiB
Plaintext
480 lines
16 KiB
Plaintext
![]() |
***************************************
|
|||
|
* *
|
|||
|
* *
|
|||
|
* KRAKOWICZ'S KRACKING KORNER *
|
|||
|
* *
|
|||
|
* SSI'S RDOS *
|
|||
|
* *
|
|||
|
* *
|
|||
|
***************************************
|
|||
|
|
|||
|
|
|||
|
IT'S REALLY NOT FAIR WHEN ONE
|
|||
|
PUBLISHER HAS A SYSTEM THAT KEEPS THEIR
|
|||
|
SOFTWARE FROM BEING CONVENIENTLY BACKED
|
|||
|
UP, ESPECIALLY WHEN SO MANY OF THE
|
|||
|
OTHER "PROTECTION" SCHEMES HAVE FALLEN
|
|||
|
TO THE GROWING CORPS OF TALENTED
|
|||
|
KRACKISTS. WITH THAT IN MIND, AND
|
|||
|
BECAUSE WE ALL LOVE A CHALLENGE, WE
|
|||
|
WILL TAKE A LONG LOOK AT THE APPROACH
|
|||
|
USED BY STRATEGIC SIMULATIONS, INC.
|
|||
|
(SSI) IN PROVIDING COPY PROTECTION FOR
|
|||
|
THEIR SERIES OF WAR SIMULATIONS AND
|
|||
|
"RAPID-FIRE" SERIES, AS WELL AS SOME
|
|||
|
RECENT GAMES WHICH HAVE A LITTLE
|
|||
|
REDEEMING SOCIAL MERIT: EPIDEMIC,
|
|||
|
RINGSIDE SEAT, AND GALACTIC ADVENTURES.
|
|||
|
|
|||
|
AS WE'VE DISCUSSED IN THE BASICS
|
|||
|
OF KRACKING SERIES, YOU CAN EITHER
|
|||
|
PROTECT A PROGRAM BY VARIOUS MEANS, OR
|
|||
|
YOU CAN PROTECT A DISK FULL OF PROGRAMS
|
|||
|
WITH SOME SORT OF DOS MODIFICATION.
|
|||
|
DOS MODIFICATIONS ARE USUALLY NOT TOO
|
|||
|
SUCCESSFUL, SINCE SOME ENTERPRISING
|
|||
|
PERSON OUT IN PIRATELAND WILL SOONER OR
|
|||
|
LATER FIGURE A WAY TO COPY ALL THE
|
|||
|
FILES ONTO A NORMAL DOS DISK, MAKING
|
|||
|
ALL THE DISK PROTECTION WORTHLESS.
|
|||
|
SSI'S ANSWER TO THIS PROBLEM WAS NOT
|
|||
|
ONLY TO WRITE AN EXTENSIVELY REVISED
|
|||
|
DOS, BUT TO COUPLE IT WITH
|
|||
|
"ENHANCEMENTS" TO APPLESOFT USING THE
|
|||
|
AMPERSAND VECTOR (MORE ON THIS LATER).
|
|||
|
THIS WAY, EVEN IF YOU COULD STRIP THE
|
|||
|
FILES OFF THE DISK, YOU WOULD NEED TO
|
|||
|
WRITE A DOS WHICH WAS:
|
|||
|
A. DOS 3.3 COMPATIBLE,
|
|||
|
B. AS SHORT AS RDOS ($B100-$BFFF),
|
|||
|
SINCE THE PROGRAMS FREQUENTLY USE
|
|||
|
ALL OF THE FREE SPACE, AND
|
|||
|
C. CAPABLE OF CORRECTLY INTERPRETING
|
|||
|
THE AMPERSAND COMMANDS WHICH ARE
|
|||
|
LIBERALLY SPRINKLED THROUGH
|
|||
|
ALL THE APPLESOFT PROGRAMS.
|
|||
|
THE AMOUNT OF EFFORT REQUIRED TO DO
|
|||
|
THIS HAS KEPT KRACKISTS AT BAY, AT
|
|||
|
LEAST UNTIL NOW.
|
|||
|
|
|||
|
FIRST, HOW TO APPROACH THIS TYPE
|
|||
|
OF KRACKING JOB? THE SEVENTH LAW OF
|
|||
|
KRACKING SAYS: "WHEN YOU'RE TOTALLY
|
|||
|
LOST, BOOT-TRACE" (I KNOW, I KNOW -- I
|
|||
|
PROMISE THAT I'LL WRITE A COMPLETE
|
|||
|
COLUMN ON BOOT-TRACING SOON. IF YOU
|
|||
|
JUST CAN'T WAIT, TRY TO GET HOLD OF THE
|
|||
|
HARDCORE MAGAZINE UPDATE 3.1, PAGES
|
|||
|
6-15. IT HAS A LUCID, WELL-EXAMPLED
|
|||
|
DISCUSSION OF THE BOOT-TRACING
|
|||
|
PROCESS). WHEN YOU LOAD T0, S0 INTO
|
|||
|
$800, YOU WILL IMMEDIATELY SEE THE
|
|||
|
FAMILIAR "BRODY LOADY" (NAMED AFTER
|
|||
|
THAT FUN-LOVING BUNCH OF SCANDAHOOVIANS
|
|||
|
AT BR0DERBUND) WHICH MOVES THE ENTIRE
|
|||
|
PAGE DOWN TO PAGE 2 AND JUMPS TO $20F
|
|||
|
TO COMPLETE THE BOOT. THIS IS A FAIRLY
|
|||
|
TRICKY BOOT WHICH HAS BEEN USED FOR
|
|||
|
ALL TYPES OF PROTECTION SCHEMES, BUT IF
|
|||
|
YOU PUZZLE OVER IT LONG ENOUGH, YOU'LL
|
|||
|
SEE THAT THE JMP ($003E) AT LOCATION
|
|||
|
343 DOUBLES AS A JUMP TO THE SECTOR
|
|||
|
READ ROUTINE, THEN AS A JUMP TO THE
|
|||
|
PROGRAM START WHEN ALL THE SECTORS ARE
|
|||
|
READ IN. THE PROGRAM START IN THIS CASE
|
|||
|
IS $B300, WHICH IS A JMP $B974 THAT
|
|||
|
DROPS YOU INTO A DISCOURAGINGLY COMPLEX
|
|||
|
SERIES OF JSR'S AND JMP'S.
|
|||
|
|
|||
|
AT THIS POINT, DISCRETION IS THE
|
|||
|
BETTER PART OF VALOR (REMEMBER THE
|
|||
|
SECOND LAW: THERE'S ALWAYS ANOTHER
|
|||
|
WAY). WHAT THE BOOT-TRACE HAS TOLD US
|
|||
|
IS THAT THE DOS CODE LIVES FROM $B300
|
|||
|
TO $BFFF, AND IS NOT STRAIGHTFORWARD,
|
|||
|
"LINEAR" CODE. YOU MAY RECALL THAT WE
|
|||
|
DESCRIBED HOW TO LIST AN RDOS APPLESOFT
|
|||
|
FILE IN BASICS 103: RESET, D6:00, C081,
|
|||
|
CTRL-C, "LIST". YOU WILL BE IMMEDIATELY
|
|||
|
STRUCK BY A WHOLE NEW LIST OF COMMANDS
|
|||
|
THAT MOTHER APPLE NEVER TOLD YOU ABOUT.
|
|||
|
THESE ARE AMPERSAND (&) COMMANDS WHICH
|
|||
|
HAVE BEEN ADDED TO IMPLEMENT THE RDOS
|
|||
|
COMMANDS, AND THEY WORK AS FOLLOWS:
|
|||
|
WHENEVER THE "&" IS ENCOUNTERED,
|
|||
|
APPLESOFT JUMPS TO LOCATION $3F5.
|
|||
|
LOOKING AT THAT LOCATION WILL TELL YOU
|
|||
|
WHERE THE AMPERSAND EVALUATION ROUTINE
|
|||
|
IS LOCATED; IN THIS CASE, IT CONTAINS
|
|||
|
4C 03 B3 OR JMP $B303. EXAMINATION OF
|
|||
|
THE CODE THERE REVEALS THAT THE
|
|||
|
ACCUMULATOR IS COMPARED TO A TABLE OF
|
|||
|
NUMBERS IN $B320-$B330, AND THE ADDRESS
|
|||
|
OF THE ROUTINE TO BE EXECUTED IS PICKED
|
|||
|
UP FROM A TABLE IN $B331-$B352. YOU CAN
|
|||
|
EASILY SEE ALL THIS CODE BY RESETTING
|
|||
|
ANY OF THE RDOS SSI GAMES, AND IF
|
|||
|
YOU'RE REALLY INTERESTED, YOU CAN
|
|||
|
CONTACT YOUR LOCAL PIRATE FOR A COPY OF
|
|||
|
THE SOURCE CODE LISTINGS, IN BIG MAC
|
|||
|
FORMAT, FOR BOTH THE ORIGINAL AND DOS
|
|||
|
3.3 COMPATIBLE VERSIONS OF RDOS. THE
|
|||
|
DISK ALSO CONTAINS OBJECT CODE FOR RDOS
|
|||
|
3.3 AND LISTINGS OF THE OTHER PROGRAMS
|
|||
|
USED FOR SECONDARY PROTECTION AND
|
|||
|
INITIALIZING. IF THERE'S ENOUGH
|
|||
|
INTEREST, THE SYSOP MIGHT BE PERSUADED
|
|||
|
TO INCLUDE THEM ON HIS APPLE TREK
|
|||
|
KRACKING DISK #2.
|
|||
|
|
|||
|
NOW WE'RE STARTING TO MAKE
|
|||
|
PROGRESS. EACH TIME THE & COMMAND IS
|
|||
|
ENCOUNTERED, APPLESOFT OBLIGINGLY JUMPS
|
|||
|
UP TO $B303 WITH THE HEX VALUE OF THE
|
|||
|
NEXT BASIC TOKEN IN THE ACCUMULATOR,
|
|||
|
AND THEN DECIDES WHAT TO DO NEXT. THE
|
|||
|
TOKENS, WITH THEIR VALUE, SUBROUTINE
|
|||
|
ADDRESS START, AND FUNCTION ARE SHOWN
|
|||
|
BELOW:
|
|||
|
|
|||
|
& --- HEX DEC ADDR FUNCTION IN RDOS
|
|||
|
----- --- --- ---- ----------------
|
|||
|
C 43 67 B353 CATALOG (&C AT)
|
|||
|
LOAD B6 182 B371 LOAD APLSFT FILE
|
|||
|
RUN AC 172 B446 RUN APLSFT FILE
|
|||
|
GOTO AB 171 B44C EXEC (?)
|
|||
|
SAVE B7 183 B48D SAVE APLSFT FILE
|
|||
|
STORE A8 168 B511 BSAVE (WITH A,L)
|
|||
|
RECALL A7 167 B52B BLOAD, A OPTIONAL
|
|||
|
DEF B8 184 B544 ?
|
|||
|
PRINT BA 186 B56C WRITE TO TEXTFILE
|
|||
|
READ 87 135 B582 READ TEXT FILE
|
|||
|
END 80 128 B5A9 CLOSE A FILE
|
|||
|
DEL 85 133 B5AE DELETE A FILE
|
|||
|
LEN E3 227 B5CD ?
|
|||
|
D 44 68 B620 DRIVE?
|
|||
|
S 53 83 B62E SLOT?
|
|||
|
NEW BF 191 B64F ?
|
|||
|
USR D5 213 B670 CHG RTN FROM &
|
|||
|
|
|||
|
AS YOU CAN SEE, NOT ALL HAVE BEEN
|
|||
|
CHASED DOWN. INTERESTED PARTIES ARE
|
|||
|
INVITED TO INVESTIGATE AND SHARE THE
|
|||
|
RESULTS WITH US ALL.
|
|||
|
|
|||
|
BUT THIS, TOO HAS ONLY A LIMITED
|
|||
|
VALUE, SINCE WE RUN OUT OF INFORMATIVE
|
|||
|
TOKENS AT ABOUT $B679 IN A LISTING THAT
|
|||
|
CONTINUES UP TO $BFFF. THE ONLY WAY TO
|
|||
|
GET THERE IS TO CALL UP THE INFANTRY
|
|||
|
AND SLOG OUR WAY THROUGH THE CODE,
|
|||
|
BRUTE FORCE. SINCE IT'S A DOS, THERE
|
|||
|
MUST BE READ AND WRITE CODE OF SOME
|
|||
|
SORT, SO LOOKING AROUND FOR DISK
|
|||
|
ACCESSES ($C08C,X) IS A GOOD PLACE TO
|
|||
|
START. THE FIRST ENCOUNTER IS AT $BB6B,
|
|||
|
WHICH IS CLEARLY A "WRITE" SECTION--
|
|||
|
$C08F,X = OUTPUT; $C08E,X = SENSE WRITE
|
|||
|
PROTECT. IT'S FOLLOWED BY A READ SECTOR
|
|||
|
ROUTINE AT $BBFD-BC64, AND READ ADDRESS
|
|||
|
ROUTINE AT $BC65-BCC0. ON CLOSE
|
|||
|
EXAMINATION, IT CAN BE SEEN THAT THE
|
|||
|
ROUTINES HAVE BEEN LIFTED ALMOST
|
|||
|
VERBATIM FROM DOS 3.2, WITH THE ADDRESS
|
|||
|
MARKER CHANGED TO D4 AA B7 (IN MOST
|
|||
|
CASES). AHA! MAYBE WE CAN SNEAK IN THE
|
|||
|
APPROPRIATE ROUTINES FROM DOS 3.3 AND
|
|||
|
MAKE IT DO D5 AA 96'S? TO MAKE A
|
|||
|
LENGTHY STORY SHORT, THE ANSWER IS YES,
|
|||
|
BUT. DOS 3.2 USES, AS YOU PROBABLY
|
|||
|
KNOW, "6+2" NIBBLIZING IN STORING DATA
|
|||
|
ON THE DISK, WHILE 3.3 USES "5+3". THE
|
|||
|
END RESULT IS THAT THE PRE- AND
|
|||
|
POST-NIBBLIZING ROUTINES MUST BE
|
|||
|
TRANSPLANTED FROM DOS 3.3, AS WELL AS
|
|||
|
BOTH READ AND WRITE BYTE TRANSLATE
|
|||
|
TABLES. THE ADDRESS MARKERS AND THE
|
|||
|
SIZE OF THE NIBBLE BUFFERS MUST ALSO BE
|
|||
|
ADJUSTED. WHEN THIS IS DONE (WITH MUCH
|
|||
|
WAILING AND GNASHING OF TEETH), THE END
|
|||
|
RESULT IS A FUNCTIONAL, DOS 3.3
|
|||
|
COMPATIBLE RDOS: RDOS 3.3.
|
|||
|
|
|||
|
(AS A BRIEF ASIDE, THE ESSENTIAL
|
|||
|
TOOLS IN THIS TASK ARE (OF COURSE),
|
|||
|
BENEATH APPLE DOS, AND THE DOSSOURCE
|
|||
|
COMMENTED LISTING OF ALL THE DOS CODE).
|
|||
|
|
|||
|
NOW, WE KNOW FROM PREVIOUS GAMES
|
|||
|
LIKE CRISIS MOUNTAIN AND MING'S
|
|||
|
CHALLENGE THAT WE CAN READ THE SECTORS
|
|||
|
INTO MEMORY FROM A DISK WITH MODIFIED
|
|||
|
RWTS ROUTINES BY USING ITS OWN RWTS AND
|
|||
|
THE INSPECTOR, THEN SWAPPING RWTS
|
|||
|
ROUTINES TO STANDARD DOS 3.3 AND
|
|||
|
WRITING THEM OUT AGAIN ON A FORMATTED
|
|||
|
DISK. THE PROSPECT OF DOING ALL THE SSI
|
|||
|
GAMES BY HAND BOGGLES THE MIND,
|
|||
|
HOWEVER, AND REQUIRES AN AUTOMATED
|
|||
|
APPROACH (THEY WERE SUPPOSED TO WORK
|
|||
|
FOR ->US<-, REMEMBER?). THE ANSWER TO
|
|||
|
THIS PROBLEM WAS THE PROGRAM NOW KNOWN
|
|||
|
AS COPYB - A HIGHLY MODIFIED VERSION OF
|
|||
|
COPYA WHICH DOES THE RWTS SWAP FOR YOU,
|
|||
|
AND EVEN INITIALIZES DISKS AS A BONUS.
|
|||
|
THE VERSION OF COPYB IN GENERAL
|
|||
|
CIRCULATION INCLUDES RWTS ROUTINES
|
|||
|
WHICH HAVE BEEN MODIFIED FOR READING
|
|||
|
AND WRITING RDOS. REASONABLE DIRECTIONS
|
|||
|
ARE INCLUDED ON THE DISK, SO IT SHOULD
|
|||
|
BE POSSIBLE TO BACK UP YOUR OWN SSI
|
|||
|
DISKS, USING THE ADDITIONAL INFORMATION
|
|||
|
PROVIDED BELOW.
|
|||
|
|
|||
|
ARMED WITH RDOS 3.3 AND COPYB, IT
|
|||
|
IS NOW POSSIBLE TO BEGIN ATTACKING ONE
|
|||
|
OF THE SSI PROTECTED DISKS. SINCE RDOS
|
|||
|
IS BASED ON DOS 3.2, THE DISKS ARE ALL
|
|||
|
13-SECTOR FORMAT, AND SINCE THE DOS IS
|
|||
|
ALL ON TRACK ZERO, YOU WANT TO BEGIN
|
|||
|
THE TRACK COPYING PROCESS WITH TRACK
|
|||
|
ONE. TO REITERATE THE COPYB
|
|||
|
INSTRUCTIONS, RUN COPYB, THE TYPE
|
|||
|
CTRL-C OR RESET WHEN THE PROMPT FOR
|
|||
|
SOURCE DISK COMES UP. GET INTO THE
|
|||
|
MONITOR AND TYPE 22E:1 TO SET THE
|
|||
|
STARTING TRACK TO 1, THEN, IF THE
|
|||
|
ADDRESS MARKER BYTES WERE D4 AA B7,
|
|||
|
BLOAD THE FILE CALLED "RDOS READ RWTS"
|
|||
|
(IT GOES INTO $8000 AS THE DEFAULT
|
|||
|
LOCATION). NEXT, BLOAD "RDOS
|
|||
|
WRITE",A$7000, THEN MOVE IT TO THE
|
|||
|
NORMAL RWTS LOCATIONS WITH
|
|||
|
B700<7000.78FFM (THIS IS NECESSARY
|
|||
|
BECAUSE YOU'RE USING THE RWTS ROUTINES
|
|||
|
TO READ IN THE FILES; WRITING ON TOP OF
|
|||
|
OPERATING CODE CAN LEAD TO VERY
|
|||
|
UNPLEASANT RESULTS). RETURN TO BASIC,
|
|||
|
DELETE LINE FIVE, AND TYPE 'RUN'.
|
|||
|
ANSWER THE QUESTION "13 SECTOR", ENTER
|
|||
|
THE APPROPRIATE SLOTS AND DRIVES, AND
|
|||
|
YOU'RE OFF AND RUNNING TO CREATE AN
|
|||
|
RDOS 3.3 COPY (WHEN YOU'RE FINISHED,
|
|||
|
YOU'LL HAVE A 16-SECTOR DISKETTE WITH
|
|||
|
ONLY 13 SECTORS OCCUPIED PER TRACK, BUT
|
|||
|
YOU WON'T NOTICE IT IN USE).
|
|||
|
|
|||
|
SOME OF THE SSI GAMES USE THE
|
|||
|
NORMAL DOS 3.2 ADDRESS MARKER BYTES OF
|
|||
|
D5 AA B5. THESE SHOULD BE READ IN USING
|
|||
|
THE "DOS 3.2 RWTS" FILE, BUT YOU STILL
|
|||
|
NEED TO USE THE "RDOS WRITE" RWTS FOR
|
|||
|
THE WRITING ROUTINE.
|
|||
|
|
|||
|
RDOS USES TRACK 1 FOR THE CATALOG,
|
|||
|
AND IDENTIFIES FILES VIA A 24-CHARACTER
|
|||
|
ALPHANUMERIC NAME, A LENGTH IN "BLOCKS"
|
|||
|
AS IN PASCAL, AND THE LOCATION OF THE
|
|||
|
STARTING BLOCK ON THE DISK:
|
|||
|
|
|||
|
TRACK 01 SECTOR 0 SLOT 6 DRIVE 1
|
|||
|
BUFFER 0800 DOS 16 2BCC
|
|||
|
=======================================
|
|||
|
|
|||
|
0 1 2 3 4 5 6 7 8 9 A B C D E F
|
|||
|
---------------------------------------
|
|||
|
00- R D O S 2 . 1 C O P Y R I G
|
|||
|
10- H T 1 9 8 1 B 1A0010 001A0000
|
|||
|
20- S Y S T E M B O O T
|
|||
|
30- T 0100B1 00011A00
|
|||
|
40- R E G 1
|
|||
|
/ B 0A6009 DC091B00
|
|||
|
/ / \ / \ /\ /
|
|||
|
/ FILE TYPE \/ \/ \/
|
|||
|
PROGRAM A,T,B / / FIRST
|
|||
|
NAME / / BLOCK
|
|||
|
/ NUMBER
|
|||
|
STARTING OF
|
|||
|
LOCATION BLOCKS
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
THE STARTING BLOCK IS EQUAL TO THE
|
|||
|
TRACK NUMBER MULTIPLIED BY 13 PLUS THE
|
|||
|
SECTOR NUMBER (1A00 IS REALLY 001A,
|
|||
|
WHICH IS DECIMAL 26, OR TRACK 2, SECTOR
|
|||
|
0). IF YOU LOOK THROUGH THE CATALOG
|
|||
|
TRACK WITH THE INSPECTOR, YOU FIND THE
|
|||
|
BEGINNING OF THE CATALOG AS EXPECTED IN
|
|||
|
T1,S0. LOOKING FOR THE CONTINUATION IN
|
|||
|
T1,S1, HOWEVER, BRINGS YOU TO THE NEXT
|
|||
|
SURPRISE HELD BY RDOS: THERE IS NO
|
|||
|
SECTOR INTERLEAVING IN SOFTWARE; IT IS
|
|||
|
ALL DONE BY THE SECTOR NUMBER
|
|||
|
SEQUENCING DURING SSI'S INITIALIZE
|
|||
|
ROUTINE. THE IMPORTANCE OF SECTOR
|
|||
|
INTERLEAVING IS DISCUSSED IN "BAG OF
|
|||
|
TRICKS", AND IN A SOFTALK ARTICLE ABOUT
|
|||
|
A YEAR AGO BY WORTH AND LECHNER. (DOS
|
|||
|
USES A LOOKUP TABLE AT $BFA8 TO CHANGE
|
|||
|
THE SECTOR NUMBER READ FROM THE VALUE
|
|||
|
READ OFF THE DISK ("PHYSICAL SECTOR")
|
|||
|
TO THE NUMBER IT THINKS IT SHOULD BE
|
|||
|
("LOGICAL SECTOR"). SSI USES AN
|
|||
|
"ASCENDING 7" INTERLEAVE SCHEME, WHICH
|
|||
|
MEANS THAT THE SEQUENCE OF SECTORS ON
|
|||
|
THE DISK, AS READ BY DOS 3.3 WITH ITS
|
|||
|
INTERLEAVE TABLE, IS:
|
|||
|
|
|||
|
0,7,E,6,D,5,C,4,B,3,A,2,9,1,8,F.
|
|||
|
|
|||
|
THE SECOND CATALOG SECTOR, THEN,
|
|||
|
APPEARS TO BE SECTOR 7. IF YOU INTEND
|
|||
|
TO DO ANY AMOUNT OF PLAYING AROUND WITH
|
|||
|
ONE OF THESE DISKS, USE THE "RDOS
|
|||
|
WRITE" RWTS FROM THE COPYB DISK, OR
|
|||
|
CHANGE BYTES $BE2A-BE2D TO $EA'S WITH
|
|||
|
THE INSPECTOR. THIS OMITS THE TABLE
|
|||
|
LOOKUP AND MAKES THE SECTOR NUMBERS
|
|||
|
FOLLOW THE SEQUENCE AS USED BY RDOS.
|
|||
|
|
|||
|
NEXT, COPY THE FILE CALLED RDOS
|
|||
|
3.3 FROM THE COPYB DISK (OR TRACK 0 OF
|
|||
|
ANY OF THE RECENTLY UNPROTECTED SSI
|
|||
|
SERIES) ONTO TRACK ZERO, SECTORS 0-D.
|
|||
|
YOU WOULD EXPECT TO HAVE A WORKING COPY
|
|||
|
OF THE GAME AT THIS POINT, BUT THERE
|
|||
|
ARE STILL A COUPLE OF SURPRISES IN
|
|||
|
STORE FOR YOU (I SAID IT WAS A
|
|||
|
CHALLENGE!). THERE ARE SEVERAL
|
|||
|
DIFFERENT SECONDARY PROTECTION SCHEMES
|
|||
|
USED TO DEFEAT VARIOUS COPIERS, USUALLY
|
|||
|
GOING UNDER THE INNOCUOUS NAME OF
|
|||
|
"QWERTY". THE MOST COMMON OF THESE
|
|||
|
READS IN AN ADDRESS FIELD FROM TRACK 0,
|
|||
|
DELAYS A BIT, AND LOOKS FOR AN $EE AS
|
|||
|
THE NEXT BYTE ON THE TRACK. IF IT FINDS
|
|||
|
IT, A 0 IS STORED IN LOCATION 0,
|
|||
|
OTHERWISE THE DISK SPINS FOREVER. BY
|
|||
|
CHANGING BYTES $28-29 TO A9 00, THIS
|
|||
|
ANNOYANCE IS REMOVED. A SIMILAR
|
|||
|
ROUTINE, SEEN ONLY ONCE OR TWICE, IS
|
|||
|
CALLED @WERTY, LOOKS FOR AN $AA
|
|||
|
FOLLOWING THE ADDRESS FIELD ON ANY
|
|||
|
TRACK, AND REBOOTS IF IT'S NOT FOUND.
|
|||
|
THE REMEDY HERE IS TO PUT A9 00 IN
|
|||
|
BYTES $20-21.
|
|||
|
|
|||
|
RECENTLY, A MUCH MORE
|
|||
|
SOPHISTICATED TECHNIQUE HAS BEEN USED
|
|||
|
(GALACTIC GLADIATORS, ROAD TO
|
|||
|
GETTYSBURG), WHICH DOES THE SSI
|
|||
|
EQUIVALENT OF "QUARTER-TRACKING" OR
|
|||
|
"SPIRALLING". THIS VERSION OF QWERTY
|
|||
|
READS IN FOUR PAGES OF SEQUENCIAL BYTES
|
|||
|
FROM EACH OF THE FOUR ADJACENT
|
|||
|
HALF-TRACKS FROM 20.5 TO 22.0, STORING
|
|||
|
THEM AT $1000-1FFF. THE THREE BYTES
|
|||
|
FOLLOWING THE FOUR PAGES WORTH ARE USED
|
|||
|
AS THE ADDRESS MARKER FOR THE DATA ON
|
|||
|
THE NEXT HALF-TRACK (AS WITH ALL THESE
|
|||
|
PROTECTION TECHNIQUES, THE "SECTORS"
|
|||
|
ARE SKEWED SO THAT THERE IS NEVER VALID
|
|||
|
DATA OVERLAPPING ON ADJACENT
|
|||
|
HALF-TRACKS). THIS APPROACH EFFECTIVELY
|
|||
|
DEFEATS COPIERS LIKE NA II AND
|
|||
|
LOCKSMITH, WHICH WRITE AN ENTIRE TRACK
|
|||
|
AND OBLITERATE DATA ON ANY ADJACENT
|
|||
|
HALF-TRACK. AFTER READING IN THE DATA,
|
|||
|
THE MEMORY VALUES ARE EXCLUSIVE-ORED
|
|||
|
WITH THE ADDRESS (1000 CONTAINS 00,
|
|||
|
1001 CONTAINS 01, ETC.), AND IF AN
|
|||
|
ERROR IS FOUND, IT REBOOTS THE DISK.
|
|||
|
PLACING AN RTS ($60) AT THE ENTRY POINT
|
|||
|
OF $A0F0 WILL AVOID THE ENTIRE ISSUE
|
|||
|
AND MAKE THE COPYA VERSION RUN.
|
|||
|
|
|||
|
THE FINAL (I HOPE) HURDLE TO USING
|
|||
|
RDOS 3.3 IS THE PROGRAM WHICH
|
|||
|
INITIALIZES A SAVE GAME DISKETTE IN
|
|||
|
AN RDOS-COMPATIBLE FORMAT. IT IS CALLED
|
|||
|
SSI.INIT AND LOADS INTO $800-AFF (IT IS
|
|||
|
USUALLY ACCESSED VIA A 'CALL 2800' FROM
|
|||
|
A BASIC PROGRAM). SINCE IT ONLY WRITES
|
|||
|
ADDRESS FIELDS, AND NOT DATA SECTORS
|
|||
|
(WITH NO VERIFY), IT IS A VERY FAST
|
|||
|
INIT. ALL THAT'S NECESSARY TO GENERATE
|
|||
|
A DISK COMPATIBLE WITH RDOS 3.3 IS TO
|
|||
|
REPLACE THE D4 AA B7 (OR D5 AA B5)
|
|||
|
ADDRESS MARKER BYTE WITH D5 AA 96:
|
|||
|
CHANGE BYTES $8F5 TO $D5 AND $8FF TO
|
|||
|
$96.
|
|||
|
|
|||
|
NOW FOR THE BAD NEWS: WHILE RDOS
|
|||
|
IS FAST, PRIMARILY BECAUSE ALL FILES
|
|||
|
ARE STORED IN SEQUENCIAL BLOCKS, RDOS
|
|||
|
3.3 IS SLOW BECAUSE OF THE SECTOR
|
|||
|
INTERLEAVE USED BY SSI (THE DISK MUST
|
|||
|
MAKE AN ALMOST AN ENTIRE REVOLUTION FOR
|
|||
|
EACH SECTOR THAT IS READ IN). IT IS
|
|||
|
FAIRLY EASY TO ADD AN INTERLEAVE LOOKUP
|
|||
|
TABLE TO RDOS 3.3 (IT'S CALLED RDOS
|
|||
|
3.3A ON THE DISK), BUT BAD THINGS
|
|||
|
HAPPENED DURING MY ATTEMPTS TO
|
|||
|
INCORPORATE IT INTO THE SSI.INIT
|
|||
|
PROGRAM. THE CODE FROM $851 TO $86B
|
|||
|
NEEDS MORE ALTERATION THAN I HAD
|
|||
|
PATIENCE FOR (THERE'S ROOM FOR A PATCH
|
|||
|
IN $9D7-9FF), AND WOULD BE WORTH THE
|
|||
|
EFFORT IF SOME AMBITIOUS KRACKIST OUT
|
|||
|
THERE COULD FIND THE TIME...
|
|||
|
|
|||
|
FINALLY, AS A TYPICAL EXAMPLE OF
|
|||
|
MURPHY'S LAW ("IF ANYTHING CAN GO
|
|||
|
WRONG, IT WILL, AND AT THE WORST
|
|||
|
POSSIBLE MOMENT), THAT AFTER DOING ALL
|
|||
|
THIS AND CONVERTING SOME 20 GAMES, THE
|
|||
|
VERY LAST ONE I TRIED WAS GERMANY 1985.
|
|||
|
THIS IS A FAIRLY RECENT PUBLICATION OF
|
|||
|
SSI WHICH IS COMPLETELY WRITTEN IN
|
|||
|
MACHINE LANGUAGE, DOES NOT USE RDOS AT
|
|||
|
ALL, AND WILL REQUIRE A TOTALLY
|
|||
|
DIFFERENT APPROACH TO UNPROTECTION. IN
|
|||
|
THE WORDS OF RICKY SKAGGS
|
|||
|
("HEARTBROKE", FROM HIS "HIGHWAYS AND
|
|||
|
HEARTACHES" ALBUM):
|
|||
|
|
|||
|
"PRIDE, WHEN YOU'RE RICH,
|
|||
|
IS A BORE WHEN YOU'RE LONELY,
|
|||
|
STILL MADNESS PREVAILS UPON
|
|||
|
REASON TO YIELD.
|
|||
|
|
|||
|
BUT ALL IS NOT LOST, IT IS ONLY
|
|||
|
MISTAKEN,
|
|||
|
IT'S A SMALL CONSOLATION, BUT I
|
|||
|
KNOW JUST HOW YOU FEEL.
|
|||
|
|
|||
|
|
|||
|
NOBODY SAID IT WAS GOING TO BE
|
|||
|
EASY,
|
|||
|
WE ALL HAVE OUR WEAK SIDES AND
|
|||
|
NEED SOME GOOD TOUCHIN'.
|
|||
|
|
|||
|
NOBODY SAID THAT IT WOULD NOT BE
|
|||
|
WORTH IT,
|
|||
|
THE HUMAN CONDITIONS -- CONTINUE
|
|||
|
AS SUCH."
|
|||
|
|
|||
|
|
|||
|
SEE YOU "SOON" WITH ANOTHER IN THE
|
|||
|
BASICS OF KRACKING SERIES--"WHERE DO I
|
|||
|
BEGIN..."
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
SORRY, NO MORE FOR THIS CALL!
|
|||
|
|
|||
|
===================
|
|||
|
|