Bylo jen otßzkou Φasu, kdy se pisatelΘ vir∙ p°eorientujφ na novΘ operaΦnφ
systΘmy, odhlalφ jejich slabosti a zaΦnou je vyu₧φvat pro svΘ zßm∞ry. PoprvΘ
se tak stalo v roce 1992, kdy byly poprvΘ prolomeny bariΘry MS-DOSu, a
na sv∞t∞ se objevil prvnφ virus schopn² infiltrovat operaΦnφ systΘm Windows,
kter² byl v tu dobu u₧ dlouho na trhu.
Prvnφ virus, kter² byl schopen infikovat jinΘ soubory ne₧ starΘ znßmΘ com-
a exe-soubory, se jmenuje WinWir14. Tento virus byl schopen napadat tehdy
nov² typ exe-soubor∙. Tento formßt soubor∙ se pou₧φval u vÜech spustiteln²ch
16bitov²ch aplikacφ pro Windows 3.x. Virus byl vÜak spφÜe jen pokusem a nestal
se celosv∞tov∞ rozÜφ°en²m. Po tomto prvnφm viru nastala dlouhß odmlka, b∞hem
nφ₧ si pravd∞podobn∞ auto°i "rozÜi°ovali svΘ obzory", a potom se vÜe velice
rychle rozb∞hlo.
Virus Tentacle byl dalÜφm nßsledovnφkem viru WinWir a zanedlouho se objevil
i prvnφ virus pro operaΦnφ systΘm Windows 95 - virus Boza. Tφm byly definitivn∞
prolomeny hranice vir∙ pro systΘm MS-DOS. Virus Boza byl ji₧ schopen infikovat
dalÜφ typ spustiteln²ch 32bitov²ch soubor∙, pe-soubory (portable executable)
neboli soubory p°enositelnΘho formßtu.
Tv∙rci vir∙ odvedli velk² kus prßce, kdy₧ se museli p°eorientovat z prost°edφ
MS-DOS do daleko komplexn∞jÜφho a slo₧it∞jÜφho sv∞ta MS-Windows. V prost°edφ
Windows sice z∙stavajφ n∞kterΘ komponenty starΘho DOSu, ale Windows p°inesly
p°edevÜφm prßci program∙ v rozÜφ°enΘm chrßn∞nΘm re₧imu procesoru (tzv. protect mod),
zcela jinou 32bitovou sprßvu soubor∙, a tak virus, kter² chce v tomto prost°edφ
·sp∞Ün∞ p°e₧φt, se musφ nauΦit t∞chto technik vyu₧φvat.
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. P°φkladem
pou₧itφ podobn²ch technik je nap°. virus Junkie Memorial. Tento virus napsala
znßmß skupina tv∙rc∙ vir∙ VLAD na pamßtku jejich kamarßda, kter² se p°edßvkoval
drogami. Tv∙rci vir∙ si v tomto p°φpad∞ uv∞domili, ₧e pouhou infekcφ exe-program∙
pro Windows nemohou virus dostateΦn∞ daleko rozÜφ°it. Proto virus napadß takΘ klasickΘ
starΘ soubory s p°φponou .com. InfikovanΘ programy, pokud jsou spuÜt∞ny pod
operaΦnφm systΘmem Windows, slou₧φ jako droppery (vypouÜt∞Φe vir∙) soubor∙ VxD,
kterΘ jsou po aktivaci viru zavedeny pam∞ti a po jejich zav∞Üenφ do rozhranφ IFS
manageru je virus schopen lehce monitorovat veÜkerΘ souborovΘ operace systΘmu a dßle
se takto rozÜφ°ovat. Jmenovan² virus je velice komplexnφ a je schopen takΘ infekce
exe-soubor∙ v DOSu i pe-soubor∙ ve Windows. Samoz°ejm∞ vyu₧itφ za°φzenφ VxD nenφ jedinou
cestou, kterou se mohou viry pod operaΦnφm systΘmem Windows Üφ°it. P°φkladem
m∙₧e b²t virus Cabanas.
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, na rozdφl od viru Boza, kter² je popsßn dßle,
a kter² pou₧φvß p°φmΘ vstupy do jßdra Windows. Tyto vstupy se mohou s nov²mi verzemi systΘmu
liÜit.
Jak ji₧ bylo uvedeno, s p°φchodem nov²ch modernφch 32bitov²ch operaΦnφch systΘm∙,
jako jsou Windows 9x, OS/2 Φi Windows NT, p°ichßzφ takΘ nßstup nov²ch 32bitov²ch vir∙.
Podφvejme se tedy, jak tyto novΘ viry pracujφ.
I kdy₧ viry psanΘ pro operaΦnφ systΘm MS-DOS p°edstavujφ i v dneÜnφ dob∞ stßle
nebezpeΦφ, jejich vliv bude postupem Φasu ustupovat spolu s ustupujφcφm poΦtem
pou₧φvan²ch dosovsk²ch aplikacφ. Tv∙rci vir∙ tak budou postaveni p°ed ·kol p°eorientovat
se na novΘ prost°edφ a nauΦit se vyu₧φvat jeho nedostatky ve prosp∞ch sv²ch ·mysl∙.
I kdy₧ operaΦnφ systΘm Windows je na trhu u₧ vφce ne₧ osm let, zatφm existuje velice
malß skupina vir∙ napsanß p°φmo pro toto prost°edφ. Hlavnφ p°φΦinou je pravd∞podobn∞
·silφ vynalo₧enΘ na napsßnφ takovΘho viru. Podφvßme-li se na dneÜnφ viry napsanΘ pro MS-DOS,
nejpoΦetn∞jÜφ skupina z nich jsou infektory com-soubor∙, kterΘ jako₧to binßrnφ soubory
p°edstavujφ nejjednoduÜÜφ hostitele vir∙. Daleko mΘn∞ poΦetnß skupina vir∙ je schopna
infikovat i exe-soubory, i kdy₧ struktura t∞chto soubor∙ je takΘ velice jednoduchß.
Struktura exe-aplikacφ ve Windows je v porovnßnφ s exe-aplikacemi pro DOS daleko komplexn∞jÜφ
a to je asi bariΘra, kterou tv∙rci vir∙ zatφm necht∞jφ zdolßvat. Dß se proto oΦekßvat, ₧e
v blφzkΘ budoucnosti nebude napsßno p°φliÜ mnoho vir∙ urΦen²ch k infekci 32bitov²ch
soubor∙, ale ty, co budou napsßny, se zajistΘ budou vyznaΦovat velkou profesionalitou a
budou tudφ₧ p°edstavovat takΘ velkΘ nebezpeΦφ.
Hlavnφ rozdφl mezi 32bitov²mi viry
a dosovsk²mi viry je ve struktu°e hostitelsk²ch soubor∙, kterΘ je t°eba napadnout.
U com-soubor∙ postaΦilo viru zapsat se na konec programu a na jeho zaΦßtek umφstit skok
na svoje t∞lo. P°i infekci exe-soubor∙ u₧ bylo zapot°ebφ modifikovat adresu vstupnφho
bodu programu, adresu zßsobnφku a n∞kolik prom∞nn²ch urΦujφcφch velikost souboru.
TakΘ bylo nutnΘ pohlφdat si exe-soubory obsahujφcφ p°ekryvnΘ moduly apod.
K pochopenφ nßroΦnosti infekce 32bitov²ch exe-soubor∙ je t°eba se nejprve struΦn∞ seznßmit
s jejich stavbou.
V operaΦnφch systΘmech Windows 9x a Windows NT se pou₧φvß 32bitov² formßt spustiteln²ch
soubor∙, znßm² jako pe-format. (Jeho nßzev je zkratkou od portable executable - tedy p°enositeln²
formßt). Je navr₧en tak, aby byl bez problΘm∙ p°enositeln² mezi r∙zn²mi platformami poΦφtaΦov²ch
systΘm∙ s r∙zn²mi typy procesor∙.
Pe-soubor, stejn∞ jako 16bitov² ne-formßt pou₧φvan² ve Windows 3.x, zaΦφnß
starou znßmou dosovskou exe-hlaviΦkou a krßtk²m programem nazvan²m STUB, kter²
vßs upozornφ, ₧e program musφte spustit pod operaΦnφm systΘmem Windows. Po tΘto
sekci nßsleduje pe-hlaviΦka a pole tzv. SECTION HEADERS, tedy pole hlaviΦek jednotliv²ch
sekcφ (oddφl∙) souboru. Nßsledujφ jednotlivΘ sekce, kterΘ obsahujφ k≤d, neinicializovanß
data, inicializovanß data, relokaΦnφ tabulku apod. S ohledem na tuto strukturu pe-soubor∙
se nabφzφ n∞kolik zp∙sob∙ jejich mo₧nΘ infekce.
Vzhledem k tomu, ₧e velikost jednotliv²ch sekcφ v pe-souboru je zarovnßna na nßsobek
512 bajt∙, je mo₧nΘ umφstit k≤d viru do nevyu₧itΘ Φßsti n∞kterΘ sekce. Tento zp∙sob infekce
mß samoz°ejm∞ n∞kolik zßsadnφch nedostatk∙. Za prvΘ, virus je omezen p°i infekci
pouze na takov² typ soubor∙, kterΘ majφ dostatek nevyu₧itΘho mφsta pro t∞lo viru, a za druhΘ,
virus musφ b²t samoz°ejm∞ menÜφ ne₧ 512 bajt∙, a to je dosti mßlo i pro jednoduch²
infektor com-soubor∙. Naproti tomu, takov² virus je schopen infikovat soubory beze zm∞ny
jejich dΘlky.
NßroΦn∞jÜφ zp∙sob infekce pe-soubor∙ spoΦφvß v p°idßnφ dalÜφ sekce k≤du k souboru, do
kterΘ umφstφme t∞lo viru. Tento zp∙sob infekce u₧ vy₧aduje nßroΦn∞jÜφ modifikace pe-hlaviΦky,
p°idßnφ dalÜφ hlaviΦky sekce a samotnΘ novΘ sekce.
Do t°etice, nejnßroΦn∞jÜφm zp∙sobem infekce je zapsßnφ t∞la viru do stßvajφcφ k≤dovΘ sekce.
Tento postup vy₧aduje dokonalΘ pochopenφ struktury pe-soubor∙ a manipulaci s mnoha jeho polo₧kami.
Musφ se posunout vÜechny sekce, kterΘ se nachßzejφ za sekcφ k≤du, a upravit velkΘ mno₧stvφ
relativnφch adres pe-souboru.
Zvlßdnutφ technik infekce pe-soubor∙ je zßsadnφ v∞cφ p°i psanφ 32bitovΘho viru.
Zb²vajφcφ programovßnφ v asebleru pod operaΦnφm systΘmem Windows 9x se zßkladnφ znalostφ
programovßnφ pod Windows ji₧ nenφ tak slo₧itΘ, jak by se na prvnφ pohled mohlo zdßt.
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.
Prvnφm virem napsan²m pro operaΦnφ systΘm Windows 9x, kter² byl schopen infikovat 32bitovΘ
spustitelnΘ soubory, byl virus Bizatch alias Boza, vytvo°en² zaΦßtkem roku 1996. Tento virus nenφ
pam∞¥ov∞ rezidentnφ a p°i spuÜt∞nφ infikovanΘho souboru se pokusφ vyhledat v aktußlnφm adresß°i
t°i pe-soubory a napadnout je. Pokud zde nejsou soubory k dispozici, posouvß se virus po
stromu adresß°∙ sm∞rem ke ko°enovΘmu adresß°i a hledß dßl. Po infekci t°φ soubor∙ vracφ
virus °φzenφ hostitelskΘmu souboru. Ka₧d² t°icßt² den v m∞sφci vypφÜe virus hlßÜenφ. Virus
nenφ destruktivnφ, ale obsahuje chybu, kv∙li nφ₧ m∙₧e b²t hostitelsk² soubor Üpatn∞
napaden a poruÜen. DΘlka viru je 2680 bajt∙. Virus vyu₧φvß p°φmΘho volßnφ funkcφ API
operaΦnφho systΘmu, jak jsme ji₧ vysv∞tlili, detekuje vÜak, zda jsou p°φsluÜnΘ funkce
v pam∞ti na oΦekßvan²ch mφstech. Proto p°i spuÜt∞nφ infikovanΘho souboru pod Windows NT nedojde
k havßrii, ale virus se pod tφmto operaΦnφm systΘmem takΘ nebude mno₧it.
Nezb²vß ne₧ doufat, ₧e se v brzkΘ dob∞ nevyrojφ spousta zßke°n²ch vir∙ napsan²ch
pro novΘ operaΦnφ systΘmy. Jejich Φas urΦit∞ p°φjde a je t°eba se na to d∙kladn∞ p°ipravit.