                                         ;                                      
              Start   MOV #6,Dlugosc     ;dīugoõē wirusa do Dlugosc             
                      MOV #100,Cel       ;adres docelowy do Cel                 
              Kopiuj  MOV @Dlugosc,<Cel  ;kopiuj wirus od końca                 
                      DJN Kopiuj,Dlugosc ;...powtarzaj, až Dlugosc=0            
                      JMP @Cel           ;skocz do przekopiow.kodu              
              Cel     DAT 0              ;                                      
                      END Start                                                 
                                                                                
Dwie  pierwsze  instrukcje  wirusa  īaduję jego dīugoõē i adres, do którego - od
końca  - kopiowany bździe program.  Īadowanie tych parametrów (a w szczególnoõci
dotyczy to dīugoõci) musi byē wykonane przez instrukcje MOV, gdyž gdybyõmy je po
prostu  zadeklarowali  jako  dane, to po przekopiowaniu okazaīoby siź, §e ulegīy
one  zmianie.   Wynika  to  stęd,  že  pźtla Kopiuj (bźdęca zresztę najciekawszę
czźõcię  kodu  "bliūniaków") dekrementuje wspomniane dane Dīugoõē i Cel.  O tym,
že  w  zmiennej  Dlugoõē  wskazane jest podanie nieco wiźkszej dīugoõci, powiemy
sobie   póūniej.    Na   razie   jednak   przyjrzyjmy   siź   wirusowi  znacznie
agresywniejszemu,  niž "bliūniaki", a mianowicie programowi "commando", opartemu
na pomyõle samego Dewdneya [3].                                                 
                                                                                
                                         ;"commando"                            
              Dlugosc DAT 0              ;                                      
              Stoper  MOV #0,-2          ;                                      
                      JMP Stoper         ;                                      
              Start   SPL Stoper         ; uruchom stoper skoczków              
                      MOV Imp,115        ; skopiuj wīasnego skoczka             
                      SPL 114            ; uruchom go                           
                      MOV #12,Dlugosc    ; zaīaduj dīugoõē                      
                      MOV #100,Cel       ; zaīaduj cel                          
              Kopiuj  MOV @Dlugosc,<Cel  ; kopiuj siź                           
                      DJN Kopiuj,Dlugosc ; ....                                 
                      JMP 93             ; skocz do skopiowanego kodu           
              Imp     MOV 0,1            ;                                      
              Cel     DAT 0                                                     
                      END Start                                                 
                                                                                
Program  ten  rozpoczyna  siź  uruchomieniem  stopera  skoczków ("imp stomper").
Nastźpnie  przesyīa  "skoczka"  115  komórek  za  instrukcję  przesyīajęcę  (MOV
Imp,115),  po  czym  uruchamia  go.   W  dalszej  czźõci swojego kodu "commando"
kopiuje  siź  w  taki  sposób,  aby  kopia  znalazīa  siź  tuž przed skopiowanym
skoczkiem.   Przez  skok  na poczętek skopiowanego kodu operacja powtarza siź od
nowa.   Strategia  tego wirusa jest ciekawa.  Wysīany "skoczek" ma stratowaē kod
przeciwnika i zmusiē go do wykonywania instrukcji MOV 0,1.  Na "skoczka" z kolei
zastawiona  jest  puīapka  w  postaci  "imp  stompera".   Dziźki tej oryginalnej
strategii  podobny  program  zajęī  wysokę  lokatź na I Miźdzynarodowym Turnieju
Wojen  Rdzeniowych  w  1985 roku (patrz rozdziaī 2).  Pierwsze miejsce otrzymaīy
wówczas  "myszy"  napisane  przez Chipa Wendella.  Warto temu wirusowi poõwiźciē
nieco uwagi.                                                                    
                                                                                
                                         ;"myszy" ("mice")                      
              Dlugosc DAT 0              ;                                      
              Start   MOV #12,Dlugosc    ; īaduj dīugoõē+5 do Dlugosc           
              Kopiuj  MOV @Dlugosc,<Cel  ; kopiuj siź                           
                      DJN Kopiuj,Dlugosc ; ....                                 
                      SPL @Cel           ; uruchom przesīany kod                
                      ADD #653,Cel       ; zmień adres docelowy                 
                      JMZ Start,Dlugosc  ; jeõli nic nie wdepnźīo na            
                                         ; poczętek programu -> Start           
              Cel     DAT 833            ; w przeciwnym wypadku zabij           
                      END Start          ; siź.                                 
                                                                                
Autor  tego  programu, po przeanalizowaniu wielu wirusów, doszedī do wniosku, že
jedynym  skutecznym  sposobem  na  przetrwanie  wojownika  na  rdzeniu jest jego
intensywne  rozmnažanie.   Efektem  tego  sę  "myszy",  które  nawet  w  trakcie
bombardowania  przeciwnika  nie  przerywaję  kopiowania siź.  Autor osięgnęī ten
efekt przez sztuczne zwiźkszenie dīugoõci kopiowanego kodu.  "Myszy", kopiujęc o
5  komórek  wiźcej  niž  wynosi  ich  dīugoõē, liczę na to, že instrukcje DAT 0,
którymi   wypeīniony   jest  niezapisany  przez  wirusy  rdzeń,  spadnę  na  kod
przeciwnika i go uszkodzę.  "Myszy" posiadaję takže bardzo chytre zabezpieczenie
przed stratowaniem przez "skoczka".  Po operacji kopiowania zmienna Dlugosc musi
wynosiē  0 (w polu danych).  Gdyby na to miejsce wkroczyī "skoczek", pole danych
zmiennej Dlugosc zmieniīoby siź na 1.  Ježeli zatem instrukcja JMZ Start,Dlugosc
wykaže, iž Dlugosc równa siź zero, wówczas operacja samopowielania powtarza siź.
Natomiast  ježeli  Dlugosc  siź  zmieni,  wykonywana  jest samobójcza instrukcja
znajdujęca  siź  pod  etykietę  Cel.  Proces woli zginęē niž zostaē "skoczkiem".
"Myszy"  sę  bez  wętpienia  najlepsze  w klasie wirusów krótkich, zresztę tylko
takie jest sens tutaj prezentowaē.  Nie oznacza to naturalnie, že dīužsze wirusy
(kilkadziesięt  linii)  maję  wiźksze szanse w walce z "myszami", szczególnie na
maīym  rdzeniu.   Niewykluczone  tež,  že  možna napisaē krótkiego wirusa, który
potrafiīby  pokonaē  "myszy".  Jeden z moich zawodników - "lemingi", notorycznie
remisujęcy z myszami", jest z pewnoõcię na dobrej drodze...                     
                                                                                
                              ;"lemingi"                                        
        Dlugosc  DAT 0        ;                                                 
        Start    SPL Imp      ;uruchom produkcjź "skoczków"                     
        MOV #25,Dlugosc       ;īaduj dīugoõē z nadmiarem                        
        ADD #666,Cel          ;īaduj adres docelowy                             
Kopiuj  MOV @Dlugosc,<Cel     ;kopiuj siź                                       
        DJN Kopiuj,Dlugosc    ;....                                             
        SPL @Cel              ;uruchom przekopiowany kod                        
        SPL Start             ;uruchom siź od nowa (proces)                     
        MOV Bomba,@BombCel    ;bombarduj tyīy                                   
        SUB #10,BombCel       ;zmień cel ataku                                  
        BombCel JMP -2,-100   ;repetuj/deklaracja zmiennej                      
        Bomba   SPL 0         ;bomba spowalniajęca                              
        Cel     DAT 0         ;                                                 
        Imp     SPL 2         ;"fabryka skoczków"                               
        JMP Imp               ;                                                 
        MOV 0,1               ;                                                 
        END Start                                                               
                                                                                
Wirus  ten rozmnaža siź podobnie jak "myszy" - przez natychmiastowe uruchomienie
przekopiowanego  kodu,  a  takže,  równiež  podobnie  jak "myszy" kopiuje liczbź
komórek  wiźkszę  niž  wynosi  jego  dīugoõē (15 wīasnych + 10 komórek rdzenia).
Jednakže "lemingi", w przeciwieństwie do "myszy", bynajmniej nie brzydzę siź tak
"skoczkami",  ažeby  wobec  groūby  stratowania,  unicestwiaē  jeden  ze  swoich
wīasnych  procesów.   "Skoczki" stanowię podstawź strategii tego wirusa.  Ma byē
ich tak dužo, že rozmnažane w podobny sposób jak "myszy", po prostu zaleję rdzeń
i  to  w  barwach  obydwu  przeciwników.   Umožliwia to mechanizm nazywajęcy siź
"fabrykę skoczków" ("imp factory" lub "spew").  Interesujęcy jest takže nowy typ
bomby  -  instrukcja  SPL  0.   Wykonanie  tej  instrukcji  spowoduje, že proces
uruchamiajęcy  podzieli  siź  na  dwa mīodsze, przy czym jeden z mīodszych znowu
podzieli  siź  na dwa mīodsze, až caīa operacja powtórzy siź 64 razy, gdyž tylko
tyle  podprocesów  može  mieē  proces uruchamiajęcy (Core War Standards '86).  O
tym,  že  64-ty  podziaī  zabija  dany  proces,  možna siź īatwo przekonaē przez
uruchomienie  instrukcji  SPL  0  jako  samodzielnego wirusa (128-my cykl bździe
ostatni...).   W  rezultacie  uruchomienia  takiej  bomby,  wrogi proces - zanim
zginie po swoich nieustannych podziaīach - bździe siź wykonywaē 64 razy wolniej.
                                                                                
Jak  widaē, assembler Redcode pomimo swojej prostoty ma ogromne možliwoõci.  To,
co  zostaīo  przedstawione  w tym artykule, to zaledwie przysīowiowy wierzchoīek
góry  lodowej.  Doõwiadczeni gracze wcięž znajduję nowe chwyty i techniki walki.
Najciekawsze  wirusy potrafię odnaleūē program przeciwnika, podsunęē mu zabójcze
puīapki  czy  wrźcz  nakazuję wykonanie wīasnego kodu w czasie przewidzianym dla
wroga.   Niektóre  z  nich  maję  možliwoõē  nie  tylko  reprodukcji,  ale nawet
regeneracji  uszkodzonych  czźõci.   Na  koniec  przedstawiź trick umožliwiajęcy
bardzo  szybkie  odszukanie  i  zniszczenie jakiejkolwiek instrukcji z niezerowę
zawartoõcię   pola   danych,   a   czźsto  i  skoczka.   Ciekawostkę  jest  fakt
nieskorzystania z instrukcji CMP:                                               
                                                                                
                      DJN 0,<2    ;                                             
                      DJN 0,@1    ;                                             
                      JMP -2,-3   ;                                             
                                                                                
Skutecznoõē  tego chwytu wobec atakujęcego skoczka jest dokīadnie taka sama, jak
w  przypadku  "imp  stomper'a", czyli uzaležniona od losowej odlegīoõci pomiźdzy
wirusami,  iloõci  procesów  etc.  Natomiast innę korzyõcię wynikajęcę z takiego
rozwięzania,  tym  razem niezaležnę od ustawienia programów na rdzeniu, jest to,
že wszelkie zmienne przeciwnika sę caīkowicie zerowane.  Trick ten može byē wiźc
z  powodzeniem  wykorzystywany jako stoper skoczków lub dodatek "uszczelniajęcy"
klasyczny stoper skoczków i zarazem bomba kasujęca dane wroga.                  
                                                                                
5. Zakończenie.                                                                 
                                                                                
Wojny  rdzeniowe sę doskonaīę zabawę.  Obserwacja swojego wojownika, rzuconego w
wir  žywioīowej  walki,  naprawdź  sprawia  dužę  przyjemnoõē.   Core War jest z
pewnoõcię  elitarnę  formę rozrywki (jak to czźsto bywa tam, gdzie trzeba trochź
pomyõleē) i wīaõnie dlatego poleciībym ję nie tylko tym, którzy chcę siź pobawiē
ciekawę  grę  w  dīugie  noce, ale takže tym nielicznym, którzy piszę paskudztwa
innego   rodzaju.    Ježeli  pisanie  wirusów  komputerowych  ma  byē  dla  nich
sprawdzianem  umiejźtnoõci,  to  powinni  zaczęē od Core War.  W tej grze znajdę
prawdziwę walkź bez najmniejszej szkody dla ludzkiej pracy.  Niestety nie jestem
pewien aktualnoõci swoich danych na temat polskiej sekcji International Core War
Society.  Nie udaīo mi siź nawięzaē kontaktu z tę organizację w Polsce.  Dlatego
tež  angielsko-jźzycznym  czytelnikom  chcęcym na biežęco õledziē nowinki w Core
War  przedstawiam  dwa  adresy.   Piszęc na pierwszy z nich, mogę zaprenumerowaē
czasopismo  rdzeniowców "The Core War Newsletter".  Drugi adres jest kontaktem z
szefem I.C.W.S., Markiem Clarksonem (wg [3]):                                   
                                                                                
   1. "The Core War Newsletter"     2. "International Core War Society"         
      William R.Buckley                Mark Clarkson                            
      5712 Kern Drive                  8619 Wassall Street                      
      Huntington Beach                 Wichita                                  
      Calif. 92649                     Kan. 67210-1934                          
      U.S.A.                           U.S.A.                                   
                                                                                
6. Literatura.                                                                  
                                                                                
[1]  Scientific American, 5/84                                                  
[2]  Scientific American, 3/85                                                  
[3]  Scientific American, 1/87                                                  
[4]  Core War Forum, 11/88                                                      
[5]  Core War Forum, 3/89                                                       
[6]  Komputer, 9/87                                                             
                                                                                
Od  Zibiego:   Ježeli  chcielibyõcie spróbowaē swych siī w tej lecz niestety jej
nie  macie  to  možecie  ję  znaležē  na  pierwszym dysku Zasmashki #1 jako samo
rozpakowujęcy  siź plik.  Jest tam mnóstwo przykīadów innych wojowników.  Ježeli
nie  macie  jednak  Zasmashki, možecie przysīaē do mnie list z dyskiem i kopertę
zwrotnę.                                                                        
                                                                                
                                                                                
                                                                                
                                                                                
