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.