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

Поиск аномалий в PE EXE

Да ладно вам, без запуска(эмуляция тоже сапуск в виртуальной среде) грошь цена таким сканерам. Это совершенно бесполезный инструмент, импорт какой угодно можно запилить, также и всё остальное.
 
Импорт генерируется случайно. Что именно подозрительно ?
Думаю стоит разбавить апишками из кернела, гди32, юзер32 и т.д.
т.к. только нтдлл в импорте, да и такой диапазон Nt* функций 100% вызовет подозрение...
Если не после первого генеринга сэмпла, то 10 таких сэмплов чисто с нтдлл вызовут подозрение. Вообщем рандомизация импорта сама по себе интересная весч и к ней нужно отнестись с особой продуманностью процесса. Лучший вариант генерить по логике, как например у стандартных виндовых приложений в системной папке.
Интересна реализация генератора versioninfo, вы её заменяете сгенеренным res файлом с произвольными данными или именно программно в ехе генерите?

Без эмуляции кода любая тулза будет функциональна не более чем какой нить PeTools...
А реализация достойного кодоэмулятора довольно не простая затея...
 
demien
А реализация достойного кодоэмулятора довольно не простая затея...
Да не, это очень простая затея. Раскодировка инструкций и их исполнение. Проблема в производительности - в идеале каждый сабж должен запускаться в своей первичной среде. Это можно реализовать, к примеру сделав клон лодера системного, но тут есть две не приодолимые на данный момент проблемы:
1. Авер слишком туп.
2. Эмуляция требует многа времени.
Учитывая два эти фактора рабочий годный продукт реализовать в принципе не возможно.
 
Прикрутить дизасм длин инструкций и выполнять их это еще не эмулятор (ну в смысле не полноценный:)). Проблема в поддержке любого кода в идеале, обход любых уловок для остановки кодаэмуляции.

p.s. Не даром уже столько времени аверы достойно код разковыривать автоматически не могут, обламываясь на банальных результатах выполнения апишек...
p.s.s. В целом с вами согласен. Реализация полноценной вм с эмуляцией всей системы да с минимальной задержкой, как в ориг. системе в принципе не возможна.
 
Думаю стоит разбавить апишками из кернела, гди32, юзер32 и т.д.
т.к. только нтдлл в импорте, да и такой диапазон Nt* функций 100% вызовет подозрение...
Если не после первого генеринга сэмпла, то 10 таких сэмплов чисто с нтдлл вызовут подозрение. Вообщем рандомизация импорта сама по себе интересная весч и к ней нужно отнестись с особой продуманностью процесса. Лучший вариант генерить по логике, как например у стандартных виндовых приложений в системной папке.
В скрипте базово заданы 5 дефолтных библиотек: ntdll, kernel32, user32, advapi32, gdi32. При каждой генерации сэмпла псевдослучайно выбираются апи из списка и генерится таблица импорта.

Вот к примеру другой сэмпл:
http://zalil.ru/32809449

Интересна реализация генератора versioninfo, вы её заменяете сгенеренным res файлом с произвольными данными или именно программно в ехе генерите?
PHP скрипт при помощи заданного шаблона генерит таблицу ресурсов согласно PE формату.
 
Сейчас таблица импорта выглядит куда лучше, но вашу сгенеренную версию ресурса упорно не хочет открывать ресторатор и говорит что "corrupt resource".
Кстати вы линкер ведь тоже рандомно генерите? 155.53 - палевно :)

что я и имел ввиду, что к генеренгу нужно отнестись со всей серьезностью :)
 
Suspicious section names, TLS exists, The last section is executable, first section writeable, Any section is write & executable, less than 16 data directories, import table in uncommon section, entrypoint on section start, no richdata, ...

Also just look at all the things that look wrong here:
Код:
C:\Users\asf\Desktop\malware\citadel\5ef7721b2ff9f51200e662e0150422a2.dat
File type:x86 PE32
	Entry in last sec

	UPX0 found as 0
	UPX0 is write- and executeable.
	UPX1 is write- and executeable.
	First sec writeable
	1st rawsize 0
	Importsec: .rsrc 3072
	KERNEL32.DLL
  LoadLibraryA
  GetProcAddress
  VirtualProtect-->10
  VirtualAlloc-->5
  VirtualFree
  ExitProcess
	msimg32.dll
  AlphaBlend
	user32.dll
  DdeGetData
	userenv.dll
  LoadUserProfileW
	version.dll
  VerQueryValueA
	winmm.dll
  mmTaskYield
	wtsapi32.dll
  WTSFreeMemory
7 with 12 Funcs
Entropy UPX1 5.54313
Entropy .rsrc 2.19395
 -> 145
 
Не тупите народ, тут ав делит библиотеки на 3 вида.
1. Известные стандартные
2. Известные не стандартные
3. Не известные

Если есть хотя бы одна не известная, то может сразу сбить детект по импорту. Про остальные мне влом писать, тут просто надо експерементировать, у меня есть все таблици для этого
 
Вот результат работы скрипта(без лоадера, просто каркас):


Ф-ции:
- Метаморфный стаб.
- Случайная таблица импорта(с валидными апишками).
- Случайная таблица ресурсов.

Из минусов:
1)Неполный список валидных апи под Windows Seven.
2)Несовершенный генератор мусора(зашкаливает энтропия).
3)Отсутствует генератор таблицы ресурсов.

Оставляйте ваши мнения, критику.
 
эм...
Linker version: 224.127 , это не нормально, стоит выставить диапазон реальных версий линкеров.
Неполный список валидных апи под Windows Seven.
зато есть невалидные :). "Точка входа в процедуру Wow64Win32ApiEntry не найдена в библиотеке DLL advapi32.dll" не о чем не говорит?) (моя вынь 7ка х64)
за опенгл в импорте тоже хз... есть сомнения. в целом импорт более менее... но можно еще правдоподобность улучшить.
теперь за ресурсы: в RCdata подозрительный весчи.... я незнаю какой компилер бы так делал...
Version info - corrupt resource
иконка вроде норм... но нужно больше расширений...
как то так
 
Linker version: 224.127 , это не нормально, стоит выставить диапазон реальных версий линкеров.
Поправимо, не проблема. Подскажи реальные диапазоны с разбросом по разным линкерам.

зато есть невалидные
Такой апи попросту в Win Seven нету, потому что все тесты проводились под xp sp3.

теперь за ресурсы: в RCdata подозрительный весчи.... я незнаю какой компилер бы так делал...
Я же написал: "3)Отсутствует генератор таблицы ресурсов.".

Осталось только приделать pe лоадер к проекту.

demien
А так, помимо вышесказанного, есть ещё советы ?
 
помимо..
1. не понятно к чему оверлей?
2. можно выставлять реальную crc у файла
3. далее стоило бы определиться под какой компилер косить, и генерить примерно его стартап код.
4. те апи что сгенерились в импорте юзаются в коде... это хорошо... главное со статистикой не прогадать...
5. например если косить под борландовский стиль, то время стоит записать такое: 2A425E19, никак ни CA0686AC (2077 год? палево епть...)
6. линкер если под борланд косить в диапазоне от 2.25 по 8.0, причем не плохо было бы учесть подверсии.
7..
8...

Осталось только приделать pe лоадер к проекту.
как планируешь реализовать хранение файла...?
 
1. не понятно к чему оверлей?
Побочки от неоттестированного генератора ресурсов.

2. можно выставлять реальную crc у файла
CheckSum ?
Стоит подумать над этим.

3. далее стоило бы определиться под какой компилер косить, и генерить примерно его стартап код.
Под сишный компилятор наверное.

как планируешь реализовать хранение файла...?
Из вариантов: либо в дата секции, либо в ресурсах.
 
да чексума. большой физический размер дата секции - дофигищща heur'ов от разных ав... а если в ресурсах - на 99% появится если не будет уже сразу авира со своими мегодетектами...

а как с загрузчиком хочешь поступить? криптовать и хранить как шеллкод либо миксить с мусором и\или морфить?
 
а как с загрузчиком хочешь поступить? криптовать и хранить как шеллкод либо миксить с мусором и\или морфить?
Ещё даже не думал...
М.б в жабу перенести наше общение ?
 
За всё это время поправил:
1)Linker Info.
2)TimeDataStamp.
3)Не стал высчитывать CheckSum, т.к ав относятся к этому полю неравнодушно.
4)Лоадер вместе с файлом прячу в секции данных.
Файл запакован, энтропия скорректирована.

Сейчас осталось только два нюанса:
1)Ав очень часто палят по рандомному импорту, нужен другой список.
Возможно стоит брать из системных библиотек.
2)Высокая энтропия(в пределах 6-6.5) у секции кода.
Думаю сейчас стоит ли вообще генерировать компилятороподобный код или
уже просто создавать мусор масками.

Ф-ции, которыми на данный момент обл-ет EXE Packer:
- Генератор мусорного кода:
I)Выбор генерируемых рег-ов.
II)Fake Api Calls.
- Случайная таблица импорта.
- Случайная таблица ресурсов.
- Fake Rich сигнатура.
- Базонезависимый лоадер:
I)Морф: пришлось разбирать каждый опкод и писать аналог дизассемблера длин.
II)Отдельный генератор мусора для лоадера, чтобы в памяти не было никаких
сигнатур.
 
demien а что удивительного в пыхе? на скриптовухе такое писать быстрее, проще, удобнее. я делаю криптор щас, генерация мусора, антиэмуляции и т.д. на PHP, Апишки в Mysql лежат.
 


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