[ Pobierz całość w formacie PDF ]
.Program dla DOS-a pe³ni³by tu rolê programu STUB.Po programie STUB znajduje siê w³aœciwy program przeznaczony dla trybuchronionego, posiadaj¹cy, podobnie jak programy dla DOS, odpowiedniosformatowany nag³Ã³wek.Ró¿ne systemy maj¹ ró¿n¹ strukturê tego nag³Ã³wka, takwiêc infekcja takich programów jest o wiele trudniejsza ni¿ w przypadku plikówprzeznaczonych dla DOS.Komplikacje przy pisaniu wirusów infekuj¹cych takiepliki wynikaj¹ tak¿e ze znacznych ró¿nic, jakie wystêpuj¹ pomiêdzy trybemchronionym, dla którego s¹ one przeznaczone, a trybem rzeczywistym, u¿ywanymprzez DOS.Potencjalny twórca takiego wirusa musi uwzglêdniaæ przy jegoprogramowaniu podstawowe cechy systemów wielozadaniowych: podzia³ i ochronêzasobów, fakt stronicowania pamiêci, po³¹czonego z wymiataniem nie u¿ywanychobszarów pamiêci na dysk (ang.swapping} oraz podzia³ programu na oddzielnebloki danych, kodu i stosu, posiadaj¹cych odpowiednie prawa dostêpu, zawarte wdeskryptorach.Mo¿na powiedzieæ, i¿ bez dobrej znajomoœci trybu chronionegonapisanie wirusa dla nowych EXE jest niemo¿liwe.Dowód na to stanowi stosunkowoma³a liczba wirusów pisanych pod systemy Windows 3.l, Windows 95 czy OS/2 (inn¹wa¿n¹ przyczyn¹ tego stanu rzeczy jest utrudniony dostêp do dok³adnychinformacji o tych systemach).Infekuj¹c pliki nowe EXE (za pomoc¹ opisanej w poprzednim rozdziale metody)musimy na pocz¹tku sprawdziæ, czy rzeczywiœcie jest to plik tego typu.Porównujemy dwa pierwsze bajty pliku z sekwencj¹ 'MZ' lub 'ZM' (na tym etapienie jest wa¿ne, dla jakiego systemu przeznaczony jest plik).Nastêpnie, je¿eliporównanie wypad³o pomyœlnie, nale¿y sprawdziæ, czy na pozycji 18h-19h wnag³Ã³wku starego EXE znajduje siê wartoœæ 40h lub wiêksza.Jeœli tak, to nale¿yspróbowaæ odczytaæ ewentualny nag³Ã³wek nowego EXE, w którym znajduje siêodpowiedni znacznik (dwa znaki ASCII) informuj¹cy o systemie, dla któregoprogram jest przeznaczony.Typowe znaczniki zawarto w poni¿szej tabeli.Znaczniki rozszerzonego nag³Ã³wka nowych plików EXEZnacznikDocelowy systemNEWindows lub OS/2 1.x, z podzia³em na segmentyLEWindows virtual device driver (VxD) z liniowym adresowaniem (Linear Executable)LXWariant LE, u¿ywany przez OS/2 2.xW3Plik WIN386.EXE dla Windows; kolekcja plików LEPEWindows NT lub Win32s (Portable Executable)DLHP 100LX/200LX (Pliki *.EXM)MPStare pliki PharLap (pliki *.EXP)P2PharLap 286 (pliki *.EXP)P3PharLap 386 (pliki *.EXP)4.1.2.2.1.Pliki EXE dla Windows (NE)W przypadku programów dla Windows (znacznik NE) infekcja plików polegaæ mo¿e naodpowiedniej modyfikacji pól nag³Ã³wka NE oraz dodatkowo tablicy segmentówzawartych w programie, któr¹ trzeba rozszerzyæ o segment identyfikuj¹cy miejscew pliku, w którym znajduje siê kod wirusa.Ze wzglêdu na to, i¿ rozszerzenietablicy segmentów wi¹¿e siê z koniecznoœci¹ przesuniêcia ca³ego nastêpuj¹cegopo niej kodu programu (najczêœciej bardzo d³ugiego), jako jedno z rozwi¹zañproponuje siê zmniejszenie rozmiaru programu STUB i przesuniêcie tylkopocz¹tkowej czêœci pliku (w tym wypadku cofniêcie czêœci nag³Ã³wka) w takwygospodarowane miejsce.Format nag³Ã³wka pliku nowy EXE (NE) dla Windows pokazano poni¿ej.Format nag³Ã³wka plików nowy EXE (NE) dla WindowsAdresZawartoœæ00-01znacznik pliku, bajty 'NE'02-03numer wersji programu linkuj¹cego (najpierw bardziej znacz¹ca, potem mniejznacz¹ca czêœæ)04-05offset wzglêdem pocz¹tku nag³Ã³wka do tablicy wejœæ; format tablicy wejœæ jestnastêpuj¹cy 00 liczba wejœæ (00, je¿eli koniec listy)01 numer segmentu (00, je¿eli koniec listy)02 pierwszy rekord05 drugi rekord.Ka¿dy rekord ma format00 flagi:bit 0: EXPORTEDbit 1: SINGLE DATAbity 2-7: nie u¿ywane01-02 ofset w segmencie06-07d³ugoœæ (w bajtach) tablicy wejœæ08-0Bkod korekcyjny (CRC) pliku0Cflagi programu; znaczenie poszczególnych bitów0-1 DGROUP0 = nie ma1 = SINGLE SHARED2 = MULTIPLE (UNSHARED)3 = (NULL)2 bit globalnej inicjalizacji3 program tylko dla trybu chronionego4 program zawiera instrukcje 80865 program zawiera instrukcje 802866 program zawiera instrukcje 803867 program zawiera instrukcje 80x870Dflagi aplikacji; znaczenie poszczególnych bitów:0-2 typ aplikacji001 pe³noekranowa (bez Windows AP! dla trybu chronionego)010 kompatybilna z Windows API dla trybu chronionego011 u¿ywa Windows API dla trybu chronionego 3 aplikacja przeznaczona dla OS/25 0=wykonywalna, 1=b³êdy w obrazie pliku6 niezgodny typ programu (stos nie jest zachowywany)7 plik DLL lub sterownik(SS:SP: z³e wartoœci, CS:IP wskazuje na procedurê incjalizacji typu FAR,wywo³ywan¹ z AX=uchwyt do modu³u, zwracaj¹ca AX=0 b³¹d lub AX0 poprawnainicjalizacja)0E-0Findeks do segmentu danych typu AUTODATA 10-11 inicjalny rozmiar stertylokalnej12-13inicjalny rozmiar stosu, dodany do segmentu danych lub 0000h, gdy DS=SS14-17wejœcie do programu (CS:IP), CS oznacza indeks w tablicy segmentów18-1Bdaleki wskaŸnik na stos programu (SS:SP), SS oznacza indeks w tablicysegmentów; je¿eli SS jest typu autodata i SP=OOOOh, wskaŸnik stosu ustawianyjest na koñcu segmentu danych typu AUTODATA, pod stert¹ lokaln¹1C-1Diloœæ segmentów 1 E-1 F iloœæ odwo³añ do modu³Ã³w20-21d³ugoœæ (w bajtach) nierezydentnej tablicy nazw22-23offset wzglêdem pocz¹tku nag³Ã³wka do tablicy segmentów, sk³adaj¹cej siê zrekordów o formacie (pierwszy rekord ma numer 1):00-01 ofset w pliku (trzeba przesun¹æ o wartoœæ z pola 32-3nag³Ã³wka, aby uzyskaæ adres w bajtach)02-03 d³ugoœæ obrazu pliku (0000h=64K)04-05 atrybuty segmentu0 segment danych1 nie u¿ywane2 REALMODE3 ITERATED4 MOVABLE5 SHARABLE6 PRELOADED7 EXECUTE-CODE (kod) lub READ-ONLY (dane)8 relokacje (bezpoœrednio po kodzie w segmencie)9 istniej¹ informacje dla debuggera10,11 bity DPL dla 8028612 DISCARDABLE13-15 DISCARD PRIORITY06-07 iloœæ bajtów do zaatakowania dla segmentu (0000h = 64K)24-25offset wzglêdem pocz¹tku nag³Ã³wka do tablicy zasobów26-27offset wzglêdem pocz¹tku nag³Ã³wka do tablicy nazw rezydentnych28-29offset wzglêdem pocz¹tku nag³Ã³wka do tablicy odwo³añ do modu³Ã³w2A-2Boffset wzglêdem pocz¹tku nag³Ã³wka do tablicy nazw importowanych (tablica³añcuchów typu string, zakoñczona ³añcuchem o d³ugoœci 0)2C-2Foffset wzglêdem pocz¹tku nag³Ã³wka do tablicy nazw nierezydentnych30-31iloœæ ruchomych punktów wejœciowych zawartych w tablicy wejœæ32-33wyrównanie strony (0=9 strona o rozmiarze 2 shl 9=512 bajtów)34-35iloœæ wejœæ do tablic zasobów36docelowy system operacyjny00h nieznany01h OS/202h Windows03h Europejska wersja MS-DOS 4.x04h Windows 38605h BOSS (Borland Operating System Services)81h PharLap 286IDOS-Extender, OS/282h PharLap 286IDOS-Extender, Windows37dodatkowe flagi programu0 u¿ywa d³ugich nazw plików1 tryb chroniony 2.X2 proporcjonalna czcionka 2
[ Pobierz całość w formacie PDF ]