Zjištění přítomnosti viru v paměti
K tomu, aby nedocházelo k vícenásobné instalaci viru do paměti, musí virus
zjistit, zda je již v paměti přítomen či nikoliv.
Vytvoření nové služby přerušení
Možností, jak zjistit přítomnost viru v paměti je několik, nicméně tato metoda je
nejpoužívanější a dá se velice dobře využít pro psaní obecných rezidentních programů.
Nová služba příslušného přerušení bývá v naprosté většině případů vytvářena v rámci volání
jádra DOSu (přerušení int 21h).
Následuje ukázka mechanismu viru Pojer. Volání přerušení 21h předpokládá číslo
požadované služby v registru AH.
mov ah, 0ffh ; cislo sluzby (test pritomnosti viru)
int 21h ; vlastni volani DOSu
cmp ax, 1234h ; byl vracen klic pritomnosti ?
jne neni_pritomen ; skok na rezidentni instalaci
jmp je_pritomen ; instalace se jiz provadet nebude
Po této sekvenci příkazů virus zjistí, zda se má instalovat do paměti, či zdali je již
v paměti přítomen. Princip spočívá ve skutečnosti, že za normálních okolností služba DOSu
číslo 0ffh neexistuje, a tudíž operační systém zareaguje pouze chybově, tj. vrátí v registru
AX nedefinovanou hodnotu s případným nastavením chybového příznaku CF. Je-li již však virus
v paměti přítomen, sám "vytvoří" novou službu tohoto přerušení tak, že na volání služby DOSu
0ffh bude vracet návratovou hodnotu (klíč přítomnosti) 1234h v registru AX. Virus tedy přesměruje
obsluhu přerušení int 21h na své tělo, které na počátku obsluhy zjišťuje, zda není požadovaná
právě nově vytvořená služba.
obsluha_int_21h:
cmp ah, 0ffj ; jedna se o test pritomnosti ?
jne pokracuj ; ne, pokracuje obsluha int 21h
mov ax, 1234h ; ano, nastavi klic pritomnosti
iret ; navrat z preruseni
pokracuj:
; dalsi sled instrukci
Samozřejmě, že i tato metoda má svá úskalí. V okamžiku, kdy dva různé viry použijí stejné číslo
nově vytvořené služby, dojde ke kolizi a tím k možnosti vícenásobné instalace. Obecnější možností
je použít místo registru AH obsah celého registru AX. V tom případě se pravděpodobnost kolize zmenší
na minimum.
Využití volných uživatelských přerušení
Existuje několik volných přerušení kolem int f5h, která jsou operačním systémem vyhrazena pro potřeby
uživatele. Virus má možnost obsadit některé z nich pro své účely. Tuto metodu však nelze doporučit jako
bezpečnou, neboť pravděpodobnost kolize s jiným programem, který využije stejné přerušení, je dosti velká.
Případné použití má však tu výhodu, že se virus či program nemusí starat o úschovu adresy původní obsluhy,
neboť ta v tomto případě neexistuje.