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

Создание морфера C/C++ кода

secflag

RAID-массив
Пользователь
Регистрация
29.01.2020
Сообщения
51
Реакции
10
Появилась потребность морфить исходный код, немного есть представление, но хочется услышать мнение других.
Возможно, у кого-то есть какие-то материалы, или помощь в конструкции, буду очень благодарен.
Пробовал написать что-то, до генерации ветвлений не дошел :)
 
Я бы посоветовал начать морфить ассемблерный код, так как это проще всего, если ты не знаком с инфраструктурой компиляторов. В настройках проекта при компиляции ставишь пункт генерация ассемблерного листинга, после компиляции у тебя создаются .asm файлы в которых на ассемблере написан тот же самый код, который ты писал на C++, затем ты можешь разбавлять этот код разным трешем и компилировать при помощи masm от студии.
Дальше углубляйся в разбор AST, так ты сможешь морфить на уровне сорцев С++, добавлять ветвления, сложные мусорные конструкции, ложные перемнные и вызовы функций.
После этого у тебя должен быть уже достаточно хороший багаж знаний, что бы вкатиться в морфинг на уровне IR кода, ты можешь брать исходные коды компиляторов, и изменять их так, что бы при компиляции у тебя сам компилятор морфил код.
 
видел, с виду хороший морфер
скорее всего, мне до него еще далеко )))
Он работает на уровне сорцев, разбирает AST (скорее всего, по описаниям автора выглядит так, сам проект не щупал), так что это второй этап из того что я тебе описал выше.
 
Я бы посоветовал начать морфить ассемблерный код, так как это проще всего, если ты не знаком с инфраструктурой компиляторов. В настройках проекта при компиляции ставишь пункт генерация ассемблерного листинга, после компиляции у тебя создаются .asm файлы в которых на ассемблере написан тот же самый код, который ты писал на C++, затем ты можешь разбавлять этот код разным трешем и компилировать при помощи masm от студии.
Дальше углубляйся в разбор AST, так ты сможешь морфить на уровне сорцев С++, добавлять ветвления, сложные мусорные конструкции, ложные перемнные и вызовы функций.
После этого у тебя должен быть уже достаточно хороший багаж знаний, что бы вкатиться в морфинг на уровне IR кода, ты можешь брать исходные коды компиляторов, и изменять их так, что бы при компиляции у тебя сам компилятор морфил код.
Не проще, смысл от такого морфа когда для ав понятно будет что код меньше чем обычно похож на тот что генерит компилятор
 
Не проще, смысл от такого морфа когда для ав понятно будет что код меньше чем обычно похож на тот что генерит компилятор
Давай бро расскажи мне, как проще, как нет, я прошел весь этот путь, сейчас сижу на IR морферах clang и gcc. Что бы дойти до этого, надо начинать с простых вещей, что бы разобраться что и как работает.
То что ты делаешь в самом начале, когда учишься, конечно не будет давать тебе 100% обходы ав, но это опыт, ты учишься, набираешься знаний, и делать это надо по нарастающей, если ты полезешь сразу в инфраструктуру компиляторов ты охуеешь и захочешь забыть это навсегда.
 
можно и не лезть, можно учиться делегировать задачи и не изобретать велосипед, и речь не о MMP или школьном OLLVM
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Немного оффтоп, но если кто вдруг натыкался на интересную инфу по генерации мусорного кода на базе нейронных сетей, обученных на легитимном коде, то скиньте сюда, интересно изучить.

Я из этой серии с ходу вспомнил только одну работу вот этих индусов (там на базе состязательных нейронных сетей сделано было, но я хз, насколько это эффективно на практике):

Давай бро расскажи мне как проще, как нет, я прошел весь этот путь, сейчас сижу на IR морферах clang и gcc.
Имхо на уровне AST есть только одна проблема, что оптимизатор свернет то, что ты нагенерил. Но тут тоже есть несколько трюков, как этого избежать, и они не сложные. На уровне IR все чуточку сложнее, и оптимизатор тут тоже может все свернуть. На уровне асма тебе придется делать разные анализаторы и морферы для каждой архитектуры, и при этом генерировать код, который похож на легитимный код, сгенерированный компилятором. А зачем эмитировать кодом на асме код на Цэ, если можно генерировать код на Цэ, и так далее.
 
можно и не лезть, можно учиться делегировать задачи и не изобретать велосипед, и речь не о MMP или школьном OLLVM
Делегировать задачи я так понял это написать запросик в ChatGPT ? Ха-ха, он тебе не напишет ничего толкового.
MMP достаточно хорош, я наблюдал за проектом, октавиан далеко не школьник, в теме давно, разбирается в своем деле.
А OLLVM действительно говно, потому что это паблик, который выебали уже все кто только мог. Он написан дилатентами, студентами, там нет никаких сложных техник, обычная база, контрол флоу, бцф, вставка мусора, который детектится уже любым авером сигнатурно.
Но если подходить к делу с умом, хорошо изучать матчасть то на уровне IR можно творить чудеса, ты копаешься в ядре компилятора, заставляешь его делать то, что тебе хочется, но это недоступно простым смертным, на это нужно убить много времени.
 
ну к примеру я обзавёлся комерс решением для легит софта для морфа кода о веикая звёздная сила. и с каждой написанной строчкой на Цэ в своём лоадере испытываю чувство сожаления о том что я пишу на Цэ. А всё потому что время сейчас не то когда на сишке писать было хорошо. куда лучше и менее затратно как мне кажется ставить go на хост юзера и запускать того же самого бота через go run. и так далее
 
На уровне IR все чуточку сложнее, и оптимизатор тут тоже может все свернуть.
Не может он ничего свернуть, написать простой модуль для IR это одно дело, его может вернуть оптимизатор, другое дело пересобрать LLVM так как тебе надо, что бы он не мешал твоим модулям делать работу, при этом он будет оптимизировать все остальное, что бы при морфинге не отключать оптимизации, так ты выигрываешь скорость даже в результате очень сильного морфа.
 
Я не о том что легче и тп. я о том что стоит тебе совсем чуть чуть поморфить тот же самые main.go и статика чистая. А с бинарником пока напишешь морфер натив кода пока всё сделаешь уже и солнце взорвётся, и звёзды погаснут
 
ну к примеру я обзавёлся комерс решением для легит софта для морфа кода о веикая звёздная сила. и с каждой написанной строчкой на Цэ в своём лоадере испытываю чувство сожаления о том что я пишу на Цэ. А всё потому что время сейчас не то когда на сишке писать было хорошо. куда лучше и менее затратно как мне кажется ставить go на хост юзера и запускать того же самого бота через go run. и так далее
при чем тут язык? инфраструктура того же LLVM имеет бэкенд и для Rust и для Go и для C++ и для обычного Си. Релизовал морфинг на уровне IR и морфи код на любом из этих языков. Но повторю, простым смертным это вряд ли светит. Тебе надо потратить года 2-3 на изучение инфраструктуры LLVM что бы писать что-то дельное. Большинство малварщиков это низкоквалицицированные кодеры, которые не готовы тратить так много времени на изучение технологий, это скрипткиддсы которые делают Ctrl+C и Ctrl+V
 
при чем тут язык? инфраструктура того же LLVM имеет бэкенд и для Rust и для Go и для C++ и для обычного Си. Релизовал морфинг на уровне IR и морфи код на любом из этих языков. Но повторю, простым смертным это вряд ли светит. Тебе надо потратить года 2-3 на изучение инфраструктуры LLVM что бы писать что-то дельное.
Все мы простые смертные. К сожалению твой морфер IR жизнь тебе не продлит, а только укоротит
 
Все мы простые смертные. К сожалению твой морфер IR жизнь тебе не продлит, а только укоротит
Интересно каким же образом ? Потратил я время на изучение, зато имею ебанутый бэкгрануд за счет этой технологии.
Может вообще не стоит тратить время на изучение и строчить запросы в чатгпт ? Заебись подоходик:)
 
Интересно каким же образом ? Потратил я время на изучение, зато имею ебанутый бэкгрануд за счет этой технологии.
Достойная ли это цена за то, что можно было реализовать за 3 дня используя подход, к примеру go run на хосте пользователя, который не вызовет такого же восторга у форумных пользователей, но результат даст точно такой-же, а скорее всего и лучше. Краткость сестра таланта.

К сожалению (или нет) сейчас время таких вот ботов на электрон, и прочей малвари с очень высоким уровнем абстракции. Вспомним тот же самый повершелл..

Интересно каким же образом ? Потратил я время на изучение, зато имею ебанутый бэкгрануд за счет этой технологии.
Может вообще не стоит тратить время на изучение и строчить запросы в чатгпт ? Заебись подоходик:)
Речь всего лишь о практичности. Из-за неё льют msi на 300 метров что бы обойти гугл алерт, из-за неё нанимают индусов в юса корпы. Нужен немного иной взгляд
 
Достойная ли это цена за то, что можно было реализовать за 3 дня используя подход, к примеру go run на хосте пользователя, который не вызовет такого же восторга у форумных пользователей, но результат даст точно такой-же, а скорее всего и лучше. Краткость сестра таланта.
Конечно достойная цена, самое продвинутое что я реализовал на IR это виртуализация кода во время компиляции, создаются уникальные виртуальные машины, которые морфятся, потом морфится оригинальный код, а потом он накрывается заморфленными виртами, причем есть опционально возможность делать рекурсивную виртуализацию, одна виртуальная машина виртуализирует вторую, она третью, а потом эта адская колесница виртуализирует оригинальный но уже заморфленный код. Но такой подход может очень сильно повлиять на производительность. На выходе получаются файлы которые заливаются на ВТ и имеют 0-1/71 детектов. Почему так ? Потому что все операции происходят на уровне IR, а после этого идет нативная кодогенерация под выбранную платформу, и там генерируются конструкции типичные для обычных компиляторов, весь код выглядит легитимным как будто он собран в обычной студии без всяких морферов.
Стоит ли это потраченного времени ? Конечно же да. Это FUD в статике и защита от ебливых реверсеров, которые хотят либо спиздить твой код, либо понять как он работает.
Проект еще пока на тестировании, много еще не отлажено, работы еще дохера, но он уже показывает пиздатые результаты. Учите матчасть, не ленитесь читать книжки и будет вам счастье.
 
Конечно достойная цена, самое продвинутое что я реализовал на IR это виртуализация кода во время компиляции, создаются уникальные виртуальные машины, которые морфятся, потом морфится оригинальный код, а потом он накрывается заморфленными виртами, причем есть опционально возможность делать рекурсивную виртуализацию, одна виртуальная машина виртуализирует вторую, она третью, а потом эта адская колесница виртуализирует оригинальный но уже заморфленный код. Но такой подход может очень сильно повлиять на производительность. На выходе получаются файлы которые заливаются на ВТ и имеют 0-1/71 детектов. Почему так ? Потому что все операции происходят на уровне IR, а после этого идет нативная кодогенерация под выбранную платформу, и там генерируются конструкции типичные для обычных компиляторов, весь код выглядит легитимным как будто он собран в обычной студии без всяких морферов.
Стоит ли это потраченного времени ? Конечно же да. Это FUD в статике и защита от ебливых реверсеров, которые хотят либо спиздить твой код, либо понять как он работает.
а теперь прими то, что я обладаю точно такими же технологиями, и даже лучше крякнув легал софт и потратил я на это неделю :)
 


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