!!!!!!! OCHRONA PROGRAMÓW czytelnia Try2emu

OCHRONA PROGRAMÓW

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żą łą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:

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 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