Protecting your software
From: Michael Current (aa700@cleveland.Freenet.Edu)
Date: 01/28/92-10:37:13 PM Z
From: aa700@cleveland.Freenet.Edu (Michael Current)
Subject: Protecting your software
Date: Tue Jan 28 22:37:13 1992
Reprinted from the A.C.E.C. BBS (614)-471-8559
Bits of BASIC
"Protecting" Your Software
by M. Olin
So. You say you've written a program, and you spent a lot of
hours making it "just right?" You've written some pretty nice
routines that you're quite proud of but you don't want just
anybody to have access to it? Here's a couple of hints that might
help you keep some prying eyes from viewing your work.
DISABLE THE BREAK KEY. The very first line of your program should
look like this:
10 POKE 16,64:POKE 53774,64
Effectively we have told the computer to ignore the fact that the
user is pressing the BREAK key, therefore the user cannot "break
out" of the program and look at your code.
But that's only the beginning. Any Atarian who has had his/her
computer for more than 2 weeks should know that all you'd have to
do is press RESET and we'd be back to Square 1.
COLD STARTING. Add the following command to line 10, making sure
to separate it from the previous commands with a colon (:).
POKE 580,1
Now, whenever the user presses the RESET key, the computer will
act almost as if you had turned to power off and back on again.
In other words, it will "reboot" and the program that was running
will be erased from memory.
So far so good! Now you need a routine that permits the approved
users to have access to your program, but those persons you want
to keep out will have to be "filtered" somehow. A "password"
seems in order here.
19 DIM PASS$(20)
20 INPUT PASS$:IF PASS$<>"Your Password" THEN NEW:END
All persons who are using your program must know the password,
which can be up to 20 characters long. Notice that it is
upper/lower "case sensitive." If they enter it wrong, the program
is erased from memory. Zip. Kaput. Gone. And just to make sure
that "the enemy" can't discover your password by staring over your
shoulder, we're going to make sure that the characters you type
never appear on the screen.
15 X=PEEK(559):POKE 559,0
This command will turn off the chip, called ANTIC, that drives
your monitor. The screen will turn black with no visible text,
and will remain in this state until you turn it back on again,
which you will not do unless the proper password is entered in
line 20. If the correct password is given, then this line will
complete the job:
25 PRINT "<ESC><SHFT-CLEAR>":POKE 559,X
30 REM Your program starts here.
Let's check our progress: The program won't run if they don't
know the password. They can't RESET, and they can't press BREAK
and LIST the program to look at your password. What's left?
We have to find a way to prevent the uninvited user from LOADing
the program and LISTing the lines that contain your password,
since none of the above commands will take effect until after the
program starts running. This part gets a little tricky, so you
will want to type it in EXACTLY as it is written here.
After your program is completed and "debugged" to your
satisfaction, you need to add these lines. Note that your program
must not ever GOTO or GOSUB to these lines.
32761 BOTTOM=PEEK(131)*256+PEEK(130):TOP=PEEK(133)*256+PEEK(132)
32762 FOR X=BOTTOM TO TOP:POKE X,155:NEXT X
32763 FINISH=PEEK(139)*256+PEEK(138):POKE FINISH+2,0:SAVE
"D:filename.ext":NEW
A WORD OF CAUTION: Make sure you SAVE a copy of your program
before you continue with the following instructions. Store this
copy in a safe place as it is the only copy that can ever be
LISTed again. Not even the approved password user can LIST your
program once these routines have been performed so take good care
of this "source" disk!
Ready? Make sure the disk on which you want the "protected"
version of your program is in Drive 1, then type:
GOTO 32761
and press <RETURN>. Here's what happens: the FOR/NEXT loop in
line 32762 will cause all the variable names which are used in
your program (and stored in the Variable Name Table) to be
replaced with CHR$(155), the Atascii carriage return. (Any other
character can be used by placing its appropriate Atascii value in
the POKE statement in line 32762.) When this happens, the program
can no longer be LISTed, nor can it be LOADed! In fact, the only
way to LOAD and RUN this program ever again is by issuing the RUN
"D:filename.ext" command from BASIC.
And there you have it! A reasonably good, but not absolutely
perfect way to "protect" your software.
--
Michael Current, Cleveland Free-Net 8-bit Atari SIGOp -->> go atari8 <<--
The Cleveland Free-Net Atari SIG is the Central Atari Information Network
Internet: currentm@carleton.edu / UUCP: ...!umn-cs!ccnfld!currentm
BITNET: currentm%carleton.edu@interbit / Cleveland Free-Net: aa700
-----------------------------------------
Return to message index