SouborovΘ viry pro Windows

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/2000 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. DΘlka sekcφ je zarovnßna na nßsobek 512 bajt∙. S ohledem na tuto strukturu pe-soubor∙ se nabφzφ n∞kolik zp∙sob∙ jejich mo₧nΘ infekce.

Nezavirovan² PE EXE soubor:

P°epsßnφ

Virus sice takto PE EXE soubor napadne, ale jeho p∙vodnφ obsah znehodnotφ, podobn∞ jako p°episujφcφ viry pro DOS.

P°idßnφ novΘ sekce

Jak u₧ bylo °eΦeno, PE EXE soubor je rozd∞len na sekce. Velikost sekcφ je ulo₧ena v hlaviΦce a viry ji m∙₧ou m∞nit (a taky to d∞lajφ, p°evß₧n∞ s poslednφ sekcφ). JedinΘ omezenφ je, ₧e velikost sekcφ se zarovnßvß na nßsobek n∞jakΘ hodnoty (taky zapsanΘ v headeru), typicky na nßsobek 512. Virus m∙₧e vytvo°it v PE souboru novou sekci, ulo₧it do nφ svoje t∞lo a upravit hlaviΦku (header) PE souboru tak, aby se zavedl d°φve ne₧ p∙vodnφ program (ten se dostane na °adu a₧ po zavedenφ viru).

P°ipojenφ k poslednφ sekci

  • S modifikacφ PE hlaviΦky

    Virus se p°ipojφ do sekce s p∙vodnφm programem a modifikuje vstupnφ bod (entry point) v PE hlaviΦce tak, aby byl zaveden d°φve ne₧ p∙vodnφ program (ten se dostane k °φzenφ op∞t a₧ po provedenφ viru).

    (vstupnφ bod - entry point - adresa mφsta, na kterΘm program "zaΦφnß")

  • Vlo₧enφm JMP instrukce do k≤du p∙vodnφho programu

    Virus nemusφ modifikovat entry point, proto₧e do k≤du p∙vodnφho programu vlo₧φ instrukci skoku (JMP), kterß se postarß o zavedenφ viru (ten pak p°edß °φzenφ p∙vodnφmu programu).

  • Cavity virus ("Mezerov²" virus)

    Technika, p°i kterΘ se virus "rozleje" do nevyu₧it²ch mφst (a t∞ch je hodn∞) PE souboru.
    Napaden² soubor mß pak stejnou velikost jako p∙vodnφ originßl.
    Typick²m p°φkladem viru z tΘto kategorie m∙₧e b²t virus Win32/CIH (╚ernobyl).

    EPO technika (Entrypoint Obscuring)

    N∞kterΘ novΘ viry vyu₧φvajφ techniku EPO. Jde o to, ₧e virus nemodifikuje entry-point, ani na zaΦßtek k≤du nevklßdß n∞jakou instrukci skoku (JMP), ale sna₧φ se "zaÜφt" n∞kam nakonec. Virus se postarß nap°φklad o to, aby byl spuÜt∞n a₧ po zavolßnφ urΦitΘ API funkce p∙vodnφm programem. Pokud si virus zajistφ, aby byl spuÜt∞n p°i volßnφ funkce ExitProcess API, m∙₧e si b²t jist², ₧e se bude aktivovat a₧ na konci celΘho "mechanismu". Idea EPO techniky je jasnß: znesnadnit antivir∙m detekci. Emulßtor k≤du toti₧ v∞tÜinou testuje pouze zaΦßtek programu (prvnφ instrukce) a na anal²zu mß vyΦlen∞nou velice krßtkou dobu. Nenφ tedy pravd∞podobnΘ, ₧e by se dopracovala a₧ k volßnφ slu₧by ExitProcess a virus tak objevila.