![]() |
![]() |
|
Zjištění přítomnosti viru v pamětiK 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). 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. |
||
![]() |
![]() |