Paměťově rezidentní viry - Win32
Zde jsou uvedeny některé metody:
Přesměrování adres funkcí na tělo viru
Každý spustitelný program ve Windows 9x používá nejméně dvě základní volání API jádra systému.
Jsou to funkce GetModuleHandleA a GetProcAddress. Odkazy na tyto funkce jsou uloženy v pe-programu,
v tzv. tabulkách importu ve Windows. Analýzou této tabulky může virus zjistit další vstupní body do jádra
Windows a potom je využívat pro svou replikaci (množení). Tento přístup má také další výhody, virus je
např. přenositelný i pod operační systém Windows NT.
Zatímco v prostředí MS-DOS použije virus při otevírání souboru vyvolání přerušení INT 21 s příslušnými
parametry v registrech procesoru, v prostředí Windows uloží tyto parametry do zásobníku a skočí na příslušnou
funkci API. Protože tyto funkce jsou samozřejmě externí a jsou součástí knihoven DLL operačního systému,
je třeba nějak zjistit adresu dané funkce API. U normálních aplikací je tento proces úkolem zavaděče, který
danou aplikaci spouští. Ten potom zjistí z informací zapsaných v pe-souboru, které knihovny DLL a které jejich
funkce jsou aplikací volány, a korektně upraví na příslušných místech adresové odkazy na tyto funkce.
Pokud však virus bude chtít využít těchto automatických relokací, nezbývá mu, než se pustit do náročnějších
modifikací pe-souboru a zejména jeho relokační sekce. I zde se však nabízí určité zjednodušení. Při startu
Windows 9x jsou totiž hlavní moduly API, jako je např. modul KERNEL32.DLL, natahovány do paměti na stále
stejné místo. Pokud si tedy, např. krokováním klasicky přeloženého programu, zjistíme adresy těchto funkcí,
můžeme potom zjištěné vstupní body využít přímo bez využití importovacího mechanismu a složitého
zpracování struktur pe-souboru. tento způsob má i svá úskalí. Budete-li takto koncipovaný virus chtít přenést
např. z operačního systému Windows 9x do systému Windows NT, dojde samozřejmě k havárii, protože pod
Windows NT se nebudou příslušné funkce vyskytovat na stejných adresách jako ve Windows 9x. Také nové
verze systému by mohly podobně napsaným virům znepříjemnit život.
Nevýhodou je, že ukončením infikovaného programu ztrácí virus možnost kontroly nad operačním systémem.
Nevýhodu lze vyvážit napadením frekventovaně volaných systémových knihoven, zejména KERNEL32.DLL a USER32.DLL.
Ring0 a Ring3
Další prvek, na kterém jsou Windows z velké části postaveny, jsou takzvané virtuální ovladače zařízení - VxD.
Jejich kódy pracují na nejvyšší úrovni oprávnění procesoru zvaném ring 0 a mohou si s celým systémem dělat
doslova, co chtějí bez jakýchkoliv ochran. Pro viry, které chtějí monitorovat souborový systém Windows 9x,
je využití ovladačů VxD velice přínosné. Na této úrovni totiž pracuje ovladač IFS manager (IFS - installable
file system), přes který prochází veškeré souborové operace Windows 9x, ať už jsou volány ze 16bitové či
32bitové aplikace Windows nebo z virtuálního stroje MS-DOSu. Navíc zde existuje velice podrobně
dokumentované rozhraní API, které mohou tvůrci virů využít. Tato možnost je také pro virus velice výhodná,
protože na úrovni ovladačů VxD je takový virus schopen úspěšně se ukrývat před antivirovými programy.
Tuto výhodu se samozřejmě moderní 32bitové viry naučily rychle využívat. Po "zavěšení" do rozhraní IFS
manageru je virus schopen lehce monitorovat veškeré souborové operace systému a dále se takto rozšířovat.
Tato metoda funguje pouze ve Windows 9x, nikoliv ve Windows NT, 2000.