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

[Продаётся] MorphMePlease - Morpher C\C++ кода

В этой теме можно использовать автоматический гарант!

Например?
Время исполнения, загрузка проца.
Я так понмаю у вас разные режимы морфинга, ведь что бы сбить маски кода надо одно, антиреверс(статический анализ) другое, сбить маски апи вызовов третье, антиотладка четвертое.
Все в одном это конечно круто но может быть излишним. Может стоило бы все это рассматривать как по отдельности так и вместе.
 
Этот морфер работает на уровне исходного кода а не бинарника, т.е изменяет структуру проекта, что б оптимизатор компилятора не вырезали (оптимизировал) новый код, при этом логика конечной программы остается прежней. Ну а дальнейшее твое сравнение не имеет смысла.
Я сравнивал код ДО морфа и ПОСЛЕ. В итоге это два АБСОЛЮТНО разных кода, но логика остается прежней.
Посмотреть вложение 53519
Вот тебе сравнение в диафоре (поморфлена только main функция, зеленое это стандартный crt`ешный мусор), как видим нет ничего общего, кроме имени функции main)

P.S Разреверсить это МОЖНО но СЛОЖНО, цель морфа не в защите кода а максимально "уникализировать" бинарник, с чем этот продукт справляется на все 100%. Лучшая защита это полиморфная вирта и полиформ виртуализация кода (просто вставил свои 5 копеек). В конечном итоге Статику он обойдет на все 100 а рантайм уже зависит уже от вас а не от морфа)
Абсолютно верно, как я уже написал выше, проект хороший и справляется со своими задачами, вот зачем только сравнивать его с оллвм, который вообще не предназначен для морфинга в контексте обхода АВ? Это в корне некорректно. Экскаватор нужен что бы копать землю, а каток что бы укатывать асфальт, совершенно разные и несравнимые вещи, хоть и оба стоят на стройплощадке.

В целом любой способ морфинга (IR, source level, binary level) можно приготовить правильно и красиво. Вопрос затраченных ресурсов. И у каждого подхода есть свои плюсы и минусы, об этом можно написать прямо отдельный пост, и вероятно я так и сделаю чуть позже.
Вот, красиво сказано, с этим согласен на все 100. В общем удачи в развитии проекта.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Все в одном это конечно круто но может быть излишним.
Насколько я понял из постов ТСа - он как раз работал над уклонение от EDR - то есть цель запустится под av\edr а не усложнение жизни риверсера
 
Насколько я понял из постов ТСа - он как раз работал над уклонение от EDR - то есть цель запустится под av\edr а не усложнение жизни риверсера
У ТС есть пост где перечислено много всего что решает его продукт.
 
Я так понмаю у вас разные режимы морфинга, ведь что бы сбить маски кода надо одно, антиреверс(статический анализ) другое, сбить маски апи вызовов третье, антиотладка четвертое.
Все в одном это конечно круто но может быть излишним. Может стоило бы все это рассматривать как по отдельности так и вместе.
Спасибо за интересную идею, так и сделаю.
Насколько я понял из постов ТСа - он как раз работал над уклонение от EDR - то есть цель запустится под av\edr а не усложнение жизни риверсера
Конфиг позволяет гибко настроить параметры морфинга в соотвествии с вашей целью. В контексте EDR, это скорее вторично повлияет, т.к. всё же зависит от способа приготовления софта и кучи других важных нюансов. В качестве обхода эвристиков, эмуляторов, сигнатурных и репутационных движков, это да, тут прямо то, что доктор прописал имхо.

@ Всем спасибо за отзывы и обратную связь. В следующих постах буду описывать отдельные возможности ММП с бенчмарками результатов.
 
Вышло обновление v.1.3.5 и было разослано пользователям. С кем не вышло связаться, пожалуйста отпишите в пм.
Из нового: пофикшены мелкие ошибки, улучшен рандомайз кодогенаратора, добавлена логика генерации api-chain, при которой генерируются правильные логические последовательности winapi вызовов, что благоприятно сказывается на отношении эвристиков и репутационных анализаторов.
Уточнение по стоимости: В связи с повышением курса BTC, текущая цена продукта: 0.18 BTC.

Теперь по реквестам тестов: На том же тестовом проекте для расчета алгоритма Евклида из /threads/73254/post-566875 проведены тесты с замером времени исполнения ДО и ПОСЛЕ морфа:
orig.png

after.png


В плашку скринов вынес количество строк ДО (71) и ПОСЛЕ (5640) морфа.
Тест проводился с помощью функций clock и замером дельты при старте приложения и при завершении:

C:
int main() {
    clock_t start, end;
    /* Store start time here */
    start = clock();
    ...
    /* тут весь код из main */
    ...
    end = clock();
    /* Get the time taken by program to execute in seconds */
    double duration = ((double)end - start)/CLOCKS_PER_SEC;
   
    printf("Time taken to execute in seconds : %f", duration);
}
Исходя из результатов теста на время исполнения видно, что изменения ДО и ПОСЛЕ морфа на грани погрешности.
Стоит учитывать, что имеется зависимость от количества кода в приложении ДО морфа.
Параметр времени исполнения можно регулировать в конфиге с помощью настроек генерации циклов и вложенности.
 
Последнее редактирование:
Исходя из результатов теста на время исполнения видно, что изменения ДО и ПОСЛЕ морфа на грани погрешности.
Интересно увидеть тесты скорости на заморфленом алгоритме хеширования, допустим md5 или sha256, и вызывающемся циклично большое количество раз, допустим 10000 итераций. Там разница во времени выполнения будет существенней. Да и вообще любая криптография или код в котором много циклов будет проседать сильно.
Я думаю самым оптимальным решением будет эвристическое определение коэфициента "скорости" участка оригинального кода, и морфить его в меньшей степени, чем остальной код.
Если количество итераций цикла известно заранее, то тут все просто, а если количество может быть любым, например приходит в цикл извне, то тут определять по природе цикла, либо оставлять для алгоритма морфера подсказки в виде аттрибутов.
Ставил эксперименты, игрался с обфускацией, подразбивал линейные участки кода без циклов, добавлял туда тысячи - десятки тысяч ветвлений, скорость практически не падала.
В то же время такие операции над кодом содержащим циклы, и тем более циклы с большим количеством итераций, просаживали код настолько, что оригинал выполняется за 0.001 сек, а измененый вариант 5-7 сек, просадка по скорости более чем в 5000 раз.
В циклах любые изменения замедляющие выполнение имеют экспоненциальное влияние на скорость.
 
Последнее редактирование:
У кого можно взять разовый морф данным продуктом своего файла? Для тестов живучести/детектов.
Не в обиду тс, но может кто из купивших клиентов захочет выручить и обработает мой файл.
Раздумываю над покупкой, но хочется понять разницу в боевых условиях между текущими криптами и этим чудом.
 
У кого можно взять разовый морф данным продуктом своего файла? Для тестов живучести/детектов.
Не в обиду тс, но может кто из купивших клиентов захочет выручить и обработает мой файл.
Раздумываю над покупкой, но хочется понять разницу в боевых условиях между текущими криптами и этим чудом.
Морфер это не замена крипта. Даже заморфленые файлы нужно криптовать, это только усилит защиту и усложнит анализ алгоритмов морфинга.
 
Морфер это не замена крипта. Даже заморфленые файлы нужно криптовать, это только усилит защиту и усложнит анализ алгоритмов морфинга.
Так без проблем, накрою.
Мне каждый день льют на файлы траф с поиска, приват софт свой.
Вот хочу приобрести и морфер, может тогда с нормальным криптом файлы будут жить не неделю, а месяц ?
В общем, мне нужен тест.
Может сам автор или кто-то из клиентов любезно согласится и накроет разово мой дропер.
 
Я думаю самым оптимальным решением будет эвристическое определение коэфициента "скорости" участка оригинального кода, и морфить его в меньшей степени, чем остальной код.
Если количество итераций цикла известно заранее, то тут все просто, а если количество может быть любым, например приходит в цикл извне, то тут определять по природе цикла, либо оставлять для алгоритма морфера подсказки в виде аттрибутов.
Ставил эксперименты, игрался с обфускацией, подразбивал линейные участки кода без циклов, добавлял туда тысячи - десятки тысяч ветвлений, скорость практически не падала.
В то же время такие операции над кодом содержащим циклы, и тем более циклы с большим количеством итераций, просаживали код настолько, что оригинал выполняется за 0.001 сек, а измененый вариант 5-7 сек, просадка по скорости более чем в 5000 раз.
В циклах любые изменения замедляющие выполнение имеют экспоненциальное влияние на скорость.
На 100500% согласен с озвученными в цитате тезисами. В целом подход к морфу высокопроизводительных функций, таких как шифрование, это особый кейс и к нему нужно подходить индивидуально. Хорошая мысль заключается в том, что если нам изначально известна глубина цикла или количество циклов в цикле, то можно для данного блока кода производить более лайтовые операции морфа. Тут скорее даже нужны эвристики для определния таких узких горлышек. Директивы для морфера тоже рассматриваю как вариант.
Интересно увидеть тесты скорости на заморфленом алгоритме хеширования, допустим md5 или sha256, и вызывающемся циклично большое количество раз, допустим 10000 итераций.
Да, я думаю я сделаю такие тесты, и лучше будет через профайлер копилятора наверно, чтобы прямо видно было все параметры.
У кого можно взять разовый морф данным продуктом своего файла? Для тестов живучести/детектов.
Не в обиду тс, но может кто из купивших клиентов захочет выручить и обработает мой файл.
Раздумываю над покупкой, но хочется понять разницу в боевых условиях между текущими криптами и этим чудом.
Правилами ММП это запрещено, в таком случае пользователь теряет лицензию. Лучше напишите мне лично и попробуем придумать либо тест, либо я более глубоко расскажу как и что происходит, какие профиты даст и для чего лучше применять. Морфер, это не замена криптору, скорее это усиление в тандеме. И чистки криптуемого софта после морфа будут проходить гораздо проще, чем без него.
 
Хороший продукт, немного успел поучаствовать в тестах и помощи в разработке. Октавиан прислушивается к разработке доп функционала и фикса багов, продукт не выглядит сырым. Штука мощная, рекомендую!!!
 
Кто-нибудь знает) Я на связи, пишите в пм)
 
#------------------------------------------------------#
# Code Morpher aka MorphMePlease v2.0
#------------------------------------------------------#

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

У вас должно быть более 50 сообщений для просмотра скрытого контента.

Код:
----------------------------------------------------------------------------------------
CHANGELOG:
----------------------------------------------------------------------------------------
v1.2
+ Добавлена опция генерации серии уникальных морфов через аргумент -n_samples 10, из-за которой будет создано 10 уникальных копий обрабатываемого морфером проекта.
+ Перенастроена опция GenerateOneLineTrashBlocks для правильной работы через конфиг.
+ Перенастроена опция GenerateForLoops для правильной работы через конфиг.
+ Перенастроена опция GenerateWhileLoops для правильной работы через конфиг.
+ Перенастроена опция GenerateIfBlocks для правильной работы через конфиг.
+ Перенастроена опция GenerateSwitchBlocks для правильной работы через конфиг.


v1.2.1
+ Минорные фиксы и оптимизации.
+ Добавлен цветной вывод в консоль для выделения значимых сообщений от морфера.
+ Добавлен хэндлер SEH_TRY/EXCEPT/FINALLY_STMT.
+ Вынесена опция для включения генерации _emit фейк опкод для размывания графа (GenerateFakeEmitOpcodes).
+ Вынесена опция для включения\отключения генерации фейковых try\catch блоков (GenerateFakeTryCatches).
+ Поправлена логика генерации для опции FakeStringsMin\Max.

v1.3:
+ Добавлена опциональная обфускация всех переменных, названий функций на уровне исходного кода (MorphSourceCode).
+ Исправлена ошибка kernel panic при генерации фейковых переменных.
+ Лог файлы вынесены в папку с заморфленным проектом, и называются согласно си\си++ файлам.
+ Исправлена ошибка со строками, когда могла генерироваться строка из одной '\' и нарушать сборку.
+ В catch блоке (try\catch) теперь генерируется тоже уникальный код.
+ Убраны TlsFree и TlsAlloc фейковые WinApi, которые в определенных ситуациях нарушали логику работы кода.
+ Добавлен в тестовом режиме морфер таблицы импорта (IAT) (MorphImportTable).

v1.3.1:
+ Добавлен проход MorphCodeGOTO, позволяющий дополнительно обфусцировать CFG (поток выполнения кода), добавляя не сворачиваемою вариативность, и параметр GenGotoJmpProbability для контроля вероятности в процентах
+ В вывод в итоговую статистику добавлен счетчик подсчета количества goto прыжков.
+ Убраны WinApi TlsGetValue и IsBadReadPtr, которые при определенных обстоятельствах могли приводить к падению в коде. Позже они будут добавлены в неактивные ветки в непрозрачные предикаты.
+ Пофикшена ошибка, когда точка входа комментилась при влюченном MorphImportTable.
+ Из списка фейк апишек таблицы импорта убраны те, которые могли влиять на компиляцию или не присутсовать в более ранних версиях (например Win7).
+ Пофикшен баг с вызовом фукции, наполняющей таблицу импорта, теперь вызов помещен в непрозрачный предикат и не будет вызываться.
+ Убрано переопределение глобальной переменной volatile unsigned INT MAGIC в функции точки входа (main).

V1.3.2:
+ Модифицирован проход шифрования строк, теперь он полиморфный и полностью случайный
+ Убрана RtlUnwind из фейк импорт морфера.
+ Добавлен морфер секций.
+ Добавлен морфер таблицы экспорта (для DLL файлов).
+ Добавлен дополнительный фильтр на проверки уникальности при сравнении (предикат) для гарантированного обхода условия.
+ Добавлен префикс уникализации переменных для разных файлов в одном проекте.
+ Добавлен вывод добавляемых WinAPI функций при активации морфера таблицы импорта.
+ Добавлен вывод добавляемых функций при активации морфера таблицы экспорта.
+ Добавлен вывод добавляемых секций при активации морфера секций.
+ Убрана иниц. непрозрачного предиката _strcmpi, с ней были проблемы при компиляции.
+ Пофикшена ошибка, когда генерировалсь обрезанная строка на конце с '\' символом и влияла на компиляцию проекта.
+ Пофикшена ошибка, когда экспрморфер генерился рядом с вызовов winapi функций: printf("%s", strmorph_0xCA5569) -  (2038 - (980 | exmorph_489_553)); или ExitProcess(0) -  (2038 - (980 | exmorph_489_553));

V1.3.3
+ Добавлен код для генерации выражения Conditional Operator (в конфиге STB_ConditionalOperationVar_13).
+ Обновлена логика GoTo морфера, добавлены новые правила генерации взамен старых.
+ Пофикшена ошибка в expression morpher, когда при logical OR неверно высчитывался результат, что нарушало логику
+ Пофикшена ошибка, когда генерировалась закрывающая скобка в GoTo Morphy.
+ Пофикшена ошибка морфинга для массивов на стэке (значения массивов в квадратных скобках).
+ Пофикшена ошибка приравнивания типов для морфа строк.
+ Пофикшена ошибка в морфере строк, неверно обрабатывалась длина и null terminator.

V1.3.4
+ Пофикшена ошибка в GoTo Morphy, когда генерировались выполнимые условия, добавлена доп рандомизаций.
+ В логику GoTo Morphy после лейбла теперь генерися случайный код.
+ Пофикшена ошибка при одиночном морфе проекта, когда срздавалась доп директория /_0/.
+ Добавлено исключение 4146 в warnings.

V1.3.5
+ Пофикшена ошибка с генерацией одинаковых fake strs в разных си модулях.
+ Пофикшена ошибка с мультиморфингом проекта
+ Пофикшена ошибка с морфере таблицы экспорта (для длл файлов)
+ Пофикшена ошибка с гото морфере
+ Пофикшена ошибка с кодировкой исходных файлов (теперь корректно обрабатываются)
+ Улучшен рандом кодогенерации
+ В логику фейк апи генератора добавлены новые winapi
+ В логику фейк апи генератора добавлены winapi-chains (логика правильных последовательных вызовов winapi)
+ Пофикшены другие мелкие ошибки

V1.3.6
+ Вынес в конфиг в [GeneralOptions] опцию USE_NULLPTR = True (если False, то вместо nullptr будет NULL).
+ Пофиксил ошибку 0xf1bb27b8+fvar123 (без пробела не компилилось).
+ Пофиксил ошибку GetCurrentThreadIdGetLargePageMinimum()

V1.3.7
+ Пофикшен баг с кодировкой на некоторых типах файлов с русскоязычными комментариями в коде, теперь кодировка определяется автоматически
+ Добавлен аргумент -ep "DllUnregisterServer" (прямое указание кастомной entrypoint)

V1.3.8
+ Добавлен клонер ресурсов REsourceR с системных файлов (можно клонировать версию инфо\иконки\другие ресурсы, очищать ориганальные ресурсы, дампить ресурсы с сис файлов)

V1.4
+ Добавлена опция в конфиге ForUnix, она отвечает за установку параметров для морфинга кода под Unix, выключает Windows API, исключает windows-based инклюды и т.д.
+ Добавлена опция в конфиге MorphStdStrings = False, она отвечает за морфинг std::string\wstring строк в исходном коде с учетом рандомизации словаря, каждая генерация пораждает уникальные строки для одинаковых входных.
+ Добавлена опция в конфиге MorphStdStringsSplit = False, она отвечает за морфинг std::string строк в исходном коде с помощью разложения на байты и восстанавливает строку на стеке, порядок уникальный и трешится между строк.
+ Добавлена опция в конфиге [WinApiParams]->UseUser32ApiChains, она отвечает за включение\выключения цепочек винапи, в данном случае user32. Выключать если у Вас не оконное приложение.
** в скором времени такие настройки будут доступны для всех основных системных либ под Windows.
+ Расширен код морфера исходного кода (рандомизация имен локальных и глобальных переменных, функций и т.д.).
+ Пофикшены минорные баги.
+ Пофикшены строки со спец. символами.
+ Произведена оптимизиация кода.

V2.0
+ Добавлен GUI для морфера (pyQt6) с визуальным конфигуратором и описанием каждой опции
+ В гуи добавлены сессии для конфига, можно разные проекты обрабатывать разными конфигами
+ Добавлены новые непрозрачные предикаты (вычислители MAGIC_INT), убраны мат функции
+ Добавлены функции подсчета количества функций, переменных, вызовов, условий, циклов (для статистики эффективности генерации)
+ В ForUnix режиме список непрозрачных предикат расширен до мат функций
+ Изменена логика генерации WinApi
+ В генератор кода добавлены новые (безопасные) WinAPI
+ Убраны небезопасные winapi (работа с указателями и т.д.)
+ Изменения (корректировки для статистически верных генераций) в весах вероятности генерации WinAPI
+ Доработан механизм winapi-chain цепочек, чтобы придать сгенерированному коду вид обычного приложения
- Убран генератор антиэмуляторов (это будет отдельный проект, анонс будет чуть позже)
+ Исправлен баг в движке Expression Morphing, при котором морфленые значения ломались

Реализован удобный GUI и конфигуратор с запоминанием установленных настроек.

mayxqSG.png


tySNVRx.png

1y9FFpB.png

CB7Y4r3.png



Просьба всем, кто приобретал отписаться для получения обновления.
 
Приобрел данный продукт.
В морфере сотня различных параметров генерации, что делает работу с проектом гибким. Также приятно что есть генерация по SID-у и бонусные help scripts от разработчика.
Несколько нюансов:
- Нужно переписывать весь проект под формат морфера.
- Иногда ломается рантайм, нужно вручную проверять стабы.
- Если проект большой (5к+ строк) то генерация займет кое-какое время.
Разработчик постоянно следит за обновлениями, прислушивается к пожеланиям, а также быстро приступает к багфиксу (если необходимо).
По детектам статику обходит, а динамика зависит от вас.
 

Контакт токс 658126F3529CF09FE5A7D8DA2ED15A9F83AA8482BA428E46483A80432CBFDF5BE8531EE05640​

Знакомство через ПМ.
 
Последнее редактирование:


Напишите ответ...
Верх