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.


    Zdroj: Computer Press, ???