• Привет !

    На форуме есть зеркало в ТОРе:rusfwz3cukdej7do.onion

    Обратная связь:info@ru-sfera.org

    Всего доброго !

Малварь как искусство Как написать криптор. Часть - 1. Разрабатываем алгоритм (1 Viewer)

Кто просматривает этот контент: "Тема" (Всего пользователей: 0; Гостей: 1)

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
5 409
Репутация
7 899
Telegram


Интересно как сейчас аверы реагируют на крипторы ?

Немножко для тех-кто в "танке":

1)Конструктор(Bulder)
– Будет криптовать наш вирус, запихивать его в конец стаба, в общем-то и вся задача конструктора, имеет как-правило GUI - интерфейс, для упрощения создания "обработанного вируса"!

2)Стаб(Stub) – Это наши «Мозги», он расшифровывает вирус и запускает его в памяти. Часто в стабе реализованны различные приёмы антиотладки, антиэмуляции. В идеале хорошо, если в каждом новом билде "обработанного вируса" был-бы изменённый стаб.

Сделать это можно, например если в креаторе использовать "Генератор мусора - В стаб добавляются не влияющие на исполнение и поведение программы инструкции, либо генерируется немного изменённый код стаба в каждом билде".

Ещё рекомендую прочесть, кто в "танке":Ещё раз про джойнеры, крипторы, стабы и прочую хрень

А теперь основная часть поста:

Кто-нить знает, что будет, если сделать так, методология простого криптора:

Берём вирус, который детектят 64/64, далее конструктором (Тупо форма или консоль) считываем его как массив байт кодов, получится массив байт, далее шифруем его, пусть простой алгос шифрования (Например XOR) c ключом А.

Ключь А - Это у нас будет результат какой-то функции, ну или например можно сделать алгоритм получения нашего ключа в стабе (Пример ниже по тексту).

Далее это всё дело запихиваем в стаб, либо ниже стаба, либо в ресурсы, даже незнаю что лучше ?

Далее если идёт запуск стаба, мы проверяем следующее:

1) Запустил-ли юзер вирус, или используется виртуалка:

Сделать это можно например так (самое простое), например поставить хук на клавиатуру и в бесконечном цикле ждать пока кто-то не нажмёт клавишу, или не шивильнёт мышку, или не нажмёт на клавишу мышки, если событие произошло, значит мы не-под виртуалкой, идём в шаг 2)

2)Шаг два нужно получить наш ключ расшифровки, как это сделать ?

Самое простое, написать простую функцию например, то-что делается выше, если мы под виртуалкой аверов, то будем генерировать число 0xAA, а если мы не под виртуалкой, то сгенерим 0x55 (0x55 и будет наш ключ расшифровки).

Можно в качестве ключа использовать значение какой-то API, главное что-бы не было заметно что-это ключ ! :)

3)Третий шаг, считываем из ресурсов, или то-что ниже стаба, наш шифрованный массив байт.

4)Четвёртый шаг, расшифровываем его, с тем-же ключом (XOR обратный алгос шифрование, что-бы расшифровать, нужно проделать то-же, что и при шифровании с тем-же ключом :)).

5)Далее самое интересное и сложное, нужно запустить вирус в памяти, есть уже готовые функции и методы, на разных языках, но смысл везде примерно такой:

Нужно "порадить новый процесс", как это сделать:

- Например при помощи API - винды CreateProcess, создать процесс;

- Выделить для него память, при помощи VirtualAllocEx;

- Записываем наш расшифрованный вирус (Расшифрованный массив байт) в выделенную область памяти при помощи WriteProcessMemory.

- Далее нужно установить контектс потока, при помощи SetThreadContext и запустить его при помощи ResumeThread.

Вообще это всё реализовано, практически в любом исходнике криптора, пример тут PE-Crypter/runPE.h at master · jozemberi/PE-Crypter · GitHub или на хабре даже есть: Запуск программы из памяти / Песочница / Хабрахабр

Или у нас на Делфи:ВАЖНО - Делаем криптор вместе

Вот вам и алгоритм простого криптора, НО без антиэмуляции, в качестве антиэмуляции тут "Проверка на запуск под виртуальной машины АВ, и-то примитив", понятно что для уменьшения детекта, процедуру расшифровки и запуска в памяти нужно как-то маскировать, что-бы антивирусный сканер до неё не добрался ! :)

Кто-нить использовал это, как современные антивирусы реагируют на такое ?

Если не будет лень и время, то следующая часть реализация этого всего на Visual C++, плюс продумать методы антиэмуляции и генерации ключа, отписывайтесь если есть что сказать ? :)
 

MIXA066

Уважаемый пользователь
Форумчанин
Регистрация
18.05.2014
Сообщения
429
Репутация
130
хотел сегодня как-раз потестить vb6 криптор на последних версиях антивирусов, на факав в прошлом году были тесты, почти все ав пропускали такой крипт, не знаю как сейчас, но что-то подсказывает мне что за год ничего не поменялось
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
5 409
Репутация
7 899
Telegram
хотел сегодня как-раз потестить vb6 криптор на последних версиях антивирусов
А ты с антиотладкой делаешь ?

Ну и ещё такой момент, прикольно-бы сделать что-бы стаб был разный при каждом билде, а-то например ну создал виря, криптонул, залил его на Virustotal, далее стаб добавили в сигнатуры и всё, уже сам стаб нужно чистить, поэтому для массовых атак такое не прокатит...:(

А вот если в каждом новом билде, будет хотя-бы по хэшу разный стаб, тут уже думаю сложнее...

Поэтому при билде стаба нужно менять код, путём добовления всяких там "мусорных" комманд, да банально можно какие-нить ветвления добавить, или "разбавить" вычислениями, можно также "Генератор мусора" сделать...Отдыхай!!!
 

MIXA066

Уважаемый пользователь
Форумчанин
Регистрация
18.05.2014
Сообщения
429
Репутация
130
А ты с антиотладкой делаешь ?

Ну и ещё такой момент, прикольно-бы сделать что-бы стаб был разный при каждом билде, а-то например ну создал виря, криптонул, залил его на Virustotal, далее стаб добавили в сигнатуры и всё, уже сам стаб нужно чистить, поэтому для массовых атак такое не прокатит...:(

А вот если в каждом новом билде, будет хотя-бы по хэшу разный стаб, тут уже думаю сложнее...

Поэтому при билде стаба нужно менять код, путём добовления всяких там "мусорных" комманд, да банально можно какие-нить ветвления добавить, или "разбавить" вычислениями, можно также "Генератор мусора" сделать...Отдыхай!!!
Антиотладка не в крипторе у меня была. По поводу полиморфного стаба на вб6 это довольно сложно сейчас реализовать потому что если брать шаблонный криптор, я пихал туда просто тонны мусора, но аверы всеравно детектили). Я пытался сделать чтобы вирус в стелс режиме работал смех-смех!!!: вся морока с сфх архивами была для того чтобы сам вирус как можно дольше не попадал на вт -> крипт не умирал, в прошлом году крипт жил до 7 дней во время активного распространения. Но там было несколько проблем 1) Из-за подгрузки вируса из облака часть юзеров не получала вирус (аверы например каспер аваст имели в своем блеклисте обменник который я использовал для хранения вируса) 2) Был слишком заумный чек перед загрузкой онлайн части. Там было несколько программ на делфи которые проверяли 1) Не на виртуалке ли мы сейчас 2) Была ли система заражена уже 3) Если все отрицательно программа посылала смд команду с паролем к сфх архиву. После этого он распаковывался и там было несколько скриптов обфусцированных эти скрипты распаковывали еще 1 архив и уже после этого начинала скачиваться онлайн часть. Ну вообще-то это работало, скорее всего большинство юзеров терялось из-за того что обменник в блеклисте. В этом году у меня есть пара идей, попробую сделать чтобы юзеры даже не подозревали что идет заражение, это должно существенно увеличить распространение и живучесть крипта.
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
5 409
Репутация
7 899
Telegram
если брать шаблонный криптор
А что такое "Шаблонный криптор" ?

Типо по этому мануаллу Криптор PE файлов ? Там инжект примерно тот-же, что я описал в алгоритме, его и нужно скрывать, просто так мусор не надо пихать, нужно в определённое место, перед вызовом этой функции, или функции расшифровки...

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

Я сейчас ради интереса другим немножко занимаюсь, делаю простой криптор на С++, там посложнее немножко, ну и к тому-же в сети нет в паблике крипторов на С++, имеется в виду с гуем, антиэмулем и т.д.

Так-что будет почти эксклюзивный контент, ну и может поможет кому разобраться как всё устроенно...i'm crazy

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

Вот если нужно кому, что-то долго тупил на С++

Код:
/*
Процедура считает байты файла, которого нужно обработать и поместит эти байты в строку:
FileString - Выходные данные (Т.е. наша строка.)
*/

void GetFileToString (string full_path, string &FileString)
{   
        std::ifstream is;
        is.open(full_path.c_str(), std::ios::in | std::ios::binary);//ios::binary - бинарное открытие,ios::in - операции ввода

        if (!is)
        {
            std::cout << "Файл не найден";
            return ;
        }

        char buf[512];
        std::string content;

        while (is.read(buf, sizeof(buf)).gcount() > 0)//если количество символов, прочтенных при последней операции неформатированного ввода >0
        {
            content.append(buf, is.gcount());// то добавляем в строку это кол-во символов.
            std::cout << '*';
        }

        FileString = content;
        return;
}
full_path - Полный путь к файлу
FileString - Наш буфер в памяти (строка), в который считается файл.

Пример как юзать:

Код:
string full_path = "C:\\notepad.exe";  //Путь до файла
string FileString;
 
GetFileToString (full_path, FileString); //В буфер памяти поместим наш файл

//**** Что-то делаем с нашей строкой, шифруем, меняем и т.д.

std::ofstream fout("Copy_Notepad23.exe", std::ofstream::binary);// создаём объект класса ofstream для записи и связываем его с файлом

fout << FileString;  //Записываем новый файл на диск
fout.close(); // закрываем файл
В данном случае, если над строкой ничего не делать, то просто будет копия файла...

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

Что касается криптора который я делаю, то это маленькая подзадача, я разбил его создание на подзадачи, вот примерно:

1. Считывать файл в буфер памяти;

2. Шифровать/расшифровывать буфер (Алгос пока не выбрал, но наверное самое простое XOR достаточно);

3. Запуск в памяти буфера;

4. Создание лоадера (Тут объединение наших задач:Считываем шифрованный файл в память, расшифровываем его, запускаем в памяти);

5. Продумывание и реализация примитива антиэмуляции, а это проверка на запуск в виртуальной машине АВ, скрытие функции запуска в памяти и функции расшифровки.

5. Создание гуя, который может добавить в лоадер наш обработанный файл.

Всё, но т.к. у меня не много времени и то-что в паблике чот нихрена не заработало у меня, то хз. когда всё это сделаю, к сожалению много либо приходится самому перелопачивать, либо вообще делать своё, ну и пока-что над notepad.exe эксперементы ставлю...Dmeh-Smeh-Smeh!!!