SouborovΘ viry pro DOS

SpustitelnΘ soubory mohou mφt n∞kolik formßt∙. V operaΦnφm systΘmu DOS rozeznßvßme dva zßkladnφ, COM a EXE.

Spustiteln² soubor typu COM

Naprosto nejednoduÜÜφ formßt spustitelnΘho souboru. M∙₧e b²t dlouh² max. 64 KB (=dΘlka pam∞¥ovΘho segmentu). Nemß ₧ßdnou hlaviΦku a tak je jeho infekce naprosto jednoduchß. P°i infekci tohoto souboru si virus obvykle uschovß do svΘho t∞la prvnφ t°i bajty COM souboru a mφsto nich vlo₧φ instrukci skoku (JMP), kterß se v budoucnu postarß o spuÜt∞nφ p°ipojenΘho t∞la viru. P°i spuÜt∞nφ infikovanΘho souboru dojde nejprve k aktivaci viru, kter² v operaΦnφ pam∞ti obnovφ p∙vodnφ 3 bajty a dφky tomu dojde i ke spuÜt∞nφ p∙vodnφho programu, kter² byl v souboru p°ed infekcφ.

Spustiteln² soubor typu EXE

Samotnß struktura spustitelnΘho souboru typu EXE je mnohem slo₧it∞jÜφ ne₧ v p°φpad∞ COM souboru. Programov² soubor EXE se sklßdß ze dvou Φßstφ, z hlaviΦky (header) a vlastnφho k≤du programu. Pro zajφmavost uvßdφm celou strukturu hlaviΦky:

Offset:Popis:
00hSignatura souboru (znaky MZ)
02hVelikost poslednφ strßnky v B
04hDΘlka souboru v 512 B strßnkßch
06hPoΦet polo₧ek v relokaΦnφ tabulce
08hVelikost hlaviΦky v 16 B paragrafech
0ahMinimßlnφ pot°ebnß pam∞¥ v paragrafech
0chMaximßlnφ pot°ebnß pam∞¥ v paragrafech
0ehPoΦßteΦnφ hodnota SS
10hPoΦßteΦnφ hodnota SP
12hKontrolnφ souΦet
14hPoΦßteΦnφ hodnota IP
16hPoΦßteΦnφ hodnota CS
18hOffset prvnφ relokaΦnφ polo₧ky
1ah┌rove≥ p°ekr²vßnφ

I v p°φpad∞ EXE souboru si musφ virus uschovat do svΘho t∞la n∞kolik d∙le₧it²ch ·daj∙ (offset 0eh a₧ 11h). N∞kterΘ dalÜφ musφ vypoΦφtat (offset 02h a₧ 05h). P°i spuÜt∞nφ infikovanΘho souboru op∞t dojde nejprve k aktivaci viru, kter² v operaΦnφ pam∞ti obnovφ p∙vodnφ uschovanΘ ·daje v hlaviΦce, dφky Φemu₧ dojde i ke spuÜt∞nφ p∙vodnφho programu.

Jak je vid∞t, struktura soubor∙ COM a EXE je rozdφlnß, stejn∞ jako je rozdφln² zp∙sob infikace t∞chto soubor∙. Virus tak musφ b²t schopen rozeznat oba typy spustiteln²ch soubor∙. Virus m∙₧e tento problΘm vy°eÜit nßsledovn∞:

  • typ spustitelnΘho souboru odvodφ p°φmo z jeho nßzvu (nap°. AHOJ.COM -> jde o COM)
  • typ spustitelnΘho souboru odvodφ podle jeho obsahu (EXE soubory majφ v prvnφch dvou bajtech znaky "MZ").
    Evidentnφ je, ₧e druh² zp∙sob je bezpeΦn∞jÜφ.

    Umφst∞nφ souborovΘho viru v souboru (obecn∞)

    Souborov² parazitick² virus na zaΦßtku souboru (prepend)

    1. metoda ("vyseknutφ" Φßsti p∙vodnφho programu a nßslednΘ umφst∞nφ na konec souboru - na konci uschovanΘ ·daje)
    2. metoda (posun celΘho p∙vodnφho programu doprava)
    3. metoda (p°epsßnφ Φßsti p∙vodnφ programu - trvalΘ znehodnocenφ p∙vodnφho programu - na konci uschovanΘ ·daje)

    Souborov² parazitick² virus na konci souboru (append)

    Tento zp∙sob je nejpou₧φvan∞jÜφ a bli₧Üφ informace jsou naho°e.

    Souborov² parazitick² virus ve st°edu souboru (insert)

    Velmi mßlo pou₧φvanß metoda infekce. I tak vÜak existujφ t°i:
    • Metoda 1 - s ·pravou ·daje adresy vstupnφho bodu (tj. mφsto, kde program zaΦφna)
      Virus odlo₧φ p∙vodnφ obsah Φßsti souboru na konec souboru a sßm sebe umφstφ do st°edu souboru. Pak uprav² ·daje v hlaviΦce.

    • Metoda 2 - bez ·pravy adresy vstupnφho bodu (tj. mφsto, kde program zaΦφna)
      Virus zjistφ startovacφ adresu souboru (entry point), a pokud sm∞°uje n∞kam do st°edu souboru, umφstφ se do n∞j (p∙vodnφ obsah Φßsti souboru samoz°ejm∞ odlo₧φ na konec souboru). Virus pak p°i spuÜt∞nφ infikovanΘho souboru p°evezme kontrolu nad programem jako prvnφ, bez toho aby p°edtφm musel m∞nit startovacφ adresu (vstupnφ bod - entry point).

    • Metoda 3 - Cavity viruses - mezerovΘ viry
      Tyto viry dokß₧ou napadnout soubor, bez prodlou₧enφ jeho dΘlky. N∞kterΘ soubory toti₧ obsahujφ nepot°ebnΘ nebo prßzdnΘ oblasti, do kter²ch se vejde i celkem velk² virus (kup°φkladu sem pat°φ virus BackForm, kter² mß dΘlku 2 kB). Typick²m p°φkladem souboru "pln²ch mezer" je COMMAND.COM. Tato metoda je oblφbenß p°edevÜφm ve Windows.

    SchΘma Φinnosti p°episujφcφho viru (virus p°φmΘ akce - nerezidentnφ) vypadß takto:

  • Vir je aktivovßn v okam₧iku, kdy je spuÜt∞n libovoln² infikovan² program, a jeho prvnφ starostφ je vyhledat jin² vhodn² program, kter² je mo₧no napadnout.
  • Vir zkopφruje svΘ t∞lo na zaΦßtek vyhlΘdnutΘho programu, Φφm₧ si zajistφ, ₧e bude aktivovßn okam₧it∞ po jeho spuÜt∞nφ, ale zßrove≥ je tφmto krokem cφlov² program nenßvratn∞ zniΦen.
  • Pokud jsou spln∞ny zadanΘ podmφnky, vir vykonß svΘ poslßnφ.
  • Vir nem∙₧e pokraΦovat v Φinnosti p∙vodnφho programu, proto jej bezprost°edn∞ ukonΦφ, Φasto s n∞jak²m hlßÜenφm naoko vysv∞tlujφcφm nemo₧nost b∞hu programu (nap°φklad fiktivnφ nedostatek pam∞ti).

    SchΘma Φinnosti nep°episujφcφho viru (virus p°φmΘ akce - nerezidentnφ) vypadß takto:

  • Tento krok je naprosto shodn² jako v p°edchozφm p°φpad∞.
  • Vir p°ipojφ vlastnφ k≤d k programu tak, aby zachoval vÜechny informace pot°ebnΘ k jeho sprßvnΘ Φinnosti. NejjednoduÜÜφm zp∙sobem jak to za°φdit, je p°ipojit t∞lo viru za konec napadenΘho programu. Aby vÜak byl vir aktivovßn okam₧it∞ po spuÜt∞nφ infikovanΘho programu, musφ na zaΦßtek programu vlo₧it instrukci skoku na t∞lo viru, p°iΦem₧ p∙vodnφ k≤d, kter² je p°epsßn skokovou instrukcφ, je ulo₧en do t∞la viru.

    SchΘma Φinnosti rezidentnφho souborovΘho viru vypadß takto:

  • P°i spuÜt∞nφ napadenΘho programu vir zjistφ, nenφ-li ji₧ rezidentnφ v pam∞ti. Pokud nalezne svou kopii v pam∞ti, pokraΦuje bodem 5.
  • V opaΦnΘm p°φpad∞ vyhledß a vyhradφ pro svΘ pou₧φtφ (tzv. alokuje) ·sek pam∞ti vhodnΘ velikosti.
  • P°ekopφruje sßm sebe do tohoto ·seku pam∞ti a zm∞nφ adresy n∞kter²ch diskov²ch (a p°φpadn∞ i jin²ch) slu₧eb tak, aby sm∞rovaly do t∞la viru (viz. Slovnφk pojm∙ - p°eruÜenφ).
  • Obnovφ zaΦßtek napadenΘho programu (pouze v pam∞ti, ne na disku) a tento program spustφ.
  • Pokud je od tΘto chvφle spouÜt∞n jak²koli program, je nejd°φve vyvolßn rezidentnφ vir, kter² tento program infikuje tφm, ₧e p°ipojφ sv∙j k≤d ke k≤du programu a zm∞nφ ·vodnφ skok (stejn∞ jako u nep°episujφcφch vir∙ p°φmΘ akce).
  • Jsou-li spln∞ny podmφnky, provede akci.