Антивирус на делфи

Общие вопросы: версии и диалекты, синтаксис языка, cтруктуры и типы данных (массивы, строки, списки...), обработка данных и т.д.
Ответить
Tommelise
Сообщения: 3
Зарегистрирован: 13 дек 2013, 23:20

13 дек 2013, 23:22

Доброго вечера.скажите,может ли кто то помочь с написанием анти-вируса на делфи?
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

17 дек 2013, 11:06

Это настолько серьезный труд, что исключительно одним Delphi здесь не обойтись. По-хорошему до самого слабого, хоть как-то работающего антивируса пройдет несколько месяцев упорного труда и несколько десятков тысяч рублей.
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

17 дек 2013, 11:28

Чего тебе в delphi не хватает, без чего не обойтись?
Труд несомненно серьёзный, потребует скорее много познаний по теме нежели денег и само собой вирусы пописать.. Может рассмотрите перспективу пересесть на линукс, там вирусов нет и антивирус ни к чему писать..
Ещё вопрос чем не устраивают десятки уже кем-то написанных, среди них и бесплатные под виндовоз есть..
[syntax=Delphi] [/syntax]
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

17 дек 2013, 11:38

Чего тебе в delphi не хватает, без чего не обойтись?
Алгоритм предсказания выполнения кода работает в виртуальной среде. Туда без помощи ассемблера не войти. А если реализовать эмуляцию на дельфе - то все равно знания ассемблера потребуются. Да и маски поиска в коде тоже не очень эффективны, т.к. хорошие в плане скрытности, вирусы, опять таки на асме написаны - а там одно и то же действие можно 10 разными способами записать на участке памяти всего в 80-100 байт. И это только одна "мутация" одного вида вируса.
потребует скорее много познаний по теме нежели денег и само собой вирусы пописать..
Просто видно же, что человеку нужно курсач по этой теме, как минимум, писать. А сам он ясное дело не сможет - отсюда и деньги.
Ещё вопрос чем не устраивают десятки уже кем-то написанных, среди них и бесплатные под виндовоз есть..
Опять таки он же не для себя пишет.... задание у него такое, но это имхо
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
Duncon
Сообщения: 1974
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

17 дек 2013, 11:57

Алгоритм предсказания выполнения кода работает в виртуальной среде. Туда без помощи ассемблера не войти. А если реализовать эмуляцию на дельфе - то все равно знания ассемблера потребуются.
Вставки ассэмблера никогда не являлись проблемой..
[syntax=Delphi] [/syntax]
Аватара пользователя
somewhere
Сообщения: 1837
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

17 дек 2013, 12:20

Вставки ассэмблера никогда не являлись проблемой..
Не являлись, но за рамки темы "антивирус на дельфи" это выходит. Тогда уж "антивирус наполовину на дельфи" что-ли :)
It's a long way to the top if you wanna rock'n'roll
indigo80
Сообщения: 1
Зарегистрирован: 16 авг 2010, 09:43

17 дек 2013, 15:56

Копай в сторону Google Code
Там есть заголовочные файлы для ClamAV только для версий 0.95
на новой не покатит. Я переписал для 0.98 на днях выложу на Vadim.hol.es
Tommelise
Сообщения: 3
Зарегистрирован: 13 дек 2013, 23:20

23 дек 2013, 18:01

дело в том что вот здесь есть вирус.. его код в делфи и зараженные файлы. все нужно к ним написать..[Ссылка удалена]
Daniary008
Сообщения: 1
Зарегистрирован: 06 май 2014, 22:35

06 май 2014, 22:47

Во первых может не антивирус но сканер файлов по параметрам указанным в сигнатурах сделать можно и при том достаточно быстро! Вот код главного файла(*.exe)

Код: Выделить всё

        unit Unit1;
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, XPMan, StdCtrls, Buttons, ShellApi, ComCtrls, ExtCtrls, Grids;

type
  TForm1 = class(TForm)
    SButton2: TSpeedButton;
    ODialog1: TOpenDialog;
    XPManifest1: TXPManifest;
    GroupBox1: TGroupBox;
    ListBox2: TListBox;
    SpeedButton1: TSpeedButton;
    Label2: TLabel;
    Label4: TLabel;
    Label6: TLabel;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    SBar1: TStatusBar;
    SGrid1: TStringGrid;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SButton2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    Function ScanFile : Word;
  public
    { Public declarations }
  end;

Type
  arr = array[1..20] of Byte;
  arrptr = ^arr;

var
  Form1: TForm1;
  PrPath : String;
  KolVirInBaze : Integer;
  TF : File;

implementation

{$R *.dfm}

Function TForm1.ScanFile : Word;
Var ItF, Naid : Word;
    F : TFileStream;
    Buf, VirBuf : Arrptr;
    I, T, J : Integer;
    S : String;
    PASS : Byte;
    Error : Boolean;
begin
  For ItF := 0 to ListBox2.Items.Count - 1 do
  Begin
    {$I-}
    AssignFile(TF, PrPath+'base.vidb');
    Reset(TF, 1);
    {$I+}
    If IOResult <> 0 then
    Begin
      SButton2.Enabled := True;
      ShowMessage('Ôàéë '+PrPath+'base.vidb'+' íå íàéäåí.');
      Exit
    end;
    New(VirBuf);
    New(Buf);
    T := 0;
    Error := False;
    Try
      F := TFileStream.Create(ListBox2.Items[ItF], fmOpenRead);
    except
      Error := True;
    end;
    If Error = False then
    begin
      If F.Size > 90 then
      Begin
        For PASS := 1 to 4 do
        Begin
          Label2.Caption := ListBox2.Items[ItF];
          Application.ProcessMessages;
          If PASS = 1 then F.Seek(135, 0);
          If PASS = 2 then F.Seek(2000, 0);
          If PASS = 3 then F.Seek(7000, 0);
          If PASS = 4 then F.Seek(10000, 0);
          Try
            F.ReadBuffer(Buf^, SizeOf(Buf^));
          except
            Error := True
          end;
          If Error = False then
          Begin
            For J := 1 to KolVirInBaze do
            Begin
              If J = 1 then Seek(TF, 0) else Seek(TF, J*2 * 10-20);
              BlockRead(TF, VirBuf^, SizeOf(VirBuf^));
              For I := 1 to 20 do If VirBuf^[I] = Buf^[I] then Inc(T) else T := 0;
              If T = 20 then
              Begin
                S := '';
                Case J of
                  1 : S := 'Worm.Win32.DipNet.f';
                  2 : S := 'Trojan.Win32.PdPinch.f';
                  3 : S := 'Trojan.DownLoader.1746';
                  4 : S := 'Trojan.Pinch';
                  5 : S := 'BackDoor.Haxdoor';
                end;
                Inc(Naid);
                If Naid <= 4 then
                Begin
                  SGrid1.Cells[0,Naid] := ExtractFileName(ListBox2.Items[ItF]);
                  SGrid1.Cells[1,Naid] := ExtractFilePath(ListBox2.Items[ItF]);
                  SGrid1.Cells[2,Naid] := S;
                end
                else
                begin
                  SGrid1.RowCount := Naid+1;
                  SGrid1.Cells[0,Naid] := ExtractFileName(ListBox2.Items[ItF]);
                  SGrid1.Cells[1,Naid] := ExtractFilePath(ListBox2.Items[ItF]);
                  SGrid1.Cells[2,Naid] := S;                  
                end;
              end;
            end;
          end; //Error = True - Ìàëåíüêèé ðàçìåð
        end;
      end;
      Dispose(VirBuf);
      Dispose(Buf);
      CloseFile(TF);
      F.Free;
      Label2.Caption := '';
    end;
  end;
  SButton2.Enabled := True;
  SBar1.Panels[1].Text := IntToStr(Naid);
  SBar1.Panels[2].Text := IntToStr(ListBox2.Items.Count)
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  If ODialog1.Execute then ListBox2.Items := ODialog1.Files
end;

procedure TForm1.SButton2Click(Sender: TObject);
begin
  If ListBox2.Items.Count <> 0 then
  Begin
    SButton2.Enabled := False;
    ScanFile
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  PrPath := ExtractFilePath(Application.EXEName);
  {$I-}
  AssignFile(TF, PrPath+'base.vidb');
  Reset(TF, 1);
  {$I+}
  If IOResult <> 0 then
  Begin
    SButton2.Enabled := True;
    ShowMessage('Ôàéë '+PrPath+'base.vidb'+' íå íàéäåí.');
    Exit
  end
  else
  Begin
    KolVirInBaze := Trunc(FileSize(TF)/20);
    SBar1.Panels[0].Text := 'Â áàçå: '+IntToStr(KolVirInBaze)
end.
В сигнатуре этого сканера 5 вирусов и сканировать он может файлы 4 расширений остальные части придумывай, пиши сам!
Ответить