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