• XSS.stack #1 – первый литературный журнал от юзеров форума

Как работаю ав, разбор емуляторо

porky365

RAID-массив
Пользователь
Регистрация
02.02.2010
Сообщения
92
Реакции
0
Обход евристики в ваших продуктах.

Бощем статы на форуме у меня нет. Следовательно и работы :) Решил поднять автаритет.

Для разработчиков крипторов посвещается.

Из чего состоит закриптованый файл?
Он обычно состоит из стаба, это код который погрузит уже код закриптованого файла. Обычно стаб распаковывает и расшифровывает, закриптованый код оригинального файла, и ставит на свое место.

Как отсюда понятно, пермутируется всегда стаб, а данные оригинального файла тупо ксоряца.

И так, как нас будут детектить? Тут 2 этапа:
Первый, вас задетектат до запуска евристики, чисто по сигнатурам в стабе и по таблице импорта.
Второй, вы прошли этот момент, но вас задетектила евристика. Как это узнать, сканируете файл на scan4you.org,vitest.com,chk4me.com ( только не virustotal.com) и смотрите если есть слово Heur то это евристика, так же есть другие слов для авиры характерны ZPACK,XPACK,...

Следует понимать, что антивирус анализурует вашу програму какоето время, дальше уже ему побарабану что находится в ее памяти. Интересно сколько это занемает ? Все просто обламайте евристик и сразу это время закончилось. Как это сделать? Читайте дальше...

Самое легкое это пройти первый этап, для этого просто тупо нужно:
1. Пермутируете стаб
Было:
mov var1,0aabbh
Стало:
push 0aabbh
pop var1
2. Делаете рандомную таблицу импорта.
3. Делаете чтобы VirtualAddress и PhisicalAddress секций всегда были разными. Тоже относиться к AddressOfEntryPoint,SizeOfImage
4. Так же в код стаба можно понатыкать рандомных джампов это запутает анализ. Если только вы пермутируете весб код бота, но такое не делают, следовательно реверсеры ставят бряк на кукую нибудь апи, а там уже оиринальный код. Поэтому этот шаг можете пропустить.
5. Энтропия. Есть такой примат SOPHOS, так вот он отпадает сразу как только евристика секций находится в приделах 6-6.5. Больше он ничего не делает.
Тут еще важно следить, соотношение секций. Самое лучшее это 70-80%/30-20% (.code/.data). McAfee очень не любит если секция кода в 2 раза меньше секции данных. Вобщем просто тупо разбавляете нулями, пошифрованый оригинальный код.

Этот минимализм сразу отсеит целую кучу примитивный АВ таких как:
SOPHOS,IKARUS,Prot,Squared,TrendMicro,Secure,Panda,ArcaVir,Webroot,TrendMicro2010,Comodo,Rising,QuickHeal,DigitalPatrol,IkarusT3,AhnLabV3,Emsisoft,SAS

Этап второй убрать минусы с еврестического анализатора, все эти минусы были выявлены путем автоматических тестов, а так же отчасти ручной коректировкой, если этого не сделать евристик даже не дойдет до анализа кода. Он уже сразу за орет

1. IMAGE_IMPORT_DESCRIPTOR не должен находится в секции ресурсов, это не любит никто McAfee,Avira,BitDefender
2. При пермутации не мутируйте инстукции push/pop. Лучше разбавляйте мусором или кодом.
3. У Avira и BitDefender есть список стандарных длл, так вот они не любат когда в таблице импорта, находятся только длл из этого списка. Вот часть списка:

Код:
'olepro32' => 0, //bit
'ntdsapi' => 0, //avira
'rasapi32' => 0, //bit
'shell32' => 0, //bit
'advapi32' => 0, //bit
'oleaut32' => 0, //bit/avira

Список не полный. Полный список не выкладываю, так как это мой хлеб и соль :) Так вот, чтобы бит не орал с авирой просто тупо добавте импорт длл, которой нет в этом списке. Ну например: msimg32.dll. Список не стандартных длл легко создать, просто возмите все длл из систем32 для xp,vista,win7.
И проганите через тесты.

4. Так же им не нравятся некоторые стандартные апи. Все опять же показыввать не буду, но вот некоторые

Код:
GetSysColor - ALERT
GetSysColorBrush  - ALERT
GetUserName - ALERT

И так минусы убраны, этап последний и самый сложный. Это обламать евристик при анализе вашего исполняемого кода. Лично я провер массовые тесты более чем на 600 апи функах, и собрал интересные сведенья. Получилось, что 80% функций могут наебать емуляторы (KIS,Norman,Avira,McAfee,Nod32). Больше всего функций эмулирует BitDefender там только 30%. Но не все. Есть универсальные, которые обламываю все ав. Ну напримет FloodFill.

Код облома прост.
Код:
push <rand>
push <rand>
push <rand>
push <rand>
call FloodFill
cmp eax,0
je _no_emulator

;emulator detected exit!
invoke ExitProcess,0

_no_emulator:
...
А теперь самое интересное. Это узнать почему наш код наебывает евристик. Дело простое ни один ав не выполняет код (бывают исключения, но это в основном). Обычно они просто возвращяют результат. Например NOD32,McAfee всегда положительный. Например вот код:

Код:
invoke LoadLibrary,"someshit.dll"
.if eax
	...McAfee detected
.end
Из этого кода ясно что такой длл попрасту нет! Но макафи возвращает будто они есть. Тем самым и выдает себя. Не всегда нужно проверять eax, часто можно вызывать GetLastError. Так как емуляторы только подменяют результат функи, но не выполняют ее. То они не знают что поместить в статус ошибки, и тупо возвращяют 0 (STATUS_SUCCESS)

Вот еще пример, таких примеров больше 600. Вот 2 кода один обламает нод второй нет:
Код:
invoke MessageBox,0,"text",0,0; нод конретно симулит
.if eax>0
	...Нод коректно возвратит в eax ноль, пожтому сюды мы не попадет, ни при емуляторе, ни при выполнении без
	invoke ExitProcess,0
.endif

invoke MessageBox,<rand>,"test",0,0; обламает и нод и макафи
нод и макфи демают что мы передали валидный хендл, а нет :) 
.if eax>0
	...емулятор сюда перейдет, а реальный код нет, он возвратит 0 и GetLastError()==6(INVALID_HANDLE), только если нету окон с таки хендлом!!!
	invoke ExitProcess,0
.endif
Как показали тесты, обычно ав нормально эмулируют функции, но так как они их не выполняют, то какой код в GetLastError, они не знают :) Этим нужно пользоватся
Код:
push <rand>
push <rand>
push <rand>
push <rand>
call FloodFill
invoke GetLastError; емуляторы возвратят 0(STATUS_SUCCESS), так как код не выполняют, они тупо незанаю что там будет
cmp eax,6
je _no_emulator

;emulator detected exit!
invoke ExitProcess,0

_no_emulator:
...

Вобщем это все. Кому интересно пишите в комментах. Можно еще статью как нибудь написать по обходу Securit Suite, так как там тоже все просто, например всеми известный Каспер, практически не имее фаервола. Он тепо, использует евристик и фильтрует опасыне функи такие как CreateRemoteThread, но при хорошем крипте, вы можете свободно ее юзать, он не спалит.

Вот и все :) Писал не все, но старался. Не судите строго, как никак первый раз.

Зеркала :)
http://exploit.in/forum/index.php?showtopic=46813
 
Darwin
Статья хорошая, молодец!

Нельзя целиком строить защиту только на api функциях, рано или поздно их добавят в базу и будут правильно эмулировать(яркий пример: касперский, разрастающийся как на дрожжах :) ).
Метаморфизм в крипторе - залог успеха.

п.с: Возьмёшся реверсить ав - пиши пм, посодействую в статье.
 
Спасибо, но мои тесты показывают, что каспер тебя наебывает :) Пока идей не пришло как без апи работать :)

Добавлено в [time]1301332897[/time]
Но ты прав однозначно :)
 
интересно было читать хорошую и объемную статью.
Как показали тесты, обычно ав нормально эмулируют функции, но так как они их не выполняют, то какой код в GetLastError, они не знают Этим нужно пользоватся
этот баян против MSSES прокатывает ?
 
accelerator
Каким образом метаморфизм остановит эмулятор?
Никак, она(технология) лишь добавит коду "красоты" :)

Во-первых, эмуляторы не у всех ав присутсвуют, но это другая тема.
Во-вторых, метаморфизм - лишь 1/3 из того, что надо(жел-но) сделать. Остальное приходится на антиэмулятор и правильный pe формат(что забыл - добавьте).
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх