|The Atari SIG Historical Archive|
|Created and hosted by: atarimax.com|
|[ HOME | GO ATARI | 8-BIT | ST/TT | PORTFOLIO | LYNX | JAGUAR | LIBRARY ]|
Article #8 (51 is last): Newsgroups: freenet.sci.comp.atari.product.8bit.tricks From: aa700@cleveland.Freenet.Edu (Michael Current) Subject: Protecting your software Posted-By: xx004 (aa700 - Michael Current) Reply-To: aa700@cleveland.Freenet.Edu (Michael Current) 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 "
":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 . 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: firstname.lastname@example.org / UUCP: ...!umn-cs!ccnfld!currentm BITNET: currentm%carleton.edu@interbit / Cleveland Free-Net: aa700