SPOSOBY OCHRONY

Temat zwalczania piractwa komputerowego jest tak stary jak same komputery. W krajach o rozwiniętej komputeryzacji istnieją odpowiednie przepisy służące ochronie praw autorskich programistów. Nawet najdoskonalszy przepis nie zapobiegnie jednak "koleżeńskiej" wymianie programów. Dlatego też wymyślono różne zabezpieczenia mające uniemożliwić kopiowanie.

Programy dla komputerów Atari występują w trzech formach: na kasecie, na dyskietce lub w module ROM (cartridge). Każda z tych form ma specyficzne cechy i wymaga odrębnego sposobu zabezpieczania. Opiszę je więc kolejno, a na końcu przedstawię sposoby ochrony wspólne dla wszystkich nośników.

PROGRAMY KASETOWE

Początkowo wystarczyło, że programy kasetowe (i dyskowe) uruchamiały się samoczynnie po wczytaniu oraz były odporne na klawisze BREAK i RE- SET. Jest to bardzo proste do wykonania, a nie pozwala na skopiowanie. Z chwilą pojawienia się pierwszego programu kopiującego sprawa znacznie się skomplikowała.

Bez zagłębiania się w szczegóły wystarczy powiedzieć, że zabezpieczenie programów kasetowych polega na zapisie w blokach o niestandardowym formacie. Pierwszy blok zawiera wtedy program modyfikujący procedury odczytu z magnetofonu i odczytujący pozostałe bloki. Modyfikacje te są bardzo różne i doskonalenie programów kopiujących nie zawsze nadąża za ich rozwojem.

Niestety, program nagrany na kasecie zawsze można skopiować przy użyciu dwóch zwykłych magnetofonów. Między innymi dlatego na kasetach mniej jest programów i zwykle wersje kasetowe są uboższe od dyskowych.

CARTRIDGE

Moduł ROM (cartridge) jest to układ pamięci EPROM (czasem ROM), w którym zapisany jest program. Najprostszą metodą skopiowania takiego programu jest przepisanie go do zbioru, który wczytuje się w to samo miejsce w pamięci, jakie zajmuje cartridge. Ochrona przed tym sposobem jest stosunkowo prosta. Wystarczy, że program wpisuje coś w obszar, który sam zajmuje. Do pamięci ROM nie da się nic wpisać, więc oryginał będzie działał normalnie. Natomiast ten sam program wczytany z kasety lub dyskietki do pamięci RAM komputera będzie uszkadzał sam siebie.

Program zapisany na cartridge'u można także skopiować przepisując jego zawartość do innego EPROM-u. Wymaga to jednak posiadania programatora i ze względu na koszt układów EPROM jest stosunkowo drogie. Poza tym skopiowany program jest nadal zabezpieczony przed dalszym kopiowaniem i to w tym samym stopniu, co oryginał.

Dodatkową zaletą jest trudność uszkodzenia takiego programu oraz skrócenie do minimum czasu potrzebnego na jego uruchomienie. Z tych powodów rozpowszechnianie programów na cartrid- ge'ach jest na razie najlepszym sposobem ich zabezpieczania. Może właśnie dlatego tak mało jest w Polsce programów w tej formie.

PROGRAMY DYSKOWE

Pierwsze zabezpieczenia programów zapisanych na dyskietkach polegały na uniemożliwieniu skopiowania przy pomocy DOS-u. DOS 2.0, w którym zapisana była większość programów, posiada funkcje kopiowania zbiorów (C — Copy file i O — Dupli- cate file) oraz funkcję powielania dyskietki (J — Du- plicate disk). Wszystkie te funkcje korzystają ze spisu zawartości (directory) i mapy sektorów (VTOC).

Sposób ochrony programu narzuca się sam. Wystarczy przenieść directory i VTOC w inne miejsce i standardowy DOS już nic nie odczyta. Wykonanie tej operacji polega na zmianie zawartości czterech bajtów DOS-u i jest prymitywnie proste. Zabezpieczony w ten sposób program może składać się z wielu części, a nawet może zapisywać coś na własnej dyskietce oraz na dyskietkach sformatowanych przez siebie.

Gdy powstały programy kopiujące dyskietkę sektor po sektorze, zabezpieczenie to przestało być skuteczne. Wymyślono więc wadliwe sektory (znane powszechnie pod angielską nazwą "bad sec- tors"). Sektor taki zapisywany przy zmniejszonej prędkości obrotowej napędu dyskowego, co powoduje gęstsze zapisanie poszczególnych bajtów. Na normalnej stacji nie da się tego wykonać i oczywiście odczytać. Chroniony program po uruchomieniu próbuje dokonać odczytu tego sektora. Jeżeli się nie uda, to wszystko jest w porządku. Jeśli tak, to znaczy, że dyskietka nie jest oryginalna i program zawiesza się.

Oczywiście i na to jest rada. W odpowiednich miejscach na dyskietce należy zapisać wadliwe sektory i kopia działa. Dokonać tego można po drobnej przeróbce stacji dysków — może to zrobić każdy, kto umie się posługiwać lutownicą i wie jaka to przeróbka. Pojedyncze wadliwe sektory można zapisać nawet bez takiej przeróbki.

Ostatnim, najnowszym pomysłem są tzw. sektory nieokreślone (misassigned sectors). Aby zrozumieć na czym to polega, trzeba nieco bliżej przyjrzeć się dyskietce. Powierzchnia dyskietki jest podzielona na współśrodkowe okręgi zwane ścieżkami. Z kolei każda ścieżka podzielona jest na odcinki, które nazywamy sektorami. Na dyskietce zafor- matowanej przy pomocy DOS 2.0 jest ich 18. Poza tym na ścieżce znajduje się jeszcze jeden mniejszy odcinek, w którym zapisany jest numer ścieżki, znak jej początku i inne ważne dla stacji informacje.

Każdy sektor zawiera 128 bajtów danych (programu), które można normalnie zapisywać i odczytywać oraz 44 bajty identyfikacyjne, które są wykorzystywane wyłącznie przez wewnętrzny kontroler stacji dysków. Te 44 bajty stanowią klucz do nieokreślonych sektorów. Zawierają one następujące informacje:

  1. numer sektora
  2. numer ścieżki
  3. sumę kontrolną sektora (CRC)
  4. znak początku danych (data mark)
  5.  znak zapełnienia sektora

Sektory nieokreślone są tworzone przez zmianę bajtów identyfikacyjnych w sposób niemożliwy do uzyskania w normalnej stacji dysków. Ze względu na dokonaną zmianę rozróżniamy trzy rodzaje nieokreślonych sektorów: z błędną sumą kontrolną (CRC error), z błędnym znakiem danych (bad data mark) i sektory podwójne (duplicate sectors).

Zastosowanie •dwóch pierwszych rodzajów nieokreślonych sektorów jest podobne do sektorów wadliwych, lecz zawartość sektora jest przy tym odczytywana Program może więc sprawdzać błąd przy odczycie sektora, jak i poprawność jego zawartości. Nieco inaczej działają sektory podwójne.

Normalne sektory na ścieżce mają kolejne numery od 1 do 18. Z sektorami podwójnymi mamy do czynienia wtedy, gdy numery sektorów zostaną zmienione w ten sposób, że dwa z nich mają taki sam numer. Załóżmy, że na dyskietce są dwa sektory o numerze 10. W jednym z nich umieszczona jest jakaś informacja (np. część programu), a w drugim same zera (lub inne informacje). Zabezpieczony w ten sposób program odczytuje sektor nu-

mer 10 i umieszcza go w buforze, następnie odczytuje po raz drugi sektor 10 i zapisuje w innym buforze. Teraz bufory te są porównywane. Jeśli zawartość ich jest różna, to program jest kontynuowany. Gdy oba bufory mają jednakową zawartość, to znaczy, że dyskietka nie jest oryginalna i program się zawiesza.

Skopiowanie tak zabezpieczonych programów jest również możliwe. Konieczna jest jednak do tego celu specjalnie przerobiona stacja dysków. Musi ona posiadać zmieniony system operacyjny, a to wymaga wymiany układów pamięci stałej (ROM) wewnątrz stacji.

ZABEZPIECZENIA PROGRAMOWE

Zupełnie odrębną metodą, niezależną od zastosowanego nośnika, jest zabezpieczenie programu tzw. kluczem. Jest to kilka zwykłych rezystorów zamontowanych w standardowej wtyczce do joysticka i zalanych żywicą. Przed uruchomieniem programu należy taki klucz umieścić w gnieździe joysticka. Program odczytując wewnętrzne rejestry joysticków i potencjometrów sprawdza, czy w gnieździe znajduje się właściwy klucz.

Sposób ten jest dość niewygodny, gdyż producent musi do każdego klucza dopasować wartości w programie. Zwiększa to także koszty, a więc i cenę programu. Na dodatek stosunkowo łatwo można odczytać wartości podawane przez klucz przy pomocy prostego programu w Basicu i wykonać jego kopię. Oczywiście można wyprodukować klucz, który działałby dopiero z właściwym programem, lecz koszt jego byłby bardzo duży.

Innym sposobem ochrony programowej jest wpisywanie w jakimś miejscu programu (lub w kilku miejscach) jego numeru seryjnego. Nie zabezpiecza to wprawdzie przed skopiowaniem, lecz pozwala na natychmiastową identyfikację pirata. Sposób ten jest jednak kłopotliwy, gdyż wymaga prowadzenia dokładnej rejestracji wszystkich nabywców. Z tego właśnie powodu jest bardzo rzadko stosowany. W Polsce, ze względu na brak ochrony prawnej oprogramowania, wykrycie osobnika, który skopiował program, ma tylko znaczenie moralne.

Wszystkie wcześniej opisane zabezpieczenia mają jedną zasadniczą wadę. Przy pewnej znajomości języka, w jakim został napisany program, można dokonać zmian w tym programie i umożliwić jego działanie nawet po skopiowaniu. Aby to utrudnić często stosuje się ukrywanie treści programu. Na przykład najpierw wczytywany jest co drugi bajt, a reszta uzupełniana jest później albo właściwy kod uzyskuje się po wykonaniu operacji EOR, AND i/ lub OR na odczytanych danych. Oczywiście przedłuża to tylko czas potrzebny na skopiowanie, lecz nie uniemożliwia go.

PERSPEKTYWY

Podstawowe pytanie brzmi następująco: czy można stworzyć program całkowicie niekopiowalny? Oczywiście odpowiedź musi być negatywna — takiego programu nie ma i nie będzie. Na każdy rodzaj zabezpieczenia znajdzie się jakiś sposób, jest to tylko kwestią czasu. Z drugiej strony zabezpieczenia uniemożliwiają legalnemu nabywcy wykonanie kopii bezpieczeństwa. W takim razie po przypadkowym zniszczeniu lub uszkodzeniu programu trzeba się zwracać do producenta o wymianę. Poza tym niektóre zabezpieczenia utrudniają korzystanie z programu. Użytkownicy stacji dysków LDW Super 2000 wiedzą, że nie wszystkie programy można z tej stacji uruchomić. Posiada ona własną obsługę błędów i często zawiesza się po napotkaniu na zabezpieczenia. Trzeba również pamiętać, że zabezpieczenie programu także kosztuje i w pewnej chwili może dojść do sytuacji, w której zabezpieczenie będzie droższe niż zabezpieczony program. Dlatego wielu programistów rezygnuje całkowicie z zabezpieczeń. Do tego potrzebne jest jednak przede wszystkim odpowiednie prawo chroniące ich interesy.

Wojciech Zientara