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.