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 !