__Ochrona programów przed nieautoryzowanym kopiowaniem i rozpowszechnieniem to w głównej mierze problem firm software'owych. Bywa jednak, że i indywidualni użytkownicy komputerów stają przed koniecznością wprowadzenia takich zabezpieczeń do własnych programów.__ W przypadku komputera ZX SPECTRUM jest to sprawa szczególnie skomplikowana. Prostota systemu operacyjnego i jego konstrukcja z jednej strony daje dużą łatwość obsługi, z drugiej jednak pozbawia możliwości zakładania efektywnych zabezpieczeń. W konsekwencji każdy program napisany na SPECTRUM może być „złamany" to znaczy wydrukowany, przeanalizowany i skopiowany. W praktyce odbywa się to w następujący sposób. Pożycza się od kogoś kasetę z interesującym programem, ładuje do komputera program kopiujący i po kilku mi- nutach ma się na taśmie własny egzemplarz identycznie zabezpieczony jak oryginał. W niewielu przypadkach powyższa metoda zawodzi. Poniżej przedstawiam sposób na włączenie Twoich programów do grupy tych nielicznych, które nie poddają się programom kopiującym. Proponowane zabezpieczenie, choć proste w swej idei, do złamania wymaga niezłe] znajomości kodu. maszynowego oraz zasad działania ROM -u. Jest więc całkowicie skuteczne wobec wszystkich tych, którzy bazują jedynie na programach kopiujących i co najwyżej potrafią obezwładniać proste blokady wmontowane w programy BASIC-owe. Na fachowców niestety nie ma żadnej rady. Tym można co najwyżej zabrać więcej czasu. Jest ich na szczęście (?) niewielu i na ogół mają ciekawsze zajęcia niż łamanie Twoich programów. Przystąpmy więc do pracy. Wprowadź do komputera poniższy program i uruchom go instrukcją RUN. ``` 10 REM 100 symboli 20 FOR i=0 TO 9: LET s=0 30 FOR j=1 TO 10 40 READ a: LET s=s+a 50 POKE 23758+10*i+j,a 60 NEXT j: READ a 70 IF a=s THEN PRINT "Linia nr ";200+10*i;" O.K.":GO TO 90 80 PRINT "Linia nr ";200+10*i;" wymaga poprawy.":STOP 90 NEXT i 100 RANDOMIZE USR 23760 110 SAVE "na tasme"CODE 65368,134 120 PRINT "Przewin kaset celem weryfikacji" 130 VERIFY ""CODE 65368,134 200 DATA 33,194,4,17,146,255,1,76,0,237,963 210 DATA 176,33,168,255,34,182,255,33,213,255,1604 220 DATA 34,204,255,33,218,255,54,167,33,247,1500 230 DATA 92,17,88,255,1,57,0,237,176,201,1124 240 DATA 237,75,83,92,42,89,92,175,237,66,1188 250 DATA 34,137,255,42,75,92,237,66,34,140,1112 260 DATA 255,221,33,135,255,17,17,0,205,194,1332 270 DATA 4,42,83,92,34,137,255,33,255,255,1190 280 DATA 43,124,181,32,251,62,240,221,33,0,1187 290 DATA 0,17,0,0,24,2,0,0,0,0,43 ``` (W linii 10 po instrukcji REM umieść naprawdę 100 symboli a nie jedynie ten krótki napis!). Jeżeli pierwszy przebieg programu wykaże, że któraś z linii zawierających dane jest błędna, to możesz mieć kłopoty z wypisaniem tekstu programu na ekranie. Użyj wtedy komendy LIST 20 i nie przejmuj się dziwaczną linią 10. Podobnie, kolejnych uruchomień programu dokonuj instrukcja RUN 20 lub GO TO 20. Teraz usuń linię 10 oraz wszystkie linie o numerach 100 i większych. Zamiast nich wprowadź do komputera poniższe: ``` 10 REM 110 symboli 200 DATA 33,115,8,17,88,255,1,63,0,237,817 210 DATA 176,221,33,88,255,221,54,11,2,42,1103 220 DATA 61,92,221,54,14,3,54,0,221,54,774 230 DATA 32,5,35,221,54,35,6,54,0,221,663 240 DATA 54,42,10,221,54,50,9,221,54,63,778 250 DATA 7,33,86,5,17,152,255,1,82,0,638 260 DATA 237,176,33,46,32,34,233,255,33,195,1274 270 DATA 202,34,235,255,33,5,0,34,237,255,1290 280 DATA 221,33,0,91,17,17,0,62,0,55,496 290 DATA 221,229,205,86,5,221,225,42,83,92,1409 320 DATA 195,88,255,0,0,0,0,0,0,0,538 ``` Ponownie uruchom program przez RUN. Po poprawnym zakończeniu usuń wszystkie linie oprócz pierwszej i nagraj ją na kasetę komendą SAVE „z taśmy". Jeśli nie popełniłeś błędu to jesteś już gotów do za- bezpieczenia każdego programu napisanego w BASIC-u. Najpierw musisz napisać króciutki program ładujący, którego celem będzie wczytanie do komputera Twojego właściwego programu -ewentualnie miłego dla oka zapełnienia ekranu na czas ładowania. Zamiast instrukcji LOAD "nazwa" musisz jednak napisać RANDOMIZE USR 65368. W najprostszym przypadku będzie to wyglądać tak: ``` 10 RANDOMIZE USR 65368 ``` Następnie wczytaj z taśmy instrukcja MERGE "z taśmy" ostatnio skonstruowany blok. Przygotuj kasetę na której ma być umieszczona i zabezpieczona kopia Twojego dzieła i nagraj na nią program ładujący rozkazem SAVE nazwa" LINE 10. Wczytaj do komputera blok kodu maszynowego "na tasme" a następnie własny programy do zabezpieczenia. Nagraj go na przygotowaną kaseta zaraz za programem ładującym rozkazem RANDOMIZE USR 65368. Pamiętaj, że nagrywanie rozpocznie się natychmiast po wciśnięciu klawisza ENTER. Jeśli Twój program wczytuje jeszcze jakieś bloki (np. symbole graficzne definiowanie przez użytkownika to nagraj je na końcu. Program jest już bezpieczny. Na koniec kilka uwag praktycznych. Zanim zabezpieczysz swój program upewnij się, że nie zawiera on żadnych błędów, gdyż w razie wystąpienia jakiegokolwiek natychmiast sam się skasuje. To samo nastąpi przy każdej próbie przerwania go w trakcie wykonywania się jak również w razie wystąpienia błędu podczas wczytywania z kasety do komputera. Po wczytaniu, programu będzie się automatycznie uruchamiał od pierwszej linii. Jeśli Ci to nie odpowiada to przed nagraniem go na taśmę wykonaj z klawiatury rozkazy: ``` POKE 65464,m—256*INT(m/256) POKE 65465,INT(m/256) ``` gdzie m jest numerem linii startowej. Jeśli znasz inne sposoby ochrony programów przed „ciekawskimi" to śmiało je stosuj równolegle z powyższym. Prawdopodobieństwo „tragicznej w skutkach kolizji" jest niewielkie. Im więcej stworzysz barier tym większa szanse, że zniechęcisz potencjalnego pirata do zmagań z Twoim programem. Szczególnie warto popracować nad programem ładującym, by maksymalnie utrudnić jego rozpracowanie. Również i w głównym programie warto umieścić kilka pułapek, mimo że jest on już dosyć skutecznie chroniony. __ANDRZEJ KADLOF__