Skenery uvnitř
Na počátku éry skenerů byla využívána metoda, vyhledávající viry na základě skupiny (sekvence, řetězec) instrukcí, které byly pro daný virus typické. Jednoduše řečeno, virová databáze byla naplněna sekvencemi známých virů a skener tyto sekvence vyhledával v jednotlivých souborech, popřípadě systémových oblastech disku. Pokud byla sekvence z virové databáze totožná se sekvencí v souboru, skener ho považoval za infikovaný, což oznámil i uživateli. Pro spolehlivější detekci s minimem falešných poplachů používaly některé antivirové programy více sekvencí pro detekci jednoho viru. Vedlejším efektem je v tomto případě i vyšší schopnost rozpoznat novou, dosud neznámou variantu existujícího viru. Rychlost stoupla od chvíle, kdy antiviry vyhledávaly tyto sekvence pouze v místech souboru, kde se daly očekávat (na konci, na začátku). Na druhé straně toho využívali i autoři virů, kteří se snažili umístit tělo viru někam, kde by ho antivirus nenašel (obvykle do středu souboru). Významné snížení množství falešných poplachů přinesla tzv. exaktní identifikace, kdy po nalezení sekvence ještě skener spočítá kontrolní součty konstantních oblastí v těle viru, porovná je s informacemi ve virové databázi a pak teprve upozorní uživatele na téměř jistou přítomnost viru. Exaktní identifikace umožňuje i jemné rozlišování variant jednotlivých virů, o tomto v části věnované pojmenování virů.
Výběr spolehlivé sekvence býval relativně snadnou záležitostí. Autoři virů se proto pokoušeli znesnadnit detekci svých dílek tím, že začali psát zakódované viry. V takovém případě je možné sekvenci vybrat pouze z velmi malé části kódu - dekryptovací smyčky. Zbytek těla viru je v každém exempláři jiný. Opravdová legrace ovšem začíná až s příchodem polymorfních virů, které umí generovat různé tvary dekryptovacích smyček. Pro některé z nich je sice možné stvořit sekvence (nebo několik sekvencí), která virus zachytí, ale ta už obsahuje tolik variabilních částí, že se často najdou i zdravé programy, ve kterých nějaký fragment kódu nebo dat takové sekvenci vyhovuje. Většina polymorfních virů ale generuje takové dekryptory, že nelze hledání podle sekvencí použít. Skenery se nějaký čas snažily o rozpoznávání polymorfních virů pomocí jednoúčelových funkcí, ale to byl vlastně krok zpět. Moderní skenery proto obsahují emulátor strojového kódu, kterým se pokouší emulovat provedení smyčky, a pak mohou hledat sekvence až v dekryptovaném těle viru. Dnešní emulátor kódu bývá natolik propracovaným systémem, že za jeho asistence není větším problémem detekovat jakýkoliv, například i ten nejsložitější polymorfní virus. Emulátor kódu znamenal i příchod kvalitnější heuristické analýzy.
Heuristická analýza
Heuristická analýza je další z mnoha kouzelných termínů, které věrně doprovázejí moderní antivirové programy. V podstatě jde o rozbor kódu hledající postupy pro činnost virů typické nebo nějak podezřelé. Tímto způsobem lze odhalit i dosud neznámé viry.
Heuristická analýza měla odjakživa své zastánce i odpůrce. Zatímco zastánce těšila možnost detekce neznámých virů, odpůrce strašila zvýšená hladina falešných poplachů. Dnešní heuristická analýza bývá často natolik propracovaná, že výskyt falešného poplachu je spíše náhodou. To však nic nezměnilo na tom, že odpůrci existují i nadále...
Starší heuristické analýzy by bylo možné označit za "pasivní". První z nich byla použita v antivirech F-PROT a TBAV. Pasivní heuristika prohledávala soubory a hledala v nich typické příznaky (sekvence znaků) pro virus. Pokud bylo takových příznaků (často označovány jako flags) nalezeno dostatečné množství, byl takový soubor považován za napadený. Příznakem mohlo byt např. volání nějaké služby INT 21h apod. Nevýhodou bylo, že pasivní heuristika nedokázala proniknout pod "povrch" kódovaných či polymorfních virů a tak složitější nedokázala detekovat. Neaktivní heuristiku mohly viry snadno oklamat. Pokud například heuristická analýza využívala sekvenci v hexadecimálním tvaru: B440CD21 (vyjadřuje souhrn instrukcí mov ah,40; int 21h), mohl virus stejnou činnost vyvolat jinou sekvencí: B43FFEC4CD21 (mov ah,3f; inc ah; int 21h).
V dnešní době je ve všech známých případech využita "aktivní" heuristická analýza. Základem je emulátor kódu a s ním spojená existence virtuálního prostředí počítače. Emulátor kódu dokáže spustit soubor a jeho část "odemulovat" podobně, jako by ho spustil sám uživatel. Emulátor kódu ovšem veškerou činnost provádí ve virtuálním prostředí a skutečný počítač uživatele tak v případě "spuštění" infikovaného souboru nemůže ohrozit. Pokud by byl zpracovávaný soubor infikován, emulátor v podstatě vykoná i činnost viru, proemuluje dekódovací smyčku (dekryptor) a dostane se tak přímo na povrch viru. Emulátor vykoná i činnost případného viru - proemuluje dekódovací smyčku (decryptor) a dostane se tak přímo k "vnitřnostem" viru, kde už může skener pokojně vyhledávat podle sekvencí. Pokud jsou během emulace sbírány informace o aktivitách programu (např. proces přesměrování vektorů přerušení...), může být do akce zapojena i aktivní heuristická analýza, která na základě získaných informací vyhodnotí, zda se ne/jedná o virus. Jelikož emulace programu probíhá pomaleji než při skutečném spuštění programu, má emulátor nastaven tzv. timeout - tj. čas (či počet instrukcí), po kterém se chod emulátoru na aktuálním souboru zastaví. Tohoto časového limitu některé viry dokážou využít pro svůj prospěch, viz. techniky virů - EPO.
Poznámka: Heuristická analýza dokáže detekovat pouze takové typy virů, pro které je navržena (makroviry, souborové viry pro Windows, viry pro DOS apod.). Pokud světlo světa spatří nový typ viru (šířící se v jiném prostředí), je podle toho nutné upravit i stávající heuristickou analýzu.