Перейти к содержанию

Рекомендуемые сообщения

Опубликовано
Доброго времени суток!
У меня появилась такая проблема:
Сделал в проекте механизм самообновления через загрузчик программы. То есть запускается RegistratorLoader.exe, который проверяет наличие обновлений и запускает потом RegistratorFOG.exe - основную программу. Так вот антивирусы на машинах клиентов (в частности Аваст, Касперский, Nod, AVG) завопили, что RegistratorLoader.exe - это вирус HEUR:Trojan-Downloader.Win32.Generic (по Касперскому)
Подскажите, пожалуйста, как можно попробовать изменить код, чтобы антивирусы перестали ругаться? С проблемами подобного типа никогда не разбирался, видимо поэтому даже не знаю в какую сторону думать...
Среда Delphi XE7
Код:

program RegistratorLoader;


uses

WinInet, shellapi, windows, sysutils;



function AppVersion: string;

var

dwHandle: THandle;

dwSize: DWORD;

lpData, lpData2: Pointer;

uiSize: UINT;

begin

Result:= '';

dwSize:= GetFileVersionInfoSize(PChar('RegistratorFOG.exe'), dwSize);

dwHandle:= 0;

if dwSize <> 0 then

begin

GetMem(lpData, dwSize);

if GetFileVersionInfo(PChar('RegistratorFOG.exe'), dwHandle, dwSize, lpData)

then

begin

uiSize:= Sizeof(TVSFixedFileInfo);

VerQueryValue(lpData, '\', lpData2, uiSize);

with PVSFixedFileInfo(lpData2)^ do

Result:= Format('%d.%02d.%02d.%02d', [HiWord(dwFileVersionMS),

LoWord(dwFileVersionMS), HiWord(dwFileVersionLS),

LoWord(dwFileVersionLS)]);

end;

FreeMem(lpData, dwSize);

end;

end;



function GetInetFile(const fileURL, FileName: String): boolean;

const

BufferSize = 1024;

var

hSession, hURL: HInternet;

Buffer: array [1 .. BufferSize] of Byte;

BufferLen: DWORD;

f: File;

sAppName: string;

function ExtractFileName(const FileName: string): string;

var

I: Integer;

begin

for I:= High(FileName) downto Low(FileName) do

if FileName[I] = '\' then

break;

Result:= Copy(FileName, I + 1, length(FileName) - I);

end;



begin

Result:= False;

sAppName:= ExtractFileName(paramstr(0));

hSession:= InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,

nil, nil, 0);

try

hURL:= InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);

try

AssignFile(f, FileName);

Rewrite(f, 1);

repeat

InternetReadFile(hURL, @Buffer, Sizeof(Buffer), BufferLen);

BlockWrite(f, Buffer, BufferLen)

until BufferLen = 0;

CloseFile(f);

Result:= True;

finally

InternetCloseHandle(hURL)

end

finally

InternetCloseHandle(hSession)

end

end;



var

NewVer, isCritical, message_: string;

T: Text;

AcceptUpd: Integer;

uTyp: Cardinal;

fl: boolean;



begin

GetInetFile('https://dl.dropboxusercontent.com/###/version', 'version');

AssignFile(T, 'version');

ReSet(T);

ReadLn(T, NewVer);

ReadLn(T, isCritical);

CloseFile(T);

deletefile('version');

fl:= False;

if NewVer <> AppVersion then

begin

if isCritical = 'Critical' then

begin

uTyp:= MB_ICONWARNING + MB_YESNO;

message_:= 'Доступно критическое обновление программы. Обновить?';

fl:= True;

end

else

begin

uTyp:= MB_ICONQUESTION + MB_YESNO;

message_:= 'Доступно обновление программы. Обновить?';

fl:= True;

end;

if fl then

if messagebox(0, PChar(message_), PChar('Обновление RegistratorFOG'),

uTyp) = idYes then

begin

if GetInetFile

('https://dl.dropboxusercontent.com/###/RegistratorFOG.exe',

'RegistratorFOG.new') then

begin

deletefile('RegistratorFOG.exe');

RenameFile('RegistratorFOG.new', 'RegistratorFOG.exe');

end;

end;

end;

ShellExecute(0, 'open', 'RegistratorFOG.exe', nil, nil, 1);



end.

 

 

 

Опубликовано

Скорее всего, такой механизм обновления, когда сначала запускается одна программа, что то скачивает, запускает вторую является подозрительным. 

Посмотрите, как сделано в других решениях и сделайте аналогично. Как вариант - отправить программу в ЛК, что бы там убрали детект на неё.

Опубликовано

Скорее всего, такой механизм обновления, когда сначала запускается одна программа, что то скачивает, запускает вторую является подозрительным. 

Посмотрите, как сделано в других решениях и сделайте аналогично. Как вариант - отправить программу в ЛК, что бы там убрали детект на неё.

Понимаю, конечно же, что код можно как-то "перестроить", чтобы не срабатывало. А вот как реализовано в других решениях? Пробовал и "всё в одном" - тот же эффект. Как сделано в других решениях? Если брать уже готовые продукты - код все равно от пользователя скрыт, а решений в интернете не нашел, которые бы так же, как, например, обновление браузера, Team-viewer'a или флэш-плеера, срабатывали хорошо и без "алертов".

Опубликовано

Выкладывайте на сервере помимо обновленного приложения текстовый файл с его md5. При проверке обновлений выкачивайте md5 и сравнивайте с файлом на компьютере. Если такой алгоритм?

Опубликовано

Выкладывайте на сервере помимо обновленного приложения текстовый файл с его md5. При проверке обновлений выкачивайте md5 и сравнивайте с файлом на компьютере. Если такой алгоритм?

Уточню описание работы моего механизма обновления (хотя по коду в принципе видно). Скачивается файл с информацией о версии, и если она различается с текущей - программа обновляет основной .exe. Если я вместо скачки файла version буду скачивать файл, содержащий контрольную сумму и ее сравнивать - что изменится? Не понимаю, что от этого изменится, но.... попробую

Опубликовано

 

 


Подскажите, пожалуйста, как можно попробовать изменить код, чтобы антивирусы перестали ругаться?
настроить исключения в антивирусах
Опубликовано

Уточню описание работы моего механизма обновления (хотя по коду в принципе видно). Скачивается файл с информацией о версии, и если она различается с текущей - программа обновляет основной .exe. Если я вместо скачки файла version буду скачивать файл, содержащий контрольную сумму и ее сравнивать - что изменится? Не понимаю, что от этого изменится, но.... попробую

Вы интересовались, как у других сделано обновление. Я взял пример с текстового редактора Notepad++. У них приложение запрашивает из сети файл:

http://downloads.sourceforge.net/project/npppluginmgr/xml/plugins.md5.txt

Антивирусы на это дело не ругаются  :)

Опубликовано

@Daemvil,

Варианты для решения проблем с Касперским:

1. Участвовать в Whitelist: http://whitelist.kaspersky.ru/whitelist-for-partners-ru

2. Добавить на каждом ПК с антивирусом приложение в исключения.

3. Изменить механизм обновления приложения.

4. Временно отключить антивирус перед обновлением приложения.

Опубликовано
Решил проблему следующим образом: программа-апдейтер в случае наличия обновлений скачивает главный .exe, изменив расширение на .update. Затем запускает основную программу, которая проверяет наличие файла с расширением .update, и в случае нахождения оного подменяет свой .exe этим обновлением и перезапускается. Антивирусы вроде теперь молчат ))
код:


program RegistratorLoader;
 
uses
  WinInet, shellapi, windows, sysutils;
 
function AppVersion: string;
var
  dwHandle: THandle;
  dwSize: DWORD;
  lpData, lpData2: Pointer;
  uiSize: UINT;
begin
  Result:= '';
  dwSize:= GetFileVersionInfoSize(PChar('RegistratorFOG.exe'), dwSize);
  dwHandle:= 0;
  if dwSize <> 0 then
  begin
    GetMem(lpData, dwSize);
    if GetFileVersionInfo(PChar('RegistratorFOG.exe'), dwHandle, dwSize, lpData)
    then
    begin
      uiSize:= Sizeof(TVSFixedFileInfo);
      VerQueryValue(lpData, '\', lpData2, uiSize);
      with PVSFixedFileInfo(lpData2)^ do
        Result:= Format('%d.%02d.%02d.%02d', [HiWord(dwFileVersionMS),
          LoWord(dwFileVersionMS), HiWord(dwFileVersionLS),
          LoWord(dwFileVersionLS)]);
    end;
    FreeMem(lpData, dwSize);
  end;
end;
 
function GetInetFile(const fileURL, FileName: String): boolean;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array [1 .. BufferSize] of Byte;
  BufferLen: DWORD;
  f: File;
  sAppName: string;
  function ExtractFileName(const FileName: string): string;
  var
    I: Integer;
  begin
    for I:= High(FileName) downto Low(FileName) do
      if FileName[I] = '\' then
        break;
    Result:= Copy(FileName, I + 1, length(FileName) - I);
  end;
 
begin
  Result:= False;
  sAppName:= ExtractFileName(paramstr(0));
  hSession:= InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
    nil, nil, 0);
  try
    hURL:= InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    try
      AssignFile(f, FileName);
      Rewrite(f, 1);
      repeat
        InternetReadFile(hURL, @Buffer, Sizeof(Buffer), BufferLen);
        BlockWrite(f, Buffer, BufferLen)
      until BufferLen = 0;
      CloseFile(f);
      Result:= True;
    finally
      InternetCloseHandle(hURL)
    end
  finally
    InternetCloseHandle(hSession)
  end
end;
 
var
  NewVer, isCritical, message_: string;
  T: Text;
  AcceptUpd: Integer;
  uTyp, res: Cardinal;
  fl: boolean;
  exeName, verName: string;
 
procedure WinExec(const ACmdLine: String; const ACmdShow: UINT = SW_SHOWNORMAL);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  CmdLine: String;
begin
  Assert(ACmdLine <> '');
 
  CmdLine:= ACmdLine;
  UniqueString(CmdLine);
 
  FillChar(SI, Sizeof(SI), 0);
  FillChar(PI, Sizeof(PI), 0);
  SI.cb:= Sizeof(SI);
  SI.dwFlags:= STARTF_USESHOWWINDOW;
  SI.wShowWindow:= ACmdShow;
 
  SetLastError(ERROR_INVALID_PARAMETER);
{$WARN SYMBOL_PLATFORM OFF}
  Win32Check(CreateProcess(nil, PChar(CmdLine), nil, nil, False,
    CREATE_DEFAULT_ERROR_MODE
    {$IFDEF UNICODE} or CREATE_UNICODE_ENVIRONMENT{$ENDIF}, nil, nil, SI, PI));
{$WARN SYMBOL_PLATFORM ON}
  CloseHandle(PI.hThread);
  CloseHandle(PI.hProcess);
end;
 
begin
  exeName:= 'RegistratorFOG';
  verName:= 'version';
  GetInetFile('https://dl.dropboxusercontent.com/u/24818729/RegRepo/' +
    verName, verName);
  AssignFile(T, verName);
  ReSet(T);
  ReadLn(T, NewVer);
  ReadLn(T, isCritical);
  CloseFile(T);
  deletefile(verName);
  fl:= False;
  if NewVer <> AppVersion then
  begin
    if isCritical = 'Critical' then
    begin
      uTyp:= MB_ICONWARNING + MB_YESNO;
      message_:= 'Доступно критическое обновление программы. Обновить?';
      fl:= True;
    end
    else
    begin
      uTyp:= MB_ICONQUESTION + MB_YESNO;
      message_:= 'Доступно обновление программы. Обновить?';
      fl:= True;
    end;
    if fl then
      if messagebox(0, PChar(message_), PChar('Обновление RegistratorFOG'),
        uTyp) = idYes then
      begin
        if not GetInetFile
          ('https://dl.dropboxusercontent.com/u/24818729/RegRepo/' + exeName +
          '.exe', exeName + '.update') then
          messagebox(0, PChar('Ошибка обновления'),
            PChar('Обновление RegistratorFOG'), MB_ICONERROR + MB_OK);
      end;
  end;
 
  WinExec(exeName + '.exe');
 
end.

 

  • Согласен 2
Опубликовано

неверное решение. все решается через

 

 


исключения в антивирусах
  • Не согласен 1
Опубликовано

 

неверное решение. все решается через

 

 

исключения в антивирусах

 

Не согласен, обоснуйте, что это единственно верное решение. Каждый выбирает сам. Например:

1. далеко не на всех машинах антивирусы позволяют добавлять в исключения (настройка автоматических действий при какой-либо опасности)

2. некоторые антивирусы после добавления в исключения через некоторое время снова блокируют программу, а некоторые и вовсе не дают добавить в исключения (пример: mcAfee как-то давно взял и удалил половину моих скомпилированных программ, перенеся на карантин, сказав, что это вирусы, без возможности добавить в "исключения". Правда, потом вернул часть, но осадок остался)) )

3. согласитесь, намного приятней, когда пользователь запускает программу, и сразу все работает, без каких-либо манипуляций с антивирусом. А из-за некоторых мнительных пользователей может пострадать репутация разработчика.

  • Согласен 1
Опубликовано

 

Решил проблему следующим образом: программа-апдейтер в случае наличия обновлений скачивает главный .exe, изменив расширение на .update. Затем запускает основную программу, которая проверяет наличие файла с расширением .update, и в случае нахождения оного подменяет свой .exe этим обновлением и перезапускается. Антивирусы вроде теперь молчат ))
код:

 

program RegistratorLoader;
 
uses
  WinInet, shellapi, windows, sysutils;
 
function AppVersion: string;
var
  dwHandle: THandle;
  dwSize: DWORD;
  lpData, lpData2: Pointer;
  uiSize: UINT;
begin
  Result:= '';
  dwSize:= GetFileVersionInfoSize(PChar('RegistratorFOG.exe'), dwSize);
  dwHandle:= 0;
  if dwSize <> 0 then
  begin
    GetMem(lpData, dwSize);
    if GetFileVersionInfo(PChar('RegistratorFOG.exe'), dwHandle, dwSize, lpData)
    then
    begin
      uiSize:= Sizeof(TVSFixedFileInfo);
      VerQueryValue(lpData, '\', lpData2, uiSize);
      with PVSFixedFileInfo(lpData2)^ do
        Result:= Format('%d.%02d.%02d.%02d', [HiWord(dwFileVersionMS),
          LoWord(dwFileVersionMS), HiWord(dwFileVersionLS),
          LoWord(dwFileVersionLS)]);
    end;
    FreeMem(lpData, dwSize);
  end;
end;
 
function GetInetFile(const fileURL, FileName: String): boolean;
const
  BufferSize = 1024;
var
  hSession, hURL: HInternet;
  Buffer: array [1 .. BufferSize] of Byte;
  BufferLen: DWORD;
  f: File;
  sAppName: string;
  function ExtractFileName(const FileName: string): string;
  var
    I: Integer;
  begin
    for I:= High(FileName) downto Low(FileName) do
      if FileName[I] = '\' then
        break;
    Result:= Copy(FileName, I + 1, length(FileName) - I);
  end;
 
begin
  Result:= False;
  sAppName:= ExtractFileName(paramstr(0));
  hSession:= InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG,
    nil, nil, 0);
  try
    hURL:= InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0);
    try
      AssignFile(f, FileName);
      Rewrite(f, 1);
      repeat
        InternetReadFile(hURL, @Buffer, Sizeof(Buffer), BufferLen);
        BlockWrite(f, Buffer, BufferLen)
      until BufferLen = 0;
      CloseFile(f);
      Result:= True;
    finally
      InternetCloseHandle(hURL)
    end
  finally
    InternetCloseHandle(hSession)
  end
end;
 
var
  NewVer, isCritical, message_: string;
  T: Text;
  AcceptUpd: Integer;
  uTyp, res: Cardinal;
  fl: boolean;
  exeName, verName: string;
 
procedure WinExec(const ACmdLine: String; const ACmdShow: UINT = SW_SHOWNORMAL);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  CmdLine: String;
begin
  Assert(ACmdLine <> '');
 
  CmdLine:= ACmdLine;
  UniqueString(CmdLine);
 
  FillChar(SI, Sizeof(SI), 0);
  FillChar(PI, Sizeof(PI), 0);
  SI.cb:= Sizeof(SI);
  SI.dwFlags:= STARTF_USESHOWWINDOW;
  SI.wShowWindow:= ACmdShow;
 
  SetLastError(ERROR_INVALID_PARAMETER);
{$WARN SYMBOL_PLATFORM OFF}
  Win32Check(CreateProcess(nil, PChar(CmdLine), nil, nil, False,
    CREATE_DEFAULT_ERROR_MODE
    {$IFDEF UNICODE} or CREATE_UNICODE_ENVIRONMENT{$ENDIF}, nil, nil, SI, PI));
{$WARN SYMBOL_PLATFORM ON}
  CloseHandle(PI.hThread);
  CloseHandle(PI.hProcess);
end;
 
begin
  exeName:= 'RegistratorFOG';
  verName:= 'version';
  GetInetFile('https://dl.dropboxusercontent.com/u/24818729/RegRepo/' +
    verName, verName);
  AssignFile(T, verName);
  ReSet(T);
  ReadLn(T, NewVer);
  ReadLn(T, isCritical);
  CloseFile(T);
  deletefile(verName);
  fl:= False;
  if NewVer <> AppVersion then
  begin
    if isCritical = 'Critical' then
    begin
      uTyp:= MB_ICONWARNING + MB_YESNO;
      message_:= 'Доступно критическое обновление программы. Обновить?';
      fl:= True;
    end
    else
    begin
      uTyp:= MB_ICONQUESTION + MB_YESNO;
      message_:= 'Доступно обновление программы. Обновить?';
      fl:= True;
    end;
    if fl then
      if messagebox(0, PChar(message_), PChar('Обновление RegistratorFOG'),
        uTyp) = idYes then
      begin
        if not GetInetFile
          ('https://dl.dropboxusercontent.com/u/24818729/RegRepo/' + exeName +
          '.exe', exeName + '.update') then
          messagebox(0, PChar('Ошибка обновления'),
            PChar('Обновление RegistratorFOG'), MB_ICONERROR + MB_OK);
      end;
  end;
 
  WinExec(exeName + '.exe');
 
end.

 

А если имя файла будет "flashplayer.update" ,то антивирусы опять ругаться начнут  :)

  • Улыбнуло 1
Опубликовано

А если имя файла будет "flashplayer.update" ,то антивирусы опять ругаться начнут  :)

Понять бы еще логику, почему антивирусы блокируют программы, которые такие действия совершают. Ничего зловредного ведь не происходит.

 

Опубликовано

 

А если имя файла будет "flashplayer.update" ,то антивирусы опять ругаться начнут  :)

Понять бы еще логику, почему антивирусы блокируют программы, которые такие действия совершают. Ничего зловредного ведь не происходит.

 

 

На самом деле приведенный код - типичный Trojan-Downloader ... начинать нужно с простого:

1. Не запускать этот код при старте приложения (или в виде отдельного приложения, как в примере), а встроить его в свое обновляемое приложение. Получим одним EXE меньше и меньше реакции от антивирусов. Далее в приложении делаем меню "проверить наличие новой версии", запускающее код проверки версии. При желании можно запускать его автоматом скажем раз в N>5 дней, делая пометку в реестре о дате последней проверки (но никак не при каждом запуске, я как админ большой сети задушил столько подобных обновляторов, которые лезут по 20 раз на дню версии проверять - давно уже со счета сбился... Положительный момент -= антивирус не будет ругаться при каждом старте, даже если его эвристике что-то не понравится

2. Качать обновления с своего сайта, посвященного приложению, а на с файлопомойки типа dropboxusercontent.com

3. Проверять обновления в два приема - сначала качать сведения о обновлении, а в случае надобности потом его самого. Методика обновления в примере уж не обижайтесь, пример того, как не надо это делать ... а если файл например битым скачается например ?! Мы тупо его запустим, даже не зная, что там.

Правильно это делается так:

3.1 на шаге 2 в сведениях об обновлении принимаем не только актуальную версию файла, но и его MD5 (на месте MD5 - любой хеш по желанию) и размер файла

3.2 в запросе подтверждения сообщаем юзеру, что будет закачано N кб (может, у него канал медленный и десмяток бегабайт ему качать не очень хочется), после подтверждения юзером обновления качаем файл куда-то в TEMP. При этом делаем цикл InternetReadFile в отдельном потоке (или вызываем Application.ProcessMessages хотя бы), показываем прогресс-индикатор, чтобы при длительной закачке при тормозном канале было понятно, что приложение не висит, а качает. Для отображения прогресс-индикатора используем размер, полученный на шаге 2

3.3 скачав, проверяем его размер и MD5. Если не совпадает, то был некий глюк закачки - можно попробовать еще раз, если не выйдет - выдать юзеру ошибку, что дескать обновиться не удается (в коде этого нет)

3.4 MD5 совпала - значит, загрузили что нужно. далее приложению нужно обновить самого себя. Это очень просто: 

- удаляем файл *.old в каталоге нашего приложения

- переименовываем свое приложение в *.old (полное текущее имя нашего EXE - Application.ExeName). Убеждаемся, что это сработало (файл запущенного EXE блокирован на удаление, но вот переименовывать его можно без проблем !). Если не может переименовать свой файл, то скорее всего нет прав на это, о чем и информируем юзера и завершаем обновление

- копируем загруженный на шаге 2.3 файл под именем Application.ExeName. Если успешно - хорошо, удаляем копию загруженного файла из Temp, если нет - переименовываем свой EXE назад в Application.ExeName и ругаемся на ошибку

- Сообщаем юзеру, что приложение успешно обновлено и нужно его перезапустить - запускаем приложение Application.ExeName и завершаем работу. Вуаля, запустилась новая версия.  

Файл *.old можно убивать при запуске, если он найдется, а можно и оставить - таким образом всегда после обновления останется предыдущая версия приложения на всякий случай и можно откатиться на нее в случае глюков

4. Добавить к своему приложению цифровую подпись. Наличие ЦП всегда хорошо, хотя и не обязательно.

  • Спасибо (+1) 1

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
  • Похожий контент

    • Couita
      Автор Couita
      Проект в Visual Studio 2019 Winforms с одной кнопкой и пакетом AntdUI вызывает срабатывание антивируса Kaspersky Standard. 
      Первое срабатывание:  VHO:Trojan-PSW.MSIL.Convagent.gen 
      MD5: 17F7D1AFB121CF22F6C93E62134E7681
      Второе срабатывание: not-a-virus:VHO:RiskTool.MSIL.Convagent.gen
      MD5: 44bdb7ae0fb1682e7a5fd23adfa72040
      Является ли это ложным срабатыванием?
    • andrz
      Автор andrz
      Добрый день, коллеги! Первый раз прошу помощи на форуме, так что если что-то делаю не так - поправляйте.
      Суть проблемы:
      Поведенческий анализ (KES 11.8.0.384/KSC 14.0.0.10902) в режиме информирования и с включенной защитой папок общего доступа от внешнего шифрования дает ложное срабатывание при выполнении операций шифрования файлов с использованием КриптоАРМ 5 Стандарт (5.4.4.52)  в общей папке на файловом сервере:
      ----------
      Описание результата: Обнаружено
      Тип: Троянская программа
      Название: HEUR:Trojan.Multi.Crypren.gen
      Пользователь: XXX\YYY (Инициатор)
      Объект: System
      Причина: Поведенческий анализ
      Дата выпуска баз: 11.01.2024 5:41:00
      -----------
      Аналогичным образом KES реагирует на создание резервных копий этих файлов с использованием WinRAR 5.10
      Рекомендация Касперского - внести компьютер в список исключений поведенческого анализа (Список компьютеров, с которых не будут отслеживаться попытки шифрования папок общего доступа).
      Возможно существует другой вариант? Не хотелось бы пользоваться исключениями - а вдруг враг начнет шифровать именно с этого ПК? Прецеденты, к сожалению, были
    • Elly
      Автор Elly
      Друзья!
       
      АО «Лаборатория Касперского» обеспечивает защиту более 220 000 компаний и организаций по всему миру. Гибкая лицензионная политика, широкий спектр услуг по обследованию сети и доработке программных продуктов для особенностей IT-инфраструктуры предприятия делают решения компании привлекательными для крупных корпораций и организаций. Предлагаем вам поучаствовать в викторине о реализованных проектах «Лаборатории Касперского». Участники викторины смогут ознакомиться с интересными публикациями, размещёнными в специальном разделе, узнать о деятельности компании, взаимодействии с крупными корпорациями и разными организациями, а также особенностях внедрённых защитных продуктов. 
       
      НАГРАЖДЕНИЕ
      Без ошибок — 1 000 баллов Одна ошибка — 800 баллов Две ошибки — 600 баллов Баллами можно оплатить лицензии и сувениры в магазине Клуба. 
       
      ПРАВИЛА ПРОВЕДЕНИЯ
      Викторина проводится до 20:00 7 июля 2024 года (время московское).
      Правильные ответы будут опубликованы не позднее 10 дней с момента окончания викторины. Публичное обсуждение вопросов и ответов викторины запрещено. Итоги будут подведены в течение десяти дней с момента публикации правильных ответов. Баллы будут начислены в течение двадцати дней с момента опубликования итогов викторины.

      Все вопросы, связанные с корректностью проведения викторины, необходимо отправлять пользователю@Mrak (пользователей @oit и @Ellyвключать в копию адресатов) через систему личных сообщений с подробным описанием ситуации. Ответ будет дан коллегиальным решением организаторов викторины и дальнейшего обсуждения не предполагает.
      Вопросы по начислению баллов направлять пользователю@Ellyчерез систему личных сообщений.

      Вопросы по викторине принимаются только через личные сообщения в течение срока проведения викторины и не позднее трёх дней после публикации ответов (время московское). Ответы направляются представителем от организаторов викторины через личные сообщения в рамках созданной переписки.

      Администрация, официально уведомив, может в любой момент внести изменения в правила викторины, перезапустить или вовсе прекратить её проведение, а также отказать участнику в получении приза, применить иные меры (вплоть до блокировки аккаунта) в случае выявления фактов его недобросовестного участия в ней и/или нарушения правил викторины, передачи ответов на викторину иным участникам. При ответе на вопросы викторины запрещается использовать анонимайзеры и другие технические средства для намеренного сокрытия реального IP-адреса.

      Вопросы по начислению баллов, принимаются в течение 30 дней с момента подведения итогов викторины. Викторина является собственностью клуба «Лаборатории Касперского», её использование на сторонних ресурсах без разрешения администрации клуба запрещено.

      Участие в викторине означает безоговорочное согласие с настоящими правилами. Для перехода к вопросам викторины нажмите ЗДЕСЬ.
    • MiStr
      Автор MiStr
      Последние несколько дней захожу на форум и всё жду: когда же мы превысим порог в 50 000 сообщений? Судя по активности, это должно произойти скоро. Заснимите скриншот, если кто будет на форуме в момент икс.
       
      На момент написания сообщения всего на форуме около 49 900 сообщений.
    • Ser_S
      Автор Ser_S
      Здравствуйте, возможно ли в KSC 14 настроить обновление б/д устаревших версий KES(например 11.1.1.126)?
×
×
  • Создать...