![]() |
![]() |
|
Paměťově rezidentní viry - Win32Přesměrování adres funkcí na tělo viruKaž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 Ring3Další 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. |
||
![]() |
![]() |