1194 lines
50 KiB
Erlang
1194 lines
50 KiB
Erlang
EXAMINING PROTECTED APPLESOFT BASIC PROGRAMS.
|
||
BY THE DISK JOCKEY.
|
||
|
||
Many protected programs are written in APPLESOFT. Of course, most publishers
|
||
are sly enough to protect against break ing out of their program with CTRL C or
|
||
reset. Also, most protect against re-entering BASIC from the monitor by
|
||
changing the typical BASIC re-entry poi nt (at $3D0) so that it points to
|
||
disaster. And lastly, many change the R UN flag vector at $D6 so if you manage
|
||
to get out of their program and into BA SIC, anything you type will RUN their
|
||
BASIC program. I will describe how to b eat all these protection schemes,
|
||
assuming you have an old style F8 monit or ROM.
|
||
|
||
First, we must determine if the protect ed program is written in APPLESOFT.
|
||
If after you boot the progra m a BASIC prompt appears, this is a good indicator
|
||
that at least some of the program is written in BASIC. Further more, if the
|
||
program prints a l ot of text on the screen, or requires a good deal of user
|
||
inputs, it is a goo d guess that the program is written in BASIC. The reason
|
||
for this is that p rinting text on the screen and inputing data from the
|
||
keyboard is easi ly accomplished from BASIC using PRINT and INPUT statements.
|
||
To do this from ASSEMBLY language requires a great deal more work. Also, we
|
||
should relieze why a programmer uses ASSEMBLY language. The only real advantage
|
||
to AS SEMBLER is speed. If speed is not critical, most (non-sadist) programmers
|
||
will use BASIC.
|
||
|
||
With this in mind, look at how the prog ram runs and prints on the screen. If
|
||
it runs at about the same speed as t he BASIC programs you have written run, it
|
||
is a good guess that it is in B ASIC. Remember, ASSEMBLY language is
|
||
considerably faster than BASIC in every respect.
|
||
|
||
Finally, read the package the program c ame in. It usually says what it was
|
||
written it. If it doesn't, a dead give away is in the hardware requirements.
|
||
If the program requires APPLESOFT in RO M, then at least part of the program is
|
||
probably written in APPLESOFT.
|
||
|
||
Now that you have figured out your prot ected program is written in BASIC, it
|
||
is time to LIST their code. The firs t step is to reset into the monitor when
|
||
the program is running.
|
||
|
||
Now you can try to enter the immediate BASIC mode by typing:
|
||
|
||
|
||
*3D0G
|
||
|
||
|
||
This is the normal BASIC re-entry point . But if the protection is worth
|
||
anything, this will not work.
|
||
|
||
Assuming that didn't work, reload the p rogram and reset into the monitor
|
||
again. The next thing is to try typing 9D84G or 9DBFG. These are the DOS cold
|
||
and warm start routines, respectively. If you are lucky enough to get a BASIC
|
||
prompt, you have done well. Most of the time, you won't.
|
||
|
||
If in either case you succeed in gettin g a BASIC prompt, try LISTing the
|
||
program or CATALOGing the disk. If anyt hing you type starts the program
|
||
running again, the protection has chang ed the RUN flag at $D6. So reset into
|
||
the monitor again.
|
||
|
||
The RUN flag is a zero page location (a t $D6) which will run the BASIC
|
||
program in memory if $D6 contains $80 o r greater (128 or greater in decimal).
|
||
This is easy to defeat after you have r eset into the monitor by typing:
|
||
|
||
|
||
*D6:00
|
||
|
||
|
||
This resets the RUN flag to normal. Now if 3D0G, 9D84G or 9DBFG previously
|
||
rewarded you with a BASIC prompt, this will solve the problem of the program
|
||
re-running when you type a command.
|
||
|
||
For debugging efforts, the RUN flag can get changed from within a BASIC progra
|
||
m by issuing the code:
|
||
|
||
|
||
10 POKE 214,255
|
||
|
||
|
||
or by poking location 214 with anything greater than 127. From ASSEMBLY
|
||
language, the code would most likely lo ok like this:
|
||
|
||
800- A9 FF LDA #$FF
|
||
802- 85 D6 STA $D6
|
||
|
||
or by loading a register with $80 or gr eater and storing it at $D6.
|
||
|
||
Now if 3D0G, 9D84G or 9DBFG did not pro duce a BASIC prompt, then the DOS
|
||
being used is more elaborate. So re-loa d the program and reset into the
|
||
monitor after it is running.
|
||
|
||
Now comes the final steps in trying to examine a BASIC program. If you are
|
||
using a ROM card in slot zero with an o ld style F8 monitor ROM to reset into
|
||
the monitor, turn on the mother board R OMs and turn off the ROM card INTEGER
|
||
ROMs by typing:
|
||
|
||
*C081
|
||
|
||
Now reset the RUN flag to normal, just to be sure. Type:
|
||
|
||
*D6:00
|
||
|
||
Finally, enter APPLESOFT the sure fire way by typing:
|
||
|
||
*<CTRL C>
|
||
|
||
You should see an APPLESOFT prompt. Now type:
|
||
|
||
]LIST
|
||
|
||
|
||
and your APPLESOFT program should now a ppear.
|
||
|
||
Applying this to a real world example, try this method with one of Strategic
|
||
Simulations releases (SSI). SSI uses a highly modified DOS called RDOS for
|
||
their protection. SSI uses all the tric ks mentioned to prevent you from
|
||
LISTing their programs. But using the a bove procedure, you can LIST their
|
||
BASIC programs.
|
||
|
||
In addition, the DOS used by SSI (RDOS) uses the appersand in all of its DOS
|
||
commands. So if you see any ampersands from within their BASIC program, you
|
||
know it is a DOS command. For example, to catalog a SSI disk, after you follow
|
||
the above procedure and you are in BASI C, type:
|
||
|
||
|
||
]&CAT
|
||
|
||
|
||
This will display SSI's catalog. Very d ifferent, eh!
|
||
|
||
|
||
Well, back at the ranch, if you want to save your APPLESOFT program to a norma
|
||
l DOS disk, do these steps:
|
||
|
||
1) Reset into the monitor after the pro gram is running.
|
||
|
||
2) If you are using a ROM card in slot zero, Type:
|
||
|
||
*C081
|
||
|
||
3) Now type:
|
||
|
||
*D6:00
|
||
*9500<800.8FFM
|
||
|
||
3) Check where the APPLESOFT program en ds by typing:
|
||
|
||
*AF.B0
|
||
|
||
4) Write down the two bytes listed some where.
|
||
|
||
5) Boot a 48K normal DOS 3.3 slave disk with no HELLO program.
|
||
|
||
6) Enter the monitor by typing:
|
||
|
||
|
||
]CALL-151
|
||
|
||
|
||
7) Restore the APPLESOFT program by typ ing:
|
||
|
||
|
||
*800<9500.95FFM
|
||
*AF: enter the two bytes you wrote down here, separated by spaces.
|
||
|
||
8) Enter BASIC and save the program by typing:
|
||
|
||
*3D0G
|
||
]SAVE PROGNAME
|
||
|
||
What you have done is to move $800 to $ 8FF out of the way so you can boot a
|
||
slave disk. After normal DOS is up, you restore $800 to $8FF from $9500 to
|
||
$95FF, and then restore the end of APPL ESOFT program pointers so DOS knows how
|
||
big your BASIC program is. Next you just save it to your disk! Of course there
|
||
are other more automated ways of getting programs to a normal DOS 3.3 disk (such
|
||
as Demuffin Plus or CopyB), but this is a quick and dirty method that will
|
||
always work. Keep in mind tha t the program may not run from normal DOS because
|
||
of more secondary pr otection from within the BASIC program itself. Any curious
|
||
CALLs, POKE s or PEEKs to memory above 40192 (this is memory where DOS resides)
|
||
or b elow 256 (zero page memory) should be examined closely.
|
||
|
||
I hope this will help you learn more ab out the protected programs you own
|
||
that are written in APPLESOFT.
|
||
|
||
--------------------------------------
|
||
|
||
COPYB DOCUMENTATION FILE. BY THE DISK JOCKEY.
|
||
|
||
|
||
INTRODUCTION:
|
||
|
||
There are probably hundreds of ways to protect a program from being copied.
|
||
But generally speaking, protection fall s under two categories: protect the
|
||
actual program (by various means), or p rotect a disk full of programs with some
|
||
sort of DOS modification. DOS modi fications are the most common since they are
|
||
the easiest to deal with (from the publisher's point of view). DOS
|
||
modifications are also the least succes sful of protection, since someone always
|
||
seems to find a way to copy all the files onto a normal DOS disk, eluding all
|
||
the protection. The classic program for dealing with modified DOS' s is
|
||
DEMUFFIN PLUS. It works much the sam e way as Apple's MUFFIN program works.
|
||
MUFFIN was written to read files from a DOS 3.2 disk and then write the m to a
|
||
DOS 3.3 disk. DEMUFFIN was a varia tion of MUFFIN, allowing the hardcore 3.2
|
||
user to copy files from DO S 3.3 to DOS 3.2. DEMUFFIN PLUS operates on the same
|
||
principle, but use s whatever DOS is in memory to read the disk, and then writes
|
||
out to an ini tialized DOS 3.3 disk. While this is a powerful utility, it only
|
||
works with programs that are based on DOS file structures and that have a
|
||
catalog trac k.
|
||
|
||
|
||
INTRODUCING COPYB:
|
||
|
||
COPYB is a highly modified version of C OPYA which converts a protected disk
|
||
that uses a modified DOS and/or RWTS to normal DOS 3.3 format. The protected
|
||
disk may have a normal DOS file structu re, or it may not. Since COPYB copies
|
||
on a track by track basis, this does not matter. This makes COPYB a far more
|
||
flexible tool than DEMUFFIN PLUS.
|
||
|
||
COPYB uses the protected disk's RWTS to read in the tracks and then uses norma
|
||
l DOS 3.3 to write them back out to an in itialized disk. Unless otherwise
|
||
instructed, COPYB copies track $03 to t rack $22, sector $0F to sector $00 of
|
||
each track. Here are the parameters for COPYB:
|
||
|
||
|
||
|
||
LOCATION NORMALLY
|
||
HEX DEC DESCRIPTION HEX DEC NT.
|
||
---------------------------------------
|
||
22E 558 FIRST TRACK TO READ 03 03 (1)
|
||
236 556 FIRST SECTOR TO READ 0F 15 (2)
|
||
365 869 RESET SECTOR NUMBER 0F 15 (2)
|
||
3A1 929 STOP ON ERROR($18=NO) 38 56 (3)
|
||
302 770 TRK TO STOP READING+1 23 35 (4)
|
||
35F 863 TRK TO STOP READING+1 23 35 (4)
|
||
|
||
|
||
NOTES (NT.):
|
||
|
||
1) This is the first track that COPYB s tarts reading at. This is normally
|
||
set at track 3, so not to copy the protecte d DOS which normally resides on
|
||
track 0 through track 2.
|
||
|
||
2) These two parameters are normally se t to $0F for 16 sector disks. Change
|
||
these two parameters to $0C for 13 sect or disks. Most of today's protection
|
||
schemes are based on 16 sect ors. Yet there are still a few using 13 sectors
|
||
(such as Muse). Intere stingly enough, there is a handful of authors that also
|
||
us sectori ng other than 13 or 16 sectors per track. An example of this is
|
||
"Thief " from Datamost. This program uses 11 sectors per track. COPYB can al
|
||
so accommodate these programs.
|
||
|
||
at upon reading a 'bad sector' COPYB will stop and display an error. To let
|
||
COPYB keep going after a read error, change this byte to $18 (24 in decimal) .
|
||
The equivalent sector on the copied disk will be written blank.
|
||
|
||
4) These two parameter determine where COPYB will stop reading the protected
|
||
disk. Normally, this is set to the last track, $22 (34 in decimal) , plus one.
|
||
To change this, add one to the last tra ck you want to copy and change these two
|
||
parameters.
|
||
|
||
|
||
CREATING COPYB:
|
||
|
||
After entering or downloading the BASIC program, save the program by typing:
|
||
|
||
|
||
]SAVE COPYB
|
||
|
||
Now you must enter the ASSEMBLY languag e subroutines that COPYB uses. COPYB
|
||
uses the main subroutines that CO PYA uses, so we only have to modify the file
|
||
COPY.OBJ0 that is on the DOS 3 .3 System Master. But first I will explain the
|
||
added subroutines that COPY B needs.
|
||
|
||
Remember that COPYB uses the protected program's RWTS to read the disk by
|
||
moving it from $8000 to $B700 - $BFFF. After COPYB is done reading the
|
||
protected disk, normal RWTS is moved ba ck up to $B700 - $BFFF from $8900 to
|
||
write to a normal DOS disk. This is han dled by some subroutines which will add
|
||
to the existing file COPY.OBJ0. Her e are the routines (formatted in 80
|
||
columns):
|
||
|
||
0220- 20 B0 02 JSR $02B0 :save the registers.
|
||
0223- A0 B7 LDY #$B7 :botto m page to move from.
|
||
0225- A9 89 LDA #$89 :desti nation page to move to.
|
||
0227- 20 80 02 JSR $0280 :copy normal RWTS from $B700-BFFF to 89 00-91FF.
|
||
022A- 20 B4 03 JSR $03B4 :subro utine to locate RWTS ($3E3).
|
||
022D- A9 03 LDA #$03 :start ing track to read from.
|
||
022F- 8D D1 02 STA $02D1 :store track.
|
||
0232- 8D D2 02 STA $02D2 :store track.
|
||
0235- A9 0F LDA #$0F :start ing sector to read from.
|
||
0237- 8D D3 02 STA $02D3 :store sector.
|
||
023A- 8D D4 02 STA $02D4 :store sector.
|
||
023D- 4C E7 02 JMP $02E7 :jump to read routine.
|
||
0240- 20 B0 02 JSR $02B0 :save the registers.
|
||
0243- A0 80 LDY #$80 :botto m page to move from.
|
||
0247- 20 80 02 JSR $0280 :move normal RWTS from $8900 back to $B700 -BFFF.
|
||
024A- 4C F7 02 JMP $02F7 :jump to write routine.
|
||
0260- 20 B0 02 JSR $02B0 :save the registers.
|
||
0263- A0 89 LDY #$89 :botto m page to move from.
|
||
0265- A9 B7 LDA #$B7 :desti nation page to move to.
|
||
0267- 20 80 02 JSR $0280 :move normal RWTS from $8900 back to $B700 -BFFF.
|
||
026A- 4C 17 03 JMP $0317 :jump to write routine
|
||
0270- 20 B0 02 JSR $02B0 :save the registers.
|
||
0273- A0 89 LDY #$89 :botto m page to move from.
|
||
0275- A9 B7 LDA #$B7 :desti nation page to move to.
|
||
0277- 20 80 02 JSR $0280 :move normal RWTS from $8900 to $B700 -BFFF.
|
||
027A- 4C BC 03 JMP $03BC :Resto re the registers and exit.
|
||
0280- 84 07 STY $07 :store original page to move from.
|
||
0282- 85 09 STA $09 :store destination page to move to.
|
||
0284- A2 09 LDX #$09 :load X with number of pages to move.
|
||
0286- A9 00 LDA #$00 :load accum with $00.
|
||
0288- A8 TAY :trans fer #$00 to Y.
|
||
0289- 85 06 STA $06 :store #$00 at $06.
|
||
028B- 85 08 STA $08 :store #$00 at $08.
|
||
028D- B1 06 LDA ($06),Y:load accum with the address pointed to by locations
|
||
$06 & $07 (lo-hi order), index ed by Y.
|
||
028F- 91 08 STA ($08),Y:store accum at the address pointed to by locations $07
|
||
& $08 (lo-hi order) index ed by Y.
|
||
0291- C8 INY :incre ment Y.
|
||
0292- D0 F9 BNE $028D :conti nue until end of page.
|
||
0294- E6 07 INC $07 :incre ment original page.
|
||
0296- E6 09 INC $09 :incre ment destination page.
|
||
0298- CA DEX :decre ment X.
|
||
0299- D0 F2 BNE $028D :if ha ven't moved 9 pages, do again.
|
||
029B- 60 RTS :retur n from subroutine.
|
||
02B0- 8D C7 03 STA $03C7 :store accumulator at $3C7.
|
||
02B3- 8E C8 03 STX $03C8 :store X-register at $3C8.
|
||
02B6- 8C C9 03 STY $03C9 :store Y-register at $3C9.
|
||
02B9- 60 RTS :retur n from subrotine.
|
||
|
||
So to create the objective file for COP YB, we should first enter the monitor
|
||
by typing:
|
||
|
||
]CALL-151
|
||
|
||
Next we should initialize the memory ar ea by typing:
|
||
|
||
*220:FF N 221<220.2CDM
|
||
|
||
Now bload the file COPY.OBJ0 from the D OS 3.3 System Master by typing:
|
||
|
||
*BLOAD COPY.OBJ0
|
||
|
||
Now type in the new code and some chang es:
|
||
|
||
*228:80 02 20 B4 03 A9 03 8D
|
||
*230:D1 02 8D D2 02 A9 0F 8D
|
||
*238:D3 02 8D D4 02 4C E7 02
|
||
*240:20 B0 02 A0 80 A9 B7 20
|
||
*248:80 02 4C F7 02
|
||
*260:20 B0 02 A0 89 A9 B7 20
|
||
*268:80 02 4C 17 03
|
||
*270:20 B0 02 A0 89 A9 B7 20
|
||
*278:80 02 4C BC 03
|
||
*280:84 07 85 09 A2 09 A9 00
|
||
*288:A8 85 06 85 08 B1 06 91
|
||
*290:08 C8 D0 F9 E6 07 E6 09
|
||
*298:CA D0 F2 60
|
||
*2B0:8D C7 03 8E C8 03 8C C9
|
||
*2B8:03 60
|
||
*2C1:20
|
||
*2C4:40
|
||
*2C7:60 02
|
||
*2CB:13 7F B0 60
|
||
*2D0:01 03 03 0F 0F
|
||
*2D8:B4
|
||
*2DD:02
|
||
*2F8:B4
|
||
*318:B4
|
||
*3C7:02 9D C0 B3 C4 C4
|
||
*220:20 B0 02 A0 B7 A9 89 20
|
||
|
||
After entering these changes, save the file by typing:
|
||
|
||
*BSAVE COPYB.OBJ,A$220,L$1AB
|
||
|
||
|
||
|
||
USING COPYB:
|
||
|
||
To use COPYB, you must capture the fore ign RWTS and put it at locations $8000
|
||
through $88FF. You can do this on e of two ways:
|
||
|
||
1) Boot the protected disk and after th e foreign DOS is loaded, reset into
|
||
the monitor. The foreign DOS will usual ly be loaded a few seconds after the
|
||
boot starts. You can tell this beca use many times a BASIC prompt will appear
|
||
at the bottom of the text screen . Use the monitor move command to move RWTS
|
||
down to $8000 as so:
|
||
|
||
*8000<B700.BFFFM
|
||
|
||
Now boot a 48k slave disk (this will no t destroy memory from $900 to $95FF)
|
||
and run COPYB.
|
||
|
||
|
||
|
||
ENTERING THE PARAMETERS AND RUNNING COPYB:
|
||
|
||
Run COPYB by typing:
|
||
|
||
]RUN COPYB
|
||
|
||
The program will come up and ask what p arameters to use, all described above.
|
||
COPYB will poke in the values you have entered for you. Enter all values in
|
||
DECIMAL.
|
||
|
||
After entering the parameters, you will be asked if your selections are
|
||
correct. If you answer YES, the next se t of prompts will appear, which should
|
||
look familiar. Enter the origina l and destination drive and slot numbers, just
|
||
like in COPYA. Lastly, yo u will be asked if you want the destination disk to
|
||
be initialized, res pond yes or no. Now press the RETURN key to start the copy.
|
||
|
||
When the copy is completed, assuming al l went correctly, you will have a
|
||
normal DOS 3.3 version of your protecte d disk which may run or be examined and
|
||
changed more easily then t he original disk.
|
||
|
||
This method of deprotection is more dep endable that using DEMUFFIN PLUS and
|
||
covers more types of programs. I am sur e you will find COPYB an excellant
|
||
utility to have.
|
||
---------------------------------------
|
||
|
||
INTRODUCTION TO KRAKING PART TWO.B. MAK ING YOUR OWN CUSTOM F8 MONITOR ROM.
|
||
BY THE DISK JOCKEY.
|
||
|
||
In this section I will describe how to make the code for the modified F8
|
||
monitor ROM that you will find extremel y useful in kraking.
|
||
|
||
The EPROM will act like a old style F8 monitor ROM with regards to resets.
|
||
What I mean is that hitting reset will cause you to jump into the monitor.
|
||
|
||
The EPROM will also have a special func tion when an NMI is encountered. Upon
|
||
NMI, this ROM will push the accumu lator, the x-register,the y-register and
|
||
location $00 onto the st ack. The stack pointer will then be saved at location
|
||
$00.
|
||
|
||
Next, the EPROM will move $00 to $4000 into a RAM card in slot zero. This
|
||
clears the way for a 16K slave disk boo t. Here is the code and an explanation
|
||
of how it works (in 80 colu mn format):
|
||
|
||
|
||
|
||
|
||
FCC9- 48 PHA PUSH
|
||
ACCUM ONTO THE STACK.
|
||
FCCA- 8A TXA TRANS
|
||
FER X-REG TO ACCUM.
|
||
FCCB- 48 PHA PUSH
|
||
(X) ACCUM ONTO THE STACK.
|
||
FCCC- 98 TYA TRANS
|
||
FER Y-REG TO ACCUM.
|
||
FCCD- 48 PHA PUSH
|
||
(Y) ACCUM ONTO THE STACK.
|
||
FCCE- A5 00 LDA $00 LOAD
|
||
ACCUM WITH $00.
|
||
FCD0- 48 PHA PUSH
|
||
($00) ACCUM ONTO THE STACK.
|
||
FCD1- BA TSX TRANS
|
||
FER STACK POINTER TO X-REG.
|
||
FCD2- 86 00 STX $00 STORE
|
||
STACK POINTER AT $00.
|
||
FCD4- AD 81 C0 LDA $C081 ENABL
|
||
E WRITE TO RAM BANK 1.
|
||
FCD7- AD 81 C0 LDA $C081 (MUST
|
||
ACCESS TWICE).
|
||
FCDA- A0 00 LDY #$00 -----
|
||
------------------------------
|
||
FCDC- B9 00 00 LDA $0000,Y MOVE
|
||
$00 TO $FF INTO RAM CARD SO WE
|
||
FCDF- 99 00 D0 STA $D000,Y CAN U
|
||
SE ZERO PAGE FOR REST OF MOVE.
|
||
FCE2- C8 INY
|
||
FCE3- D0 F7 BNE $FCDC -----
|
||
------------------------------
|
||
FCE5- 84 00 STY $00 MOVE
|
||
$100-$2FFF INTO BANK 1
|
||
FCE7- 84 02 STY $02 OF TH
|
||
E RAM CARD.
|
||
FCE9- A9 01 LDA #$01
|
||
FCEB- 85 01 STA $01
|
||
FCED- A9 D1 LDA #$D1
|
||
FCEF- 85 03 STA $03
|
||
FCF1- B1 00 LDA ($00),Y
|
||
FCF3- 91 02 STA ($02),Y
|
||
FCF5- C8 INY
|
||
FCF6- D0 F9 BNE $FCF1
|
||
FCF8- E6 03 INC $03
|
||
FCFA- E6 01 INC $01
|
||
FCFC- A5 01 LDA $01
|
||
FCFE- C9 30 CMP #$30
|
||
FD00- D0 EF BNE $FCF1 -----
|
||
------------------------------
|
||
FD02- 4C CD FE JMP $FECD RAN O
|
||
UT OF ROOM HERE, JMP TO $FECD.
|
||
.
|
||
.
|
||
.
|
||
FECD- A9 D0 LDA #$D0 RESET
|
||
MOVE ROUTINE POINTERS.
|
||
FECF- 85 03 STA $03
|
||
FED1- AD 89 C0 LDA $C089 ENABL
|
||
E BANK 2 OF RAM CARD.
|
||
FED4- AD 89 C0 LDA $C089 (MUST
|
||
ACCESS TWICE).
|
||
FED7- B1 00 LDA ($00),Y -----
|
||
------------------------------
|
||
FED9- 91 02 STA ($02),Y MOVE
|
||
$3000-$3FFF INTO BANK 2
|
||
FEDB- C8 INY OF TH
|
||
E RAM CARD.
|
||
FEDC- D0 F9 BNE $FED7
|
||
FEDE- E6 03 INC $03
|
||
FEE0- E6 01 INC $01
|
||
FEE2- A5 01 LDA $01
|
||
FEE4- C9 40 CMP #$40
|
||
FEE6- D0 EF BNE $FED7 -----
|
||
------------------------------
|
||
FEE8- AD 82 C0 LDA $C082 TURN
|
||
ON MOTHERBOARD RAM AND WRITE
|
||
FEEB- AD 8A C0 LDA $C08A PROTE
|
||
CT BANKS 1&2 OF RAM CARD.
|
||
FEEE- 4C FD FE JMP $FEFD RAN O
|
||
UT OF ROOM, JUMP TO $FEFD.
|
||
.
|
||
.
|
||
.
|
||
FEFD- A2 1C LDX #$1C THIS
|
||
SUBROUTINE OUPUTS THE
|
||
FEFF- BD 0B FF LDA $FF0B,X MESSA
|
||
GE "RAM CARD LOADED WITH
|
||
FF02- 9D D6 07 STA $07D6,X $00-3
|
||
FFF" AT THE BOTTOM OF
|
||
FF05- CA DEX THE T
|
||
EXT SCREEN.
|
||
FF06- 10 F7 BPL $FEFF -----
|
||
-----------------------------
|
||
FF08- 4C 59 FF JMP $FF59 ALL D
|
||
ONE, EXIT THRU NORMAL RESET.
|
||
|
||
|
||
To create this EPROM file, here are the steps:
|
||
|
||
1) Boot a normal DOS disk and enter the monitor by typing:
|
||
|
||
]CALL -151
|
||
|
||
2) Move your autostart F8 monitor ROM c ode down into RAM by typing:
|
||
|
||
*4800<F800.FFFFM
|
||
|
||
3) Now change the code as follows:
|
||
|
||
*4CC9:48 8A 48 98 48 A5 00 *4CD0:48 BA 86 00 AD 81 C0 AD 81 C0 A0 00 B9 00 00
|
||
99 *4CE0:00 D0 C8 D0 F7 84 00 84 02 A9 01 85 01 A9 D1 85 *4CF0:03 B1 00 91 02 C8
|
||
D0 F9 E6 03 E6 01 A5 01 C9 30 *4D00:D0 EF 4C CD FE *4ECD:A9 D0 85 03 AD 89 C0 AD
|
||
89 C0 B1 00 91 02 C8 D0 F9 E6 03 *4EE0:E6 01 A5 01 C9 40 D0 EF AD 82 C0 AD 8A C0
|
||
4C FD FE *4EFD:A2 1C BD 0B FF 9D D6 07 CA 10 F7 4C 59 FF *4F0B:52 41 4D 60 43 41
|
||
52 44 60 4C 4F 41 44 45 44 60 57 49 54 48 60 *4F20:64 70 70 6D 73 46 46 46
|
||
*4FFA:C9 FC 59 FF
|
||
|
||
4) Now save the file to a disk by typin g:
|
||
|
||
*BSAVE F8 SAVE RAM EPROM,A$4800,L$800
|
||
|
||
5) Finally, burn the 2716 EPROM with th is code or have someone do it for you.
|
||
|
||
Now to use your new 2716 EPROM, you mus t make these changes directly to the
|
||
chip itself (not advisable), or to a ju mper socket which your new chip will
|
||
plug into, and then which will be plugg ed into your motherboard.
|
||
|
||
You need a 24 pin low-profile socket (n ot wire-wrap!, they will destroy your
|
||
motherboard sockets!). These are availa ble from radio shack (part number
|
||
276-1989) or the such. Now with the soc ket up-side-down and the pins looking
|
||
you in the face, it should look like this:
|
||
|
||
---------------------------------------
|
||
! 13 14 15 16 17 18 19 20 21 22 23 24!
|
||
! ./ ./ ./ ./ ./ ./ ./ ./ ./ ./ ./ ./ !
|
||
! !
|
||
! !
|
||
! -
|
||
! (notch)->!
|
||
! -!
|
||
! !
|
||
! . . . . . . . . . . . . !
|
||
!/ / / / / / / / / / / / !
|
||
!12 11 10 9 8 7 6 5 4 3 2 1 !
|
||
---------------------------------------
|
||
|
||
Now your soldering skills come in handy ! Using some short, hi-gauge wire
|
||
(wire-wrap is preferable, but anything in the 26-30 gauge will work), solder a
|
||
piece between pins 21 and 24, and solde r a piece between pins 12 and 18. Be
|
||
extremely careful not to short out t he wire or to cross solder any pins! Also,
|
||
try and solder as close to the ba se of the socket as possible, since you have
|
||
to cut off pins 18 and 21 afte r you have finished soldering them. Now cut of
|
||
pins 18 and 21 as close to t he base of the socket without cutting the freshly
|
||
soldered wires! Remember, p ins 18 and 21 should be short enough so that they
|
||
will not touch the socket you will be plugging this one into. The socket should
|
||
now look like this:
|
||
|
||
---------------------------------------
|
||
! 13 14 15 16 17 18 19 20 21 22 23 24!
|
||
! ./ ./ ./ ./ ./ ./ ./ ./ ./ ./ ./ ./ !
|
||
! x x / !
|
||
! / / / !
|
||
! / /--------/ -
|
||
! /--------/ !
|
||
! / -!6
|
||
! / !
|
||
! / . . . . . . . . . . . !
|
||
!/ / / / / / / / / / / / !
|
||
!12 11 10 9 8 7 6 5 4 3 2 1 !
|
||
---------------------------------------
|
||
|
||
Double check your soldering and the con nections (and notice that pin 18 and
|
||
21 are cut off!). Now carefully remove the ROM labelled F8 (it is the socket
|
||
farthest on the left that has 24 pins a s you face the keyboard) and plug this
|
||
jumper socket into the motherboard. Now plug your modified 2716 EPROM into thi
|
||
s jumper socket and your all done! Make s ure you have the notch pointing in
|
||
the same direction as the other ROMs (towar ds the keyboard).
|
||
|
||
When you turn on the Apple you should s ee a screen full of garbage with the
|
||
monitor prompt at the bottom of the scr een. To boot your Apple, just type "6
|
||
ctrlP", and your computer will act j ust as usual.
|
||
|
||
---------------------------------------
|
||
|
||
INTRODUCTION TO KRAKING PART TWO.C. MAKING YOUR OWN NMI BOARD. BY THE DISK
|
||
JOCKEY.
|
||
|
||
In this article I will describe how to make your own NMI board that will work
|
||
in conjunction with the modified F8 monitor EPROM you have (or will) create.
|
||
Here is the parts lists for the NMI board:
|
||
|
||
(1) 7400 or 74LS00 chip. Radio Shack part #276-1801. $0.59
|
||
|
||
(1) SPDT momentary push switch. Radio Shack part #275-1549. $2.19
|
||
|
||
(1) 14 pin low profile or wire wrap socket. Radio Shack part #276-1999 or
|
||
#276-1993. $0.89
|
||
|
||
(2) 3.3k ohm resisters, 1/4 watt. Radio Shack part #271-1328. $0.39
|
||
|
||
(1) Dual plug-in interface board. Radio Shack part #276-164. $4.95 NOTE:
|
||
This part has been discontinued by Radio Shack, but you can sometimes still find
|
||
them in the junk bin. Cut the board so it will fit inside your Apple.
|
||
|
||
ALTERNATIVELY: (1) Apple bare board number PAPGBP5001. $13.95 from Priority
|
||
Electronics, 9161 Deering Ave., Chatsworth, CA 91311.
|
||
|
||
After you have obtained all the parts above, you should solder the 14 pin
|
||
socket and the two resistors somewhere convenient on the bare board. Next get
|
||
some hi-gauge wire and make the following connections:
|
||
|
||
1) Connect pin 25 of the bare board to one leg of each of the two resistors.
|
||
|
||
2) Connect each of the other legs of the resistors to the two outside contacts
|
||
of the switch. (one resistor goes to one contact, the other resistor goes to
|
||
the other contact). Use some good wire.
|
||
|
||
3) Connect pin 25 of the bare board to pin 14 of the 14 pin socket.
|
||
|
||
4) Connect the middle contact of the switch to pin 7 of the 14 pin socket.
|
||
|
||
5) Connect pin 26 of the bare board to pin 7 of the 14 pin socket.
|
||
|
||
6) Connect pin 2 of the 14 pin socket to pin 6 of the 14 pin socket.
|
||
|
||
7) Connect pin 3 of the 14 pin socket to pin 4 of the 14 pin socket.
|
||
|
||
8) Connect pin 4 of the 14 pin socket to pin 29 of the bare board.
|
||
|
||
9) Connect the leg of one of the resistors that is connected to the switch to
|
||
pin 5 of the 14 pin socket.
|
||
|
||
10) Connect the other leg of the resistor that is connected to the switch to
|
||
pin 1 of the 14 pin socket.
|
||
|
||
11) Check all connections twice, and don't get confused on what pin is what on
|
||
the bare board and the 14 pin socket.
|
||
|
||
You have now completed building your own NMI board. This board may be plugged
|
||
into any one of the peripheral slots.
|
||
|
||
---------------------------------------
|
||
|
||
THE ROM CARD. BY THE DISK JOCKEY.
|
||
|
||
OBJECTIVE:
|
||
|
||
While being able to deprotect programs from files on Pirate's Harbor is
|
||
certainly helpful in the quest for copyable software, it would be optimal to
|
||
deprotect your own programs without the help of other sources. This works on
|
||
the premise that you can give a man a fish and feed him today, or you can teach
|
||
him to fish and feed him for life.
|
||
|
||
With this in mind, our objective is to teach you the ways of deprotection in
|
||
general, and mention some of the tools that will make this easier. Although
|
||
some of these tools will cost money and are somewhat specialized, they will only
|
||
increase your knowledge of the Apple computer, for what that's worth.
|
||
|
||
INTRODUCING THE ROM CARD:
|
||
|
||
The foremost of important tools for easily snooping through memory is the ROM
|
||
card. The ROM card was originally developed for t`g{m(a|`(xzograms written in
|
||
both INTEGER and APPLESOFT BASIC. Remember that your motherboard (the big green
|
||
printed circuit board inside your computer case) can house only one of the BASIC
|
||
languages, either INTEGER or APPLESOFT. When the Apple was originally released,
|
||
it was only available with INTEGER BASIC. So many programs were written in
|
||
INTEGER, and would not run on the Apple II+ (with APPLESOFT on board) when it
|
||
was introduced.
|
||
|
||
Before RAM memory was very cheap, many people bought ROM cards for their Apple
|
||
II+ that could be put in slot zero (as you would a RAM card), to enable them to
|
||
run programs that were written in either BASIC language. It was just as though
|
||
you had loaded INTEGER BASIC into you RAM card, like the DOS 3.3 System Master's
|
||
HELLO program does. When RAM cards became available at a reasonable cost,
|
||
everyone started buying them because they are so much more versatile for the
|
||
average folk. That is why you don't see ROM cards for sale too much any more.
|
||
But for deprotecting Apple programs, the ROM card is indespensible.
|
||
|
||
Also, for the Apple II owner who wanted to run the newer APPLESOFT programs,
|
||
the ROM card was available with APPLESOFT ROMs. The INTEGER and the APPLESOFT
|
||
versions of the ROM card are identical, except for the actual ROMS on the card.
|
||
In other words, one had INTEGER ROMs and the other had APPLESOFT ROMs, and there
|
||
is no other differences.
|
||
|
||
THE REASONS WHY:
|
||
|
||
Their are several reasons the ROM card is so important. The least of the
|
||
reasons is the need for INTEGER BASIC or the Programmer's Aid chip. If you can
|
||
get a ROM card cheaply without INTEGER or the Programmer's Aid ROMs, do so.
|
||
From a cost outlook, it is to your advantage. Besides, INTEGER is a dead
|
||
dinosaur, and who really cares if it's faster than APPLESOFT?
|
||
|
||
The reason we want a ROM card is so we can put an old style F8 monitor ROM and
|
||
THE INSPECTOR ROM (from Omega Microware) on it. These two ROM chips are really
|
||
essential for learning more about protected programs. Ultimately, we would like
|
||
WATSON in conjunction with THE INSPECTOR, but to do so you will also need
|
||
INTEGER BASIC ROMs, since WATSON uses some routines from the INTEGER BASIC ROMs.
|
||
Watson enhances the Inspector by adding even more commands and flexibility. The
|
||
combination of Watson and the Inspector provides you with great power for not
|
||
only snooping, but also for general purpose utility chores.
|
||
|
||
The reason we want the old style F8 ROM should be obvious by now. After
|
||
reading several kraking articles and from your own experiences, you have noticed
|
||
that it is impossible to break out of many programs with just an autostart F8
|
||
monitor ROM. The reason we should have the old style F8 ROM on the ROM card and
|
||
not on the mother board is for convenience. The ROM card has a switch which
|
||
determines which F8 monitor ROM is active when you hit reset. So you can have
|
||
the convenience of the Autostart F8 monitor ROM, and when you need it, hit the
|
||
switch and be able to break out of any program you want with the old style F8
|
||
monitor ROM.
|
||
|
||
OBTAINING YOUR OWN ROM CARD:
|
||
|
||
ROM cards are available used at very cheap prices. Check your local Apple
|
||
users' group. Alternatively, you can get blank cards and stuff it yourse8f. I
|
||
would suggest stuff your own since the parts are easy to get, and it is usually
|
||
the least expensive route! I have also seen Japanese clone cards for sale at a
|
||
very reasonable price. The best place to check for these is in The Computer
|
||
Shopper, a bi-monthly newspaper of Apple and other computer bargins.
|
||
|
||
OBTAINING YOUR OWN ROMs:
|
||
|
||
You can either buy an old style F8 monitor ROM, or you can make one by
|
||
changing your autostart F8 code slightly. After making the change, you can save
|
||
the file to disk and have a friend or your local computer store burn the image
|
||
into a 2716 EPROM. Here is the instructions for creating your own:
|
||
|
||
1) Boot a normal DOS 3.3 disk. 2) Enter the monitor by typing:
|
||
|
||
]CALL-151
|
||
|
||
3) Move the autostart F8 ROM image into RAM by typing:
|
||
|
||
*4800<F800.FFFFM
|
||
|
||
4) To enter the monitor when reset is pressed, type these changes:
|
||
|
||
*4FFC:59 FF
|
||
|
||
5) Bsave the file to a blank disk by
|
||
typing:
|
||
|
||
*BSAVE OLD $F8,A$4800,L$800
|
||
|
||
6) Burn this image into a 2716 EPROM.
|
||
|
||
This new F8 EPROM will be just like the autostart version F8 ROM except when
|
||
you hit reset, you will be in the monitor and not in BASIC. Now you can reset
|
||
out of any program.
|
||
|
||
Alternatively, you can use a modified F8 EPROM too, as described in other
|
||
kraking articles. This will give you the advantage of being able to save memory
|
||
from $00 to $8FF when you hit reset. This would certainly be helpful at times.
|
||
|
||
If you want INTEGER BASIC on your ROM board, you can either buy the ROMs from
|
||
your local Apple dealer, or you can make them. When you bought your Apple disk
|
||
drive and controller you also bought DOS 3.3, the DOS 3.3 System Master, and all
|
||
the programs on the System Master, including INTEGER BASIC. So you can also
|
||
burn INTEGER into 2716 EPROMs just like you burned your new F8 EPROM, and put
|
||
them on your ROM card. Here are the steps to do this:
|
||
|
||
1) Boot your DOS 3.3 System Master.
|
||
|
||
2) Bload the file INTBASIC by typing:
|
||
|
||
]BLOAD INTBASIC,A$2000
|
||
|
||
3) Bsave the INTEGER files to a blank disk by typing:
|
||
|
||
]BSAVE INT $E0,A$3000,L$800
|
||
]BSAVE INT $E8,A$3800,L$800
|
||
]BSAVE INT $F0,A$4000,L$800
|
||
|
||
4) Burn three 2716 EPROMs from each of these files.
|
||
|
||
IMPORTANT: In order to use 2716 EPROMs on your ROM card instead of the
|
||
F8 ROM socket on the ROM board white circle with the word "2716" next to it.
|
||
Inside the circle will be four solder pads, grouped into two pairs. Notice each
|
||
pair has two pads real close together, but not touching. Take a soldering iron
|
||
and cross each pad in each pair together with some solder. So now the circle
|
||
will have two solder pads, instead of four. DO NOT CROSS ALL FOUR PADS
|
||
TOGETHER! Your ROM board will now except ONLY 2716 EPROMs, so when you do this
|
||
you have to use all 2716 EPROMs, and no 9316 ROMs.
|
||
|
||
While on the subject of jumpers, there is another jumper on your ROM card just
|
||
below the E8 ROM. This jumper, when crossed, will ignore the position of the
|
||
ROM card switch. Reset will always ignore the F8 monitor ROM on the ROM board,
|
||
and just use the motherboard F8 monitor ROM. Obviously, we do not want to cross
|
||
this jumper.
|
||
|
||
If you can't tell if you should cross the 2716 jumper because you don't know
|
||
if you have 2716's or 9316's, it is easy to tell the difference. 2716's have a
|
||
small quartz window on their face, usually beneath some label. The window is
|
||
used to erase the EPROM (hence the name Erasable, Programable,0Read Only
|
||
Memory). They should also say "2716" somewhere on them too.
|
||
|
||
If you must mix 9316's and 2716's on the same ROM card, do not cross any of
|
||
the two pairs of jumpers. Instead, refer to INTRODUCTION TO KRAKING PART 2.B on
|
||
how to make 2716 scrambler sockets for using 2716's in 9316 applications.
|
||
|
||
9316's are the all black 24 pin ROM chips that come with your Apple, and are
|
||
not erasable. They will not have a quartz window.
|
||
|
||
Now plug in your F8 monitor EPROM or ROM in the socket labeled F8, and do the
|
||
same with the other E0, E8 and F0 INTEGER EPROMs or ROMs. We are ready for the
|
||
next step.
|
||
|
||
THE INSPECTOR:
|
||
|
||
The next thing the ROM board enables us to do is to use THE INSPECTOR from
|
||
Omega Microware. The Inspector is basically a sector editor program with some
|
||
really nice features which come in handy when deprotecting programs. To use The
|
||
Inspector, we just reset out of a program and into the monitor, and type C080 N
|
||
D800G. Now The Inspector is running without disturbing anything in memory
|
||
outside of what normally gets disturbed upon hitting reset.
|
||
|
||
Besides being a sector editor, The Inspector has a very useful FIND command
|
||
which enables us to find any string of bytes in memory or to locate them on a
|
||
disk. This can help us find where a particular routine is being called from, or
|
||
to help find the starting address of a program, etc. Also, The Inspector has a
|
||
free sector map, removes DOS from a disk, does nibble reads of protected disks,
|
||
displays bytes in HEX or ASCII, reads half tracks, and compares or verifies
|
||
disks. It also has unlimited uses in snooping and changing memory and disks.
|
||
|
||
The Inspector is VERY useful, especially in conjunction with its partner,
|
||
WATSON (also from Omega1Microware). It is the most powerful and well used
|
||
utility I have. And since it is on my ROM card, it is always available without
|
||
disturbing mother board memory. This is why it is so useful. If we had to load
|
||
it in from disk like any other program, it would be just like any other sector
|
||
editor to a large extent.
|
||
|
||
Ask around and try and find someone with the Inspector and Watson code saved
|
||
in a Bfile so you can burn your own Inspector EPROM and plug it into your ROM
|
||
card. If you buy the Inspector, BE SURE you tell Omega when buying The
|
||
Inspector that you want it in 2716 EPROM form if you are planning on using only
|
||
2716 EPROMs on your ROM card, instead of 9316's.
|
||
|
||
WHERE Do I PUT IT?:
|
||
|
||
Now that you have a ROM board, what slot should you put it in? Generally, the
|
||
conventional slot is slot zero. But, I am sure many of you have RAM cards in
|
||
slot zero. It is probably best 99 percent of the time to have your RAM card in
|
||
slot zero, since most programs which use RAM cards expect it in only slot zero
|
||
(although it has some uses in other slots). So that leaves you with two
|
||
choices, put your ROM card in another slot, or play musical slots when you need
|
||
the ROM card.
|
||
|
||
I prefer to put my ROM card in slot two since the card (and The Inspector) is
|
||
still always available, but that presents some problems. The main problem is
|
||
that after flipping the ROM board switch up to use the old F8 monitor ROM and
|
||
hitting reset, your computer cannot find APPLESOFT when you boot a disk, it can
|
||
only find INTEGER BASIC (assuming you have it on the ROM card). One way out is
|
||
to flip the switch back down and hit reset again before booting a disk. I do
|
||
not recommend this when deprotecting a program since now your computer will jump
|
||
to the reset routine that was there when you originally hit reset. Of course,
|
||
there is a better way.
|
||
|
||
After reseting into the monitor and just before you boot a disk you must turn
|
||
off your ROM card ROMs and turn on the motherboard ROMs. This is accomplished
|
||
with a softswitch, much like turning on the hi-res page. Remember how we
|
||
activated the Inspector with C080 N D800G? Well, the C080 turns on the ROM
|
||
card, so those ROMs are active, much like typing INT from BASIC. If you type
|
||
C081 from the monitor, this turns the ROM card ROMs off, and the motherboard
|
||
ROMs on. If your ROM card is in another slot, you need to type the slot number
|
||
times ten, and add it to C081. Then you can boot a disk, and APPLESOFT will be
|
||
found. Here is a chart of what you would type from the monitor just prior to
|
||
booting a disk (you do not have to do this if your ROM card is in slot zero):
|
||
|
||
TURN ON TURN ON
|
||
SLOT ROM CARD MOTHERBOARD
|
||
---------------------------------------
|
||
0 C080 C081
|
||
1 C090 C091
|
||
2 C0A0 C0A1
|
||
3 C0B0 C0B1
|
||
4 C0C0 C0C1
|
||
5 C0D0 C0D1
|
||
6 C0E0 C0E1
|
||
7 C0F0 C0F1
|
||
|
||
|
||
For example, if your ROM card was in slot two, and you have reseted into the
|
||
monitor, type:
|
||
|
||
*C0A1
|
||
|
||
before you boot a disk to turn on your motherboard ROMs so APPLESOFT can be
|
||
found.
|
||
|
||
Likewise, if you have reset into the monitor and you want to use the
|
||
Inspector, type (assuming slot two):
|
||
|
||
*C0A0 N D800G
|
||
|
||
Notice we multiply the slot number by twenty and add it to $C080 or $C081.
|
||
|
||
Another alternative is to use DAVID DOS from David Data when you boot normal
|
||
DOS 3.3. This DOS is incredible in just speed savings of loading programs. It
|
||
will also recognize your ROM card in any slot (and hence solves our problem),
|
||
has a relocatable DOS function to put DOS in your RAM card, has a find command,
|
||
and has a disassemble command. If that is not enough, it has a TLOAD and TLIST
|
||
command which loads and lists text files like BASIC or binary files! This alone
|
||
make DAVID DOS worth the price. The only disadvantage to David DOS is it does
|
||
not have an INIT disk command. To put David DOS on another disk requires using
|
||
a program that comes with it.
|
||
|
||
Of course, if you are booting a disk which does not run under normal DOS, you
|
||
can not use David DOS and you must use the first alternative.
|
||
|
||
CONCLUSION:
|
||
|
||
This completes our discussion of ROM cards and what configuration is most
|
||
desirable. In summary, we would like a ROM card with an old style F8 monitor
|
||
ROM, The Inspector, and ultimately, INTEGER BASIC and WATSON. Next we will
|
||
discuss some general methods of deprotecting single load programs.
|
||
|
||
---------------------------------------
|
||
|
||
INTRODUCTION TO KRAKING PART TWO. USING
|
||
SOME MINIMAL HARDWARE.
|
||
BY THE DISK JOCKEY.
|
||
|
||
INTRODUCTION:
|
||
|
||
Assuming that you have read part one of this series, you now should possess
|
||
some basic information regarding the ar chitecture of the Apple computer. Using
|
||
this basic information you will g o quite far down "memory lane" in your kraking
|
||
efforts, but it doesn't stop th ere. Now we need to talk about some basic
|
||
hardware you will need to make yo ur job easier. What we will be discussing is
|
||
the use of resets and "NM Is" in the art of kraking.
|
||
|
||
As you have probably noticed, when you try to reset from a protected program
|
||
with your II+ or //e, the computer can do some strange things. This is because
|
||
the reset key is actually a programable key that when hit, can be made to run a
|
||
program within memory. In most cases, t he program that is run clears memory
|
||
and re-boots your disk. This of course keeps undesirables from snooping through
|
||
memory, discovering any secrets a publisher may be hiding.
|
||
|
||
The reason the reset key is programable computer will jump to the address
|
||
point $3F3, in "backassward" order. This mean s if $3F2 = 00 and $3F3 = 60,
|
||
then upon reset you will jump to $6000. The worst part about this is there is
|
||
no way to stop it unless you use some hard ware (although you may use a RAM
|
||
card, I will discuss this method later) .
|
||
|
||
The hardware I am getting to is the fam ed "old F8 monitor ROM", which when
|
||
you hit reset, jumps unconditionally to $FF59 and puts your program to a halt
|
||
and leaves you in monitor. Using this c hip, you may break out of any program
|
||
and examine memory. Now you ask, "what the hell is a old F8 monitor ROM
|
||
anyways?".
|
||
|
||
The F8 monitor ROM is a set of programs that oversees the operations of your
|
||
Apple, and hence is called a "monitor". It is a ROM because it is "Read Only
|
||
Memory", or a permanent memory, as oppo sed to random Access Memory, or RAM.
|
||
The reason it is called a "F8" ROM is because it occupies memory from $F800 to
|
||
$FFFF. The chip is located jus t in front of the peripheral slots on the II+,
|
||
and should be labeled "ROM- F8". On a //e, this chip is not as accessible as on
|
||
the II+, and generally you are "SOL" (shit out of luck) in trying to replace it.
|
||
But fear not, ref er to the article "The ROM card" or "RAM card Resets" for help
|
||
in your effo rts.
|
||
|
||
Back in the old days when the Apple was first introduced, it came with the "ol
|
||
d style F8 monitor ROM". But later it was replaced by the "autostart F8 monitor
|
||
ROM". It would be most easy for us to f ind the old style ROM and replace it
|
||
with our present autostart monitor ROM. This would allow us to reset out of an
|
||
y program, at any time with it installed. But before you run out and buy one,
|
||
read on as I introduce another topic th at will parallel our ROM discussion.
|
||
|
||
|
||
INTRODUCING THE NMI:
|
||
|
||
|
||
|
||
NMI is an acronym for NON MASKABLE INTE RRUPT, and as the name implies, it can
|
||
not be prevented (or masked) on the Apple. The NMI is the basis behind mos t of
|
||
the "copy cards" on the market, such as the Wildcard or Replay cards. The NMI
|
||
allows us to interrupt a program, a nd to restart it with minimal effort.
|
||
Obviously this is of extreme importance to the krakist, who wants to interrupt a
|
||
programs, save memory to a normal DOS disk, and restart the program upon BRUNing
|
||
the file.
|
||
|
||
To use an NMI you can simply crossed pi n 26 (ground) and pin 29 (NMI) of any
|
||
one of the peripheral slots. You can do this with a 100 ohm resistor. This wil
|
||
l execute an NMI.
|
||
|
||
Unfortunately, this is less than ideal since when you try to do this, you will
|
||
probably execute 20 or so NMI's. This i s because it happens so fast, that an
|
||
NMI will interrupt an NMI, and so on fo r many, many times. This will put much
|
||
garbage onto the stack (page one). Using a switch for this chore doesn't help
|
||
since the switch actually slams (o r bounces) against itself many times causing
|
||
the same problem. To solve this we need to make a "de-bounced" NMI switch.
|
||
This will constitute about $8 t o $20 of capital resources (depending on your
|
||
parts supplier), and a solderin g iron. This is considerably less expensive
|
||
than a store bought NMI board, but will lack some of the features the commercial
|
||
ones have. A fu ll discussion of how to make an NMI board is in the file
|
||
"KRAKING PART TWO. C".
|
||
|
||
Assuming you have made your NMI card, I will now tell you more about how it
|
||
works and its uses. If you don't fully understand the workings of the NMI,
|
||
don't worry about it. Just try and foll ow along.
|
||
|
||
When you push the NMI switch, the 6502 processor will push the present value
|
||
of the program counter on the stack alo ng with the processor status word. Then
|
||
it will jump to what ever location s are pointed to by $FFFA and $FFFB. So the
|
||
restart a interrupted pro gram, we only need to restore the registers (x, y,
|
||
accum), the lower page s of memory, and the stack pointer, and do a "RTI"
|
||
(return for int errupt) instruction.
|
||
|
||
Now remember our old F8 monitor ROM? We ll these two locations live in the
|
||
monitor ROM. It would be nice if we cou ld change these location and after an
|
||
NMI is executed, run a small program to that will save the registers, the stack
|
||
pointer, and the lower pages of m emory. Now this leads us back to our old
|
||
friend, the F8 monitor ROM.
|
||
|
||
This is indeed what we need to do. The best thing would be to execute an NMI,
|
||
and then jump to a routine that moves t he lower 16K of memory into a RAM card.
|
||
Then we could boot a 16K slave di sk (which would only disturb the lower 16K of
|
||
memory), and save all of m emory to a disk. After we have saved all of memory,
|
||
we could reconstruct our program and re-start, or do a "return from interrupt".
|
||
|
||
Of course to do this we need to change some of the code in the F8 monitor ROM.
|
||
We can not do this directly to the F8 c hip that comes with your Apple since it
|
||
is Read Only Memory. But we can move the code in the ROM down to RAM, put our
|
||
routines in, and burn a new "2716 E PROM". The 2716 EPROM will replace the ROM,
|
||
and will have our new kraking rout ines in it.
|
||
|
||
Now you ask, "how do I burn a 2716 EPRO M?". Well, if you don't have access
|
||
to an EPROM programmer, you can take yo ur modified F8 code (saved to a disk) to
|
||
a local computer store and they shou ld be able to burn you one for a nominal
|
||
fee.
|
||
|
||
Refer to the article entitled "KRAKING PART TWO.B" for an explanation of how
|
||
to create the code for the new EMPROM a nd how to plug it in after it is burnt.
|
||
|
||
Lastly, we need to make a 16K slave dis k and to use the program to save all
|
||
of memory to a disk. To get the program type it in or download it from someone
|
||
. To create a 16K slave disk, do the foll owing: (NOTE: this only applies to
|
||
the Apple II or II+)
|
||
|
||
1) Turn off your computer.
|
||
|
||
2) Open the lid, and look for the 3 row s of chips that have a white line
|
||
boarder around them. These are the 48K of RAM in your Apple II+.
|
||
|
||
3) Remove any one chip from each of the two rows of RAM furthest away from the
|
||
keyboard.
|
||
|
||
4) Turn the computer on and boot your D OS 3.3 System Master.
|
||
|
||
5) Put a blank disk in the drive and ty pe:
|
||
|
||
]INIT RAM 48K SAVER
|
||
|
||
|
||
|
||
6) When this is complete, turn the comp
|
||
|
||
uter off and replace the two chips.
|
||
|
||
|
||
|
||
7) Run a sector editor and change the f ollowing sectors of the 16K slave
|
||
disk:
|
||
|
||
|
||
TRK SECTOR BYTE FROM TO
|
||
------------------------------
|
||
$00 $01 $48 $03 $00
|
||
$00 $0D $42 $06 $34
|
||
|
||
8) Write the sector back out to your 16 K slave disk.
|
||
|
||
9) Delete the Hello program on the disk by typing:
|
||
|
||
]DELETE RAM 48K SAVER
|
||
|
||
Now download the "RAM 48K SAVER" file a nd save it to your 16K slave disk.
|
||
Also down load the file "MEMORY MOVE WR ITER". Save these to your 16K slave
|
||
disk also, and then write protect it.
|
||
|
||
In the next episode, I will discuss how to use these hardware and software in
|
||
a real-life application.
|
||
|
||
---------------------------------------
|
||
|
||
DEPROTECTION PART THREE.
|
||
PRACTICAL USES FOR THE NMI/MODIFIED ROM HARDWARE.
|
||
BY THE DISK JOCKEY
|
||
|
||
Now that you have burned your own F8 mo nitor ROM, constructed your own NMI
|
||
board and created a 16K slave disk with the previously mentioned files, its time
|
||
to put it all together and use it (also make sure you have a RAM card in slot
|
||
0). The primary use for these hard ware devices is for the single load program.
|
||
As a practical example, we wil l be putting the Locksmith 5.0 fastcopy program
|
||
into a file. This prog ram is a really fast normal DOS copy program that is
|
||
worth having in a file.
|
||
|
||
First turn off your computer and instal l your new F8 monitor EPROM into the
|
||
motherboard, and put your NMI board in any slot. Now boot your Locksmith 5.0
|
||
(an original or a copy will do) and select the "16 sctr utilities" option. Next
|
||
select the "16 sector fast disk ba ckup". Now just after the drive stops
|
||
spinning, and before you see the prompt "drive- original:1", hit the NMI switc h
|
||
on your NMI card. You should then be in the monitor.
|
||
|
||
Now boot your 16K slave disk. The "RAM 48K SAVER" program will run and will
|
||
initialize a disk and save all 48K of m emory to your disk.
|
||
|
||
Finally, run the "MEMORY MOVE WRITER" p rogram and select the number of moves
|
||
as one. Next select the running address as $8000. Use a forward memory move,
|
||
and enter the start page as $40, and th e hi page as $80. Next select the
|
||
starting page to move to as $00. Finall y, select the text page, page one, and
|
||
full text. Now enter $8024 as the address to jump to and save the memory move
|
||
program to disk.
|
||
|
||
Now its time to put all these files tog ether as the final product. Boot a
|
||
normal 48K disk and Bload the following files by typing:
|
||
|
||
]BLOAD ^00-3FFF,A$4000
|
||
]BLOAD MEMORY MOVE $8000,A$8000
|
||
]BLOAD RERUN,A$8024
|
||
|
||
Now make the file run when you brun it by typing:
|
||
|
||
]CALL -151
|
||
|
||
*3FFD:4C 00 80
|
||
|
||
|
||
Now we can save the final product by ty ping:
|
||
|
||
*BSAVE LS 5.0 FASTCOPY,A$3FFD,L$4040
|
||
|
||
Congratulations! You now have deprotect ed the Locksmith fast copy program
|
||
into a file that you may brun a nytime!
|
||
|
||
This technique will work well for depro tection other single load programs
|
||
too! The main advantage to this techniq ue is that you don't have to find the
|
||
starting address of the progra m to restart it. The program will just start up
|
||
from the point where you interrupted it.
|
||
|
||
The only other thing you really must do is determine what parts of memory you
|
||
must save so the program will run. REME MBER, YOU MUST ALWAYS SAVE MEMORY FROM
|
||
$00 TO $2FF FOR THIS PROCESS TO WO RK CORRECTLY! Use the Memory Move Writer to
|
||
rearrange memory so you can s ave it in a normal DOS binary file.
|
||
|
||
If you want further practice in using y our NMI/F8 EPROM hardware, write a
|
||
program in APPLESOFT that some some scr een displaying and interrupt the
|
||
program. Then try and reconstruct it us ing the same technique as described
|
||
above and restart the program.
|
||
|
||
You can save the BASIC program in a Bfi le by saving $00 to $7FF and from $800
|
||
to the end of the program, where e ver that might be (zero page locations $AF
|
||
and $B0 will give you the ending lo cation of a APPLESOFT program, in
|
||
backassward order). You might also have to save some of the variable storage
|
||
for your BASIC program, which lives fro m $95FF down (depending on size). The
|
||
best thing to do is to experiment, and practice makes perfect.
|
||
---------------------------------------
|
||
|
||
|