A vírus az összeszerelés

A vírus az összeszerelés

A fejezet, megtudhatja, hogyan, hogy egy vírus átmeneti memória, hogyan lehet átvinni a vezérlést, mint megpróbálja megtalálni a fájlt.

Csak akkor fertőz * .COM-fájlokat! Ha van ideje, és a vágy, hogy tudjuk levelet vírus fertőzi és * .EXE-fájlokat.

  • Virus „kapcsolódik” a fájl nem sérti a hatékonyság?
  • Mit kell egy vírus az első helyen?
  • Hogyan kezelését át a vírus valaki másnak a programot?

Kiderült, valahogy így:

Program a fertőzés után:

Bonyolult? Hasonlítsuk össze a két darab kód: a fertőzött és a fertőzött programot. Világossá kell tenni.

Most fogunk gyakorolni.

Az első sorban - 0,286 - mondja a szerelő, hogy fogja használni az utasításokat (parancsok, üzemeltetők) 286 processzor. Ie 8086 a mi számítógép vírus nem fog működni!

Az első byte át a címkén Init (inicializálás a vírus).

Azonnal van egy probléma: ha egy fájl kereső funkció DOS mi szennyezi a DTA „program-áldozatot.”

És akkor ott van a másik probléma, pontosabban a kérdés: mi a DTA és miért van rá szükség? Ez meg fogja vizsgálni később.

afd.exe format c: / s / u

Miért ez az egész? És különben is, ha megpróbáljuk keresni az első fájlt, majd megtalálni azt, amit nehéz parancssor (L_c: / s / u). Kiderül, hogy a „program-áldozat”, amihez „pick up” nem lesz képes olvasni a paramétereket, amelyeket át a felhasználó által. Ebben az esetben - a L_ / s / u.

Kétféle módon megkerülni ezt.

1. Mentse el a fájlt a PSP program keretében keresést. És akkor, mint a mi vírus dolgozott, hogy állítsa vissza.

2. Állítsa be a DTA másik memória területet, majd helyreállítani. Ez lehetővé teszi számunkra, hogy működjön 1AH 21h megszakításokat:

Fogjuk választani a második utat.

mov dx, offset karakterlánc

Assembly zaneset DX kezdőpozicióját sorban a memóriában. Valójában - összeszerelés után - úgy fog kinézni:

1234: 0200h mov dx, 400h 200h --- mert 100h byte "áldozat-file", és mi vagyunk a "farok" tőle.
.
1234: 0400h --- amit szeretne, de nem a mi sorban.
.
1234: 0500h 'string' --- ez az, ahol van!

Akkor, persze, hogy a hossza fertőzés „target file”, majd cserélje mov dx, 400h mov dx, 500h. De mi van, ha az ilyen kapcsolatok sokat? El tudja képzelni, milyen nagy növekedni fog a vírus?!

Mi jár másképp: csak átvigyem a vírus (a vírus, és csak!) A „farok”, „target file” a szabad szegmense az eltolás 100h. Itt van, mi történik:

1234: 0200h mov dx, 400h --- vagyunk a farkát a program
.
1234: 0500h 'string'

5678: 0100h mov dx, 400h --- át a szegmens magát 5678h, 0100h eltolásnál
.
5678: 0400h 'string' --- a húr helyére (offset).

Egy másik kérdés: hol van a garancia arra, hogy ez a szegmens üres, és mi nem nehéz kódolni egyes programok?

0B800 - nulla
0B900 - első
0BA00 - második
0BB00 - harmadik
0BC00 - negyedik
0BD00 - ötödik
0BE00 - Hatodik
0BF00 - hetedik

Nézzük kiszámítja a mérete egy oldalt. Van elég hely, hogy elférjen a vírus kódját rajta? A vírus nem tart tovább, mint 300-400 byte.

Vegyük, hogy a jól ismert mód 3: egy sorban 80 karakter, vonalak a képernyőn 25. Egy karaktert foglal két bájt (attribútum / offset). Kapunk: 80 x 25 x 2 = 4000 bájt. Van elég ez? Persze elég! Még ha ez nem lenne elég, akkor tudtuk használni a két, három, négy oldala.

Úgy gondolom, hogy nem lesz nehéz megérteni az új üzemeltető movs. Az elv működése teljes mértékben megfelel csapat rövid távra kirendelt megfigyelő. Itt van a leírás:

Ebben az esetben a DS: SI rámutat, hogy hol kap az adatokat, ES: DI ahol másolása és CX - több küldött byte / szó.


mov cx, 10; a küldött bájtok száma
mov si, offset Str1; ahol megtesszük
mov di, offset Str2; ahol a másolni
rep movsb; Csatárok byte, mert movsB. Most Str1 = Str2
.
Str1 a db '0123456789'
Str2 a db '9876543210'


mov cx, 5; sávszélességet szó (két byte)
mov si, offset Str1; ahol megtesszük
mov di, offset Str2; ahol a másolni
rep movsw; Továbbított szó (két byte), mert movsW. Most Str1 = Str2
.
Str1 a db '0123456789'
Str2 a db '9876543210'

Tehát most már a vírus két pontot szem előtt: 1. A jobb „áldozat program”; 2. A hetedik oldalon (0BF00: 0100h).

jmp dword ptr CS: [Off_move]

Most próbálja megtalálni az első * .com-fájl az aktuális könyvtárban. Ehhez használja a funkciót 4Eh 21h megszakításokat:

AH = 4Eh
A CX - attribútumok keresett fájl: van - 0 (normál, nem csak olvasható és rejtett!)
DS: DX - maszk keresést. Például: *. *, * .exe, komm. c. c: \ * asm stb

CF = 1 - nincs ilyen fájl
CF = 0: DTA tele van információkkal a megtalált fájlra

CF - egy carry flag. Ha CF = 1 van írva, ez azt jelenti, hogy a carry flag be van állítva (értéke 1), és ha CF = 0, akkor reset (0). DOS szállítására zászló jelzésére használható hibafüggvényt vagy egyéb célra.

Ebben az esetben, ha a funkció létre 4Eh carry flag, az azt jelenti, hogy a fájlok, amelyek megfelelnek a feltétel (keresési maszk) nem található.

Ha az átvitel zászló eltűnik (nulla), a DTA rögzíti információt a fájlt. Ez lesz szó a következő fejezetekben.

Ha CF = 0 (a carry flag törlődik), lehetséges, hogy tegyen valamit a talált fájlt.

Ahhoz, hogy megtalálja a következő fájlt, amely kielégíti a feltételt (keresési maszk), akkor kell használni megszakítás 21h 4Fh:

AH = 4Fh
A CX - attribútumok keresett fájl: van - 0 (normál, nem csak olvasható és rejtett!)
DS: DX - Maszk keresésének (mint 4Eh funkció).

CF = 1 - nem több fájl kielégítik a (keresési maszk)
CF = 0: DTA tele van információkkal a megtalált fájlra

Minden, valamint a 4Eh funkciót.

Szeretném megjegyezni, hogy még mindig kivitelezhetetlen vírus. Ie ő nem fertőz minden! Könnyen összeállítható és futtatni. Csak egy kicsit, hogy a képernyőn. Sokkal jobb dolog, hogy nézd alatt debugger.

Ezután minden egyszerű! Úgy vélem, hogy a leírás a program ahhoz, hogy megértsük, hogyan működik a program.

Kapcsolódó cikkek