Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Kасперский удаляет скомпилированный файл, Kасперский считает что моя прога - троян 
:(
    Опции темы
youriy86
Дата 26.4.2011, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Проблема следующая:
  У меня есть лаунчер, он качает новую версию программы, я хочу выложить на сервер новую версию лаунчера, и автоматом обновить и его и программу. Для этого я пишу маленькую временную программу, которая удалит лишние файлы, скачает новый лаунчер и запустит его, после чего сама себя удалит. А эту программку скачает и запустит старый лаунчер.
  Все бы ничего, да вот только, когда я ее компилирую Касперский 6.0 обнаруживает ее как вирус: 'HEUR:Trojan.Downloader.Win32.Generic(Модификация)' и удаляет скомпилированный файл. 
  Я пробовал по-разному менять код (запихнуть старт скачанного лаунчера в батник, и скачку файла с помощью инди). Единственный вариант, при котором каспер ничего не обнаруживает - если я использую либо только скачку, либо только запуск. 
  Но что самое интересное аналогичные конструкции я использую в своем лаунчере...
  Подскажите плиз, как можно модифицировать код.

Прикладываю код, а также архив с файлами программы, попробуйте скомпилировать.

Код этой временной программы: (закоментированные участки - мои попытки, что-то поменять).
Код

program TempDLer;

{$APPTYPE CONSOLE}

uses
  Windows, SysUtils, ShellAPI, Classes, IdHttp,
  MLbDLRoutines;

const
  FN_LNCHR_CFG = 'cfg_lnchr';
  FN_SED_CFG = 'config_sed';

var
  gBatFile: TextFile;
  gFileName: string;
  gH: THandle;
  gIdHttpClient: TIdHTTP;
  gFS: TFileStream;
  
begin
  gH := 0;
  WriteLn('Preparing to Install...');
  DeleteFile('cfg_lnchr.cfg');
  DeleteFile('config_sed.cfg');
  DeleteFile('launcher.exe');
  DeleteFile('sed.exe');
  DeleteFile('version.info');
  WriteLn('Donwloading new version of launcher...');
  {
  gIdHttpClient := TIdHTTP.Create(nil);
  gFS := TFileStream.Create('launcher.exe',fmCreate);
  gIdHttpClient.Get('http://10.10.10.3/sed_share/sed_upd/launcher/launcher.exe',gFS);
  gFS.Free;
  gIdHttpClient.Free;
  }

  MLbDLFile('10.10.10.3', 'sed_share/sed_upd/launcher/', 'launcher.exe', True);

  WriteLn('Starting...');

  ShellExecute(gH, 'open', PChar('launcher.exe'), nil, nil, SW_SHOW);

  gFileName := ChangeFileExt(ParamStr(0), '.bat');
  AssignFile(gBatFile, gFileName);
  Rewrite(gBatFile);
  WriteLn(gBatFile, ':1');
  WriteLn(gBatFile, format('Erase "%s"', [ParamStr(0)]));
  WriteLn(gBatFile, format('If exist "%s" Goto 1', [ParamStr(0)]));
  //WriteLn(gBatFile, format('Start "%s"', ['launcher.exe']));
  WriteLn(gBatFile, format('Erase "%s"', [gFileName]));
  CloseFile(gBatFile);
  ShellExecute(gH, 'Open', PChar(gFileName), nil, nil, SW_HIDE);
end.


Код модуля с MLbDLFile:
Код

unit MlbDLRoutines;

interface

uses
  ComCtrls, SysUtils, StdCtrls;

const
  MLB_DL_BUFFER_SIZE = 20480;
  MLB_DL_NEW_FILE_SUFFIX = 'mlb_new_dl_file_';

type
  EMLbNetError = class(Exception);
  EMLbRenameFile = class(Exception);
  EMLbFileNotFound = class(Exception);
  EMLbDLFileBreaked = class(Exception);
  EMLbFileNotCreated = class(Exception);

procedure MlbDLFile(AHost, APath, AName: string; ARewrite: Boolean);

implementation

uses
  Windows, WinInet, Forms, Classes, Dialogs;

procedure MlbDLFile(AHost, APath, AName: string; ARewrite: Boolean);
var
  vAppName: string;
  vSession, vURL: HInternet;
  vBuffer: array[1..MLB_DL_BUFFER_SIZE] of Byte;
  vBufferLen: DWORD;
  vF: File;
  vFileName: string;
begin
  vAppName := ExtractFileName(Application.ExeName);
  vSession := InternetOpen(PChar(vAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  if Assigned(vSession) then
  begin
    vURL := InternetOpenURL(vSession,PChar('http://' + AHost + '/' + APath + AName),nil,0,INTERNET_FLAG_RELOAD,0);
    if Assigned(vURL) then
    begin
      if not(ARewrite) then
        vFileName := MLB_DL_NEW_FILE_SUFFIX + AName
      else
        vFileName := AName;
      AssignFile(vF,vFileName);
      try
        Rewrite(vF,1);
      except
        raise EMLbFileNotCreated.Create('Нет доступа к файлу, закройте все программы, использующие файл: ' + vFileName);
      end;
      try
        repeat
          InternetReadFile(vURL, @vBuffer, SizeOf(vBuffer), vBufferLen);
          BlockWrite(vF,vBuffer,vBufferLen);
          Application.ProcessMessages;
        until vBufferLen = 0;
      except
        raise EMLbDLFileBreaked.Create('Загрузка файла была прервана!!');
      end;
      CloseFile(vF);
      with TStringList.Create do
      begin
        LoadFromFile(vFileName);
        if Count > 5 then
          if Strings[5] = '<p>The requested URL /' + APath + AName + ' was not found on this server.</p>' then
          begin
            Free;
            raise EMethodNotFound.Create('Файл не найден: http://' + AHost + '/' + APath + AName);
          end;
      end;
      InternetCloseHandle(vURL);
    end
    else
      raise EMLbFileNotFound.Create('Файл не найден: http://' + AHost + '/' + APath + AName);
    InternetCloseHandle(vSession);
  end
  else
    raise EMLbNetError.Create('Нет доступа к сети');
end;

end.



Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  TempDLer.rar 3,30 Kb
PM MAIL   Вверх
youriy86
Дата 26.4.2011, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 28.1.2011

Репутация: нет
Всего: нет



Методом тыка вроде бы нашел решение проблемы. Вставил в код ShowMessage. Касперский пропустил. Почему - без понятия ))
PM MAIL   Вверх
Akella
Дата 26.4.2011, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 36
Всего: 329



а что, отпавить свою программу в лабораторию Касперского с пометкой "ложное срабатывание" не судьба?
PM MAIL   Вверх
MotoArhangel
Дата 26.4.2011, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 13.3.2011

Репутация: нет
Всего: нет



Типичный прикол) Простой алгоритм привел Антивирус майкрософт в ярость) Хотя остальные молчат.
Код

procedure DeleteExeMyProgramm;
var
F: Textfile;
begin
AssignFile(F,Changefileext(Paramstr(0),'.bat'));
Rewrite(F);
Writeln(F,':1');
Writeln(F, Format('Erase "%s"',[Paramstr(0)]));
Writeln(F, Format('If exist "%s" Goto 1',[Paramstr(0)]));
Writeln(F, Format('Erase "%s"',[ChangeFileExt(Paramstr(0),'.bat')]));
CloseFile(F);
WinExec(PAnsiChar(ChangeFileExt(Paramstr(0),'.bat')),SW_HIDE);
Halt;
end;

user posted image


Это сообщение отредактировал(а) MotoArhangel - 26.4.2011, 13:40
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0856 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.