Pam∞¥ov∞ rezidentnφ viry - Win32

Tak tedy "zatφm" jsou znßmy pouze t°i zp∙soby jak b²t rezidentnφ v systΘmu Windows 95/NT. LiÜφ se programovou nßroΦnostφ a ka₧dß metoda mß svΘ v²hody i nev²hody.

Win32 per-process

Pokud virus napadne n∞jak² cφlovy EXE program, pak se v n∞m pokusφ vyhledat tabulku, kterß obsahuje veÜkerΘ adresy funkcφ, kterΘ pou₧φvß. Jsou to nap°φklad fce pro alokaci pam∞ti, prßci se soubory, registry apod. Virus si podle PE hlaviΦky najde tuto tabulku a zm∞nφ adresu na svoje vlastnφ t∞lo. Tak₧e, pokud program b∞hem Φinosti zavolß funkci na otev°enφ souboru (CreateFile), pak ji dostane nejd°φve virus a a₧ potΘ ji p°edß originßlnφ slu₧b∞.

Tento zp∙sob je snadn², avÜak mß svoji nev²hodu: pokud ukonΦφme infikovan² program, tak spolu s nφm nßm i zanikne sledovßnφ viru. AvÜak vzßp∞tφ u₧ivatel obvykle spustφ jin², jiz d°φve infikovan² program, tak₧e m∙₧e op∞t pokraΦovat ve svΘ rozd∞lanΘ prßci.

Pokud ovÜem tφmto zp∙sobem budeme infikovat nap°φklad KERNEL32.DLL, USER32.DLL a dalÜi, pak budeme nata₧eni do pam∞ti spoleΦn∞ s touto knihovnou a veÜkerΘ funkce, kterΘ programy zavolajφ, se vykonßvajφ p°es KERNEL32, a kdy₧ je tady mßme p°esm∞rovanΘ, pak je nejd°φve zachytφme my.

Poslednφ dobou se objevila tzv. EPO technika, kterß nemusφ v EXE hlaviΦce m∞nit sv∙j "EntryPoint" (virus se neaktivuje p°i spuÜt∞nφ, ale a₧ po zavolßnφ oblou₧enΘ funkce).

Ring0 a Ring3

Ah, nejhorÜφ, co do programßtorskΘho ·silφ, je vyu₧itφ tohoto zp∙sobu. Takto infikovan² program nebude rezidentnφ pod WindowsNT/2k, pracuje jen pod Win95/98, proto₧e se do pam∞ti instaluje tak trochu drastick²m zp∙sobem.

Cel² Windows 95/98 je postaven na dvou ·rovnφch. Ring0 znamenß, ₧e je program spuÜt∞n² s nejvyÜsφ prioritou, mß mo₧nost p°istupovat i k hardwaru, kde₧to v Ring3 (nejni₧Üφ priorita) mohou jen legßlnφ API proniknout do Ring0.

Dostat se do Ring0 lze provΘst n∞kolika zp∙soby:
  • 1) ilegßlnφ cestou p°es urΦitou instrukci procesoru
  • 2) vytvo°enφm VxD ovladaΦe, kter² bude nahrßn do pam∞ti se startem Win9x
  • 3) infikovßnφm urΦitΘho VxD

    A₧ se ·sp∞Ün∞ dostaneme do Ring0, pak m∙₧eme zachytit veÜkerΘ souborovΘ operace a d∞lat dalÜφ nechutnosti. U₧ takΘ umφme komunikovat mezi Ring0 a Ring3, co₧ dlouho neÜlo - tak₧e volßnφ API z Ring0 u₧ je pohodlnΘ.

    Registry

    Windows uklßdß hodn∞ sv²ch d∙le₧it²ch informacφ do registru. A¥ u₧ jsou to ·daje o velikosti ikon, informacφ o koncovkßch soubor∙ nebo dokonce i nßzvy programu, kterΘ z n∞jakΘho d∙vodu spadly. Virus si vyhledß urΦit² klφΦ a ten zm∞nφ tak, ₧e pokud u₧ivatel spustφ jak²koliv program, pak je ihned p°edßno °φzenφ viru s nßzvem prßv∞ spouÜt∞nΘho programu. Existujφ zatφm asi deset d∙le₧it²ch klφΦ∙ k modifikaci jak tohle dosahnout. Moc jsem se tφmhle j∞Üt∞ nezab²val, ale Φetl jsem, ze touto metodou se dajφ Üφ°it i VBS viry (OutLook apod).

    Zßv∞r

    A₧ zde mo₧nß pochopφte, proΦ n∞kterΘ viry jsou oznaΦeny "Win95" a jinΘ "Win32". Existuje jeÜt∞ toho hodn∞ co vÜechno virus musφ ud∞lat p°ed tφm, ne₧ mß opravdu jistotu, ₧e se do pam∞ti dostane - tohle je ovÜem ten zßkladnφ princip, na kterem vÜechny viry pracuji.


    Autorem tohoto Φlßnku je Prizzy/29A (prizzy@coderz.net). Tφmto mu velice d∞kuji !