Virusas (programa)

Istorija

Pirmą kartą (1949 m.) programos – viruso, t. y. kompiuterinės programos, galinčios pasidauginti, modelį pateikė ir Džonas fon Noimanas (John fon Neumann). Pirma programa, kuri turėjo kompiuterinio viruso bruožų, buvo žaidimas „Darwin“, kurį 6-ajame dešimtmetyje sukūrė kompanijos Bell Laboratories darbuotojas M. Duglas Makilroi.
Yra žinoma, kad pirmosios virusų pobūdžio programos buvo kuriamos (kaip įdomus uždavinys) dar XX a. 7-ajame dešimtmetyje. Pirmas virusas, plitęs per diskų įkrovos sektorius buvo 8-ojo dešimtmečio viduryje sukurtas „Hipboot“. Šis virusas plito Data General „Nova“ kompiuteriuose ir buvo skirtas programinės įrangos atnaujinimui. Pirmoji nekontroliuojamai besidauginusi žalinga programa (kirminas) buvo sukurta Xerox Palo Alto laboratorijose 1980 m. Ši programa buvo skirta naudingam kompiuterių panaudojimui prastovų metu, tačiau nebuvo įvertinta galima jos žala.
Pirmas žinomas „laukinis“ virusas (plitęs tarp paprastų kompiuterių) buvo Apple II kompiuterių virusas „Elk cloner“. Jį 1982 m. parašė Rich Skrenta. Šis virusas plito lanksčiais diskeliais. Virusas užkrėsdavo Apple DOS 3.3 operacinę sistemą ir kiekvieną kartą užkraunant kompiuterį iš diskelio virusas pasileisdavo. Jis netrukdė dirbti su kompiuteriu, tik stebėdavo sistemos darbą su diskais užkrėsdamas kiekvieną, dar neužkrėstą, diskelį. Virusas nepadarydavo didesnės žalos (nors manoma, jog jis galėjo gadinti diskelius, kuriuose būdavo kita operacinė sistema), tik kas penkiasdešimtą sistemos įkrovą pateikdavo tokį eilėraštį:
Elk Cloner: The program with a personality

 

It will get on all your disks

    It will infiltrate your chips

        Yes it's Cloner! 

It will stick to you like glue

    It will modify ram too
Virusas nebuvo labai sudėtingas, tačiau jis sėkmingai plito, nes daugelis žmonių tuo metu net neįsivaizdavo apie tokią grėsmę, nebuvo būdų kaip patikrinti diskelius ar pašalinti virusą. Pašalinti būdavo galima tik rankiniu būdu, tačiau tai galėdavo atlikti tik atitinkamos specializacijos kompiuterių specialistai.
Didelis susidomėjimas virusais (užkrečiančiais kitas programas) kilo, sukūrus virtualių mašinų programavimo žaidimą, 1983 metais išspausdintą Scientific American žurnale. Įvairios šio žaidimo versijos programuotojų tarpe gana populiarios iki šiol. Pirmas įprastus kompiuterius užkrečiantis ir smarkiai paplitęs virusas „Brain“ buvo sukurtas 1986 Pakistane. Šio viruso kūrėjai apkrėstų kompiuterių savininkams siūlė komercines viruso išnaikinimo paslaugas. Vėliau virusus ėmė kurti programuotojai, susidomėję uždavinio sudėtingumu bei netrivialiu programavimu. 1999 metais, Internete pasirodžius Melissa kirminui (dar žinomam, kaip „lamerių virusas“), buvo įsitikinta, kad besidauginančias programas gali rašyti net labai prastos kvalifikacijos programuotojai, virusų kūrimas tapo neprestižiniu uždaviniu. Šiuo metu pilnaverčiai virusai yra gana menkai paplitę, dažniausiai pasitaiko paprastesni kirminai.
Be ginčų apie pirmąjį kompiuterinį virusą netyla diskusijos ir dėl pirmo termino „kompiuterinis virusas“ pavartojimo. Dar 1970 m. viduryje Deivid Gerrold mokslinės fantastikos romane „When H.A.R.L.I.E was One“ (Kai H.A.R.L.I.E buvo išrinktuoju) buvo išgalvotos kompiuterinės programos aprašymas, pavadintos VIRUS, kuri veikė taip, kaip tikrasis virusas. Džonas Braneris (John Brunner) 1975 m. romane „Shockwave riders“ aprašė programas, kurios sklido tinklais trindamos duomenis. Terminas „kompiuterinis virusas“ 1982 m. buvo naudojamas ir komikse „Uncanny X-Men“ (Šiurpieji X-Men‘ai). Vis dėlto pirmą kartą terminas „kompiuterinis virusas“ moksliniame leidinyje buvo panaudotas Fred Cohen straipsnyje „Experiments with Computer Viruses“ (Eksperimentai su kompiuteriniais virusais).

Programavimas

Dauguma pilnaverčių virusų yra rašomi asembleriu, nors kai kada naudojamos ir kitos kalbos – Paskalis, C, Forth. Tipiškais atvejais virusas yra gana nesudėtingą logiką turinti programa, kuri nukopijuoja savo pačios vykdomąjį kodą į kitos programos vykdomąjį failą bei pakeičia tos programos kodą taip, kad prieš vykdant programą, būtų įvykdytas virusas.
Dėl vykdymo specifikos daugeliui virusų būdinga tipiška instrukcijų seka:
CALL NEXT       ; procedūros iškvietimas, steke atsiduria sekančios instrukcijos adresas
NEXT: POP DX    ; DX registre atsiduria einamasis adresas
...             ; pagal DX esantį adresą tolimesnis kodas gali būti kopijuojamas
Sudėtingesniais atvejais, virusuose būna panaudojamas ir save modifikuojantis kodas, priemonės, skirtos viruso maskavimui ir pan. Kai kuriems virusų kūrimo aspektams reikalingas itin gilus specifinės OS ir procesoriaus funkcijų išmanymas. Sudėtingų virusų kūrimas yra laikomas vienu iš netrivialiausių programavimo uždavinių.