W przypadku komputera ZX SPECTRUM jest to sprawa szczególnie skomplikowana. Prostota systemu operacyjnego i jego konstrukcja z jednej strony daje dużą łątwość 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 minutach 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 zabezpieczenia 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:
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 tamo nastąpi przy każdej próbie przerwania go w trakcie wykonywania sie 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
0