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

Вопрос по дропперу

user_47

(L3) cache
Пользователь
Регистрация
25.06.2023
Сообщения
210
Решения
2
Реакции
93
Гарант сделки
2
Всем привет!

После расширенного тестирования своего недавнего творения (недавно писал про бекдор /threads/139250/) набралась масса косяков. Самый главный из них это зависимости от целых четырёх динамических библиотек:

needs_dll.JPG


Решил всё пообрезать и переделать его в дроппер. Только проблема осталась. При запуске билда на машине со студией всё запускается. На голой винде требует эти библиотеки что на скрине выше. Запускал не только на виртуалках, но и на живых серверах наших "партнёров" из-за океана. Подумал что причина в моём говнокоде.
Взял исходник с форума: threads/87975/ . Там как раз разбирали дроппер на основе WinInet. У меня нечто похожее получилось. И история повторилась полностью. Подкладываешь такие бибилиотеки в папку со скомпилированным билдом, всё работает. Убираешь, вываливает четыре раза оконце с требованием библиотеки и не работает. А мне не хочется качать вдогонку к своему дропперу ещё четыре файла общим размером 3 Мб!!!

Почитал что это за библиотеки. Вроде как они накатываются в систему вместе с Microsoft Studio. Поговорил про это с чатомГПТ. Узнал что бывает статическая компиляция. Перенастроил проект в студии. Собрал. И ожидаемо на выходе получил билд размером под 2,5 Мб вместо 100 Кб первоначальных. :D Нет, новый билд конечно запускается везде и не требует больше никаких библиотек. Но хочется всё-таки имень нагрузку с куда более маленьким размером.

Подскажите как уменьшить размер билда, при сохранении минимального функционала дроппа файлов по сетки на диск хоста.

P.S. код не прикладываю, так как проблема кажется не внём а в подходе к разработке. Кажется пришло время нырнуть в нору разработки малвари поглубже:)
 
CRT весит обычно 90-150 килобайт, я не ебу как ты в мсбилде онли с библиотеками C++ рантайма получил 2.5к мегабайта на выходе. Если ты линковал другие библиотеки из инета то вес само собой будет такой. Поковырйся в настроках, попробуй скомпилировать через консольный мсбилд или вообще через gcc. На худой случай накрой UPX
 
CRT весит обычно 90-150 килобайт, я не ебу как ты в мсбилде онли с библиотеками C++ рантайма получил 2.5к мегабайта на выходе. Если ты линковал другие библиотеки из инета то вес само собой будет такой. Поковырйся в настроках, попробуй скомпилировать через консольный мсбилд или вообще через gcc. На худой случай накрой UPX
скомпилил в студии стандартный хелло волрд. На выходе экзешник также получился почти 2,5 Мбайта. Упикс конечно помогает с размером, но такой билд сразу убивается АВшкой при попытке закачать его на диск.

А вот работа с g++ убирает все вопросы. У простого дроппера100 кбайт на выходе с винапи функциями и подключением wininet. Правда там начинаются вопросы к коду. Так как надо убирать iostream со всеми вытекающими. Но это уже другая история...
 
Привествую. Регулярно вижу такие темы + каждый третий в лс спрашивает про размеры билда.
Кто-нибудь может объяснить в чем концептуальный смысл этой дисциплины?
Есть какая-то реальная задача, с которой софт на 100кб справляется, а на 2.5 мб нет?
 
Привествую. Регулярно вижу такие темы + каждый третий в лс спрашивает про размеры билда.
Кто-нибудь может объяснить в чем концептуальный смысл этой дисциплины?
Есть какая-то реальная задача, с которой софт на 100кб справляется, а на 2.5 мб нет?
какой-то странный вопрос для человека, который вроде как продает лоадер, стилер и внц?
криптовать, клеить, чистить и доставлять. лень подробно было расписывать
 
Привествую. Регулярно вижу такие темы + каждый третий в лс спрашивает про размеры билда.
Кто-нибудь может объяснить в чем концептуальный смысл этой дисциплины?
Есть какая-то реальная задача, с которой софт на 100кб справляется, а на 2.5 мб нет?
Как минимум, по той причине, что LoadPE кастрированная технология и не реализует полноценный загрузчик винды. А если билд весит 2.5мб, то там явно говна всякого намешано, что может препятствовать работе этого кастомного загрузчика. LoadPE это одновременно и возможности крипта и возможность прогружать твой софт другими лоадерами и склейки..
Кроме этого, это возможность грузить твои бинари эксплоитами, там может быть ограниченные в размерах буферы.
Кроме этого, АВ могут цепляться ведь не только к логике твоего кода, но и к логике тех либ, которые ты используешь, а если эти либы используют другие малварщики то умножай эффект х10.
Короче, если твой софт не берет примитивный LoadPE, ты тупо вне рынка. Смысл не в том, что 100кб софт умеет что-то, чего не умеет 2.5мб софт, концептуально смысл малого веса во встраивании твоего детища в общую экосистему и пайплайны: чисток, стадий атак(прогруз на определенных стадиях), криптов, склеек и прочего.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Не знаю, что у вас там за пиздострадания со студией и 2.5мб хеллоуворлдом, но есть предположение, что нужно как минимум включить оптимизацию по размеру и линк тайм оптимизации, чтобы неиспользуемый код из библиотек вырезать. В гцц/мингв это -O3 -Os (оптимизация) -flto (линк тайм оптимизация), ну и не забывать -s (чтобы отладочную информацию из файла удалить).
 
Не знаю, что у вас там за пиздострадания со студией и 2.5мб хеллоуворлдом, но есть предположение, что нужно как минимум включить оптимизацию по размеру и линк тайм оптимизации, чтобы неиспользуемый код из библиотек вырезать. В гцц/мингв это -O3 -Os (оптимизация) -flto (линк тайм оптимизация), ну и не забывать -s (чтобы отладочную информацию из файла удалить).
спасибо друг, теперь то все понятней стало ;)
 
Как минимум, по той причине, что LoadPE кастрированная технология и не реализует полноценный загрузчик винды. А если билд весит 2.5мб, то там явно говна всякого намешано, что может препятствовать работе этого кастомного загрузчика. LoadPE это одновременно и возможности крипта и возможность прогружать твой софт другими лоадерами и склейки..
Кроме этого, это возможность грузить твои бинари эксплоитами, там может быть ограниченные в размерах буферы.
Кроме этого, АВ могут цепляться ведь не только к логике твоего кода, но и к логике тех либ, которые ты используешь, а если эти либы используют другие малварщики то умножай эффект х10.
Короче, если твой софт не берет примитивный LoadPE, ты тупо вне рынка. Смысл не в том, что 100кб софт умеет что-то, чего не умеет 2.5мб софт, концептуально смысл малого веса во встраивании твоего детища в общую экосистему и пайплайны: чисток, стадий атак(прогруз на определенных стадиях), криптов, склеек и прочего.
Тебе школу нужно открывать свою у тебя так хорошо получается доносить информацию, читать тебя одно удовольствие.
 
Как минимум, по той причине, что LoadPE кастрированная технология и не реализует полноценный загрузчик винды. А если билд весит 2.5мб, то там явно говна всякого намешано, что может препятствовать работе этого кастомного загрузчика. LoadPE это одновременно и возможности крипта и возможность прогружать твой софт другими лоадерами и склейки..
Кроме этого, это возможность грузить твои бинари эксплоитами, там может быть ограниченные в размерах буферы.
Кроме этого, АВ могут цепляться ведь не только к логике твоего кода, но и к логике тех либ, которые ты используешь, а если эти либы используют другие малварщики то умножай эффект х10.
Короче, если твой софт не берет примитивный LoadPE, ты тупо вне рынка. Смысл не в том, что 100кб софт умеет что-то, чего не умеет 2.5мб софт, концептуально смысл малого веса во встраивании твоего детища в общую экосистему и пайплайны: чисток, стадий атак(прогруз на определенных стадиях), криптов, склеек и прочего.
кстати добавлю реальный пример про эксплоиты. есть такой метод назван автором thread name calling, в подробности вдаваться не буду оставлю ссылку. так используя этот метод, максимальный возможный размер пейлоада может быть всего 60кб.
 
Последнее редактирование:
Всем привет!

После расширенного тестирования своего недавнего творения (недавно писал про бекдор /threads/139250/) набралась масса косяков. Самый главный из них это зависимости от целых четырёх динамических библиотек:

Посмотреть вложение 108448

Решил всё пообрезать и переделать его в дроппер. Только проблема осталась. При запуске билда на машине со студией всё запускается. На голой винде требует эти библиотеки что на скрине выше. Запускал не только на виртуалках, но и на живых серверах наших "партнёров" из-за океана. Подумал что причина в моём говнокоде.
Взял исходник с форума: threads/87975/ . Там как раз разбирали дроппер на основе WinInet. У меня нечто похожее получилось. И история повторилась полностью. Подкладываешь такие бибилиотеки в папку со скомпилированным билдом, всё работает. Убираешь, вываливает четыре раза оконце с требованием библиотеки и не работает. А мне не хочется качать вдогонку к своему дропперу ещё четыре файла общим размером 3 Мб!!!

Почитал что это за библиотеки. Вроде как они накатываются в систему вместе с Microsoft Studio. Поговорил про это с чатомГПТ. Узнал что бывает статическая компиляция. Перенастроил проект в студии. Собрал. И ожидаемо на выходе получил билд размером под 2,5 Мб вместо 100 Кб первоначальных. :D Нет, новый билд конечно запускается везде и не требует больше никаких библиотек. Но хочется всё-таки имень нагрузку с куда более маленьким размером.

Подскажите как уменьшить размер билда, при сохранении минимального функционала дроппа файлов по сетки на диск хоста.

P.S. код не прикладываю, так как проблема кажется не внём а в подходе к разработке. Кажется пришло время нырнуть в нору разработки малвари поглубже:)
Очень странно как у тебя так получилось, вес слишком уж большой даже для статики, мне кажется всё же да проблема у тебя с сборкой решения. Настрой многопоточную сборку, избавься в коде от CRT замени на WinAPI всё для начала, далее поковыряй оптимизацию как линкера так и компилятора, убери создание таблиц для дебага, убери реаллок таблицу ( многие крипторы её требуют ), манифест тоже можешь убрать если тебе вес важен, метаданные само собой. Я сам под сишкой пишу и у меня проекты даже с большим объёмом кода выходят в 80-100кб ( строк 3-5к примерно если таким подходом компилить и это без /NODEFAULTLIB ). Если цель минимальный размер то надо всё под чистую вырезать, если цель избавиться от зависимостей пили на NT API используя только ntdll.dll и компилируй /MP что бы наверняка. А так возможно ещё ты не на той конфигурации настройки сохранил, допустим на дебаге х86 сохранил, а компилировал в релизе, поэтому тоже глянь этот момент.
 
какой-то странный вопрос для человека, который вроде как продает лоадер, стилер и внц?
криптовать, клеить, чистить и доставлять. лень подробно было расписывать

Как минимум, по той причине, что LoadPE кастрированная технология и не реализует полноценный загрузчик винды. А если билд весит 2.5мб, то там явно говна всякого намешано, что может препятствовать работе этого кастомного загрузчика. LoadPE это одновременно и возможности крипта и возможность прогружать твой софт другими лоадерами и склейки..
Кроме этого, это возможность грузить твои бинари эксплоитами, там может быть ограниченные в размерах буферы.
Кроме этого, АВ могут цепляться ведь не только к логике твоего кода, но и к логике тех либ, которые ты используешь, а если эти либы используют другие малварщики то умножай эффект х10.
Короче, если твой софт не берет примитивный LoadPE, ты тупо вне рынка. Смысл не в том, что 100кб софт умеет что-то, чего не умеет 2.5мб софт, концептуально смысл малого веса во встраивании твоего детища в общую экосистему и пайплайны: чисток, стадий атак(прогруз на определенных стадиях), криптов, склеек и прочего.

Парни, спасибо за ответы.

Про RCE/LCE с ограничением по весу да, соглашусь. По встройке в существующие пайплайны тоже.

Без приколов, хочу поднять этот вопрос на обсуждение, объясню почему его задал: мы в работе используем бесфайловые методы доставки, включая LOTL + при доставке зачастую маскируем лоадер под легитимный подписанный софт. Естественно стейджим. У нас настраиваемый полиморфный билдер.
За все время работы команда ни разу не столкнулась с проблемами крипта/чистки, потому что мы не оперируем этими терминами от слова совсем.
Наш дроппер под первую версию iNARi (которая была еще расширением под браузер, полгода назад) до сих пор не детектится ничем кроме софоса, а по ней били даже самыми дешевыми инсталлами.

Мой вопрос: не кажется ли вам парни, что в наш век бигдаты, нейросетей и повсеместной автоматизации, чем меньше билд - тем проще его анализировать и детектить? А чем он больше похож на легитимное ПО, и чем меньше он выделяется на фоне остальных продуктов под целевую платформу - тем дольше остается вне поля зрения. И вся вот эта "гонка за весом" больше не про вес, а про привычку и паттерны поведения.

Патрик.
 
Всем привет!:)
может быть ты дебаг сборку собираешь?

200кб билды стабильно получаю от msvc

cl ... /O2 /Os /Oi /GS- /GR- /MP
 
Последнее редактирование:
в студии в настройках проекта включи статическую линковку вместо динамической - избавишься от зависимостей рантайма. Собирай релиз версию, а не дебаг - уменьшишь размер. Если хочешь сосвсем уменьшить размер - откажись от crt, для примера - мисиджбох скомпилированный в студии без crt будет около 4кб
 
Парни, всем большая благодарность за инфу! Буду сидеть разбираться. Вся инфа для меня на вес золота, которое я как-будто ковыряю из земли. Трудно, по крупицам, но, чёрт побери, результат очень нравится:)
 
Кроме этого, это возможность грузить твои бинари эксплоитами, там может быть ограниченные в размерах буферы.
Почему бы не использовать маленький шеллкод, который загрузит файл/другой шеллкод 100500кб и запустит с диска/в памяти ? Доп stage никогда не был проблемой.
Кроме этого, АВ могут цепляться ведь не только к логике твоего кода, но и к логике тех либ, которые ты используешь, а если эти либы используют другие малварщики то умножай эффект х10.
Брать готовые статик билды от разработчиков библиотек и линковать к своему коду, если либа популярная, ее сигнатуры по всему миру на куче пк уже есть, детект туда невозможно влепить. Для менее популярных либ или у которых нет готовых сборок от разработчиков, собираем библиотеки сами с морфингом/обфускацией. Да и все это не сильно актуально после крипта, статику он снимает, для защиты в памяти есть свои методы.
А если билд весит 2.5мб, то там явно говна всякого намешано, что может препятствовать работе этого кастомного загрузчика
Смотря что в этих 2.5мб. Даже если там много сторонних библиотек, все это можно подготовить, чтобы собралось без использования seh/tls/delay import и других вещей, которые триггерят неопытных крипторов. Такой файл запустится любым загрузчиком с полтычка.
Все эти ограничения в малвардев пришли из-за неопытности подавляющего большинства крипторов. Они не могут, работа останавливается. Хотя софт свои функции выполняет в чистом виде. Понятно, что мы не в вакууме находимся, и если на рынке нет нормальных крипторов, то кодерам софта приходится прогинаться под эти ограничения. Но если судить обьективно - это косяк крипторов, хорошие решения спокойно грузят даже аномальные файлы. Из публичных я бы взял за эталон upx, он грузит все что угодно, с любым говном на борту. Исходный код открыт. Это должно быть азбукой для любого криптора.


Мой вопрос: не кажется ли вам парни, что в наш век бигдаты, нейросетей и повсеместной автоматизации, чем меньше билд - тем проще его анализировать и детектить? А чем он больше похож на легитимное ПО, и чем меньше он выделяется на фоне остальных продуктов под целевую платформу - тем дольше остается вне поля зрения. И вся вот эта "гонка за весом" больше не про вес, а про привычку и паттерны поведения.
Поддержу, погоня за малым весом как основная цель - это гонка за механическим зайцем на собачьих бегах. Чем больше файл похож на среднестатистический белый бинарь, тем лучше. Все советы убирать CRT, резать вес, и тд. чистой воды бессмыслица, если и без этого файл нормально криптуется.
 
Последнее редактирование:
Пожалуйста, обратите внимание, что пользователь заблокирован
Почему бы не использовать маленький шеллкод
Вряд ли у человека, у которого получается 2.5мб хеллоуворлд получится "маленький шеллкод".

все это можно подготовить, чтобы собралось без использования seh/tls/delay import и других вещей
Но тогда код этих популярных библиотек, на который по твоим словам невозможно поставить сигнатуру изменится, и на нее уже можно будет поставить сигнатуру.

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

Поддержу, погоня за малым весом как основная цель - это гонка за механическим зайцем на собачьих бегах
Я уже несколько раз говорил, вопрос не в том, насколько это нужно или нет, вопрос в том, можешь ли ты это или нет. Если можешь, то ничего тебе не мешает, например, нагенерировать мусорный код, похожий на легитимный, в котором твой условный 10кб лоудер просто растворится. Или же, например, ты не сможешь сам сделать свой шеллкод на Цэ или Плюсах, не зная, как собирать код без стандартных библиотек. Это не то чтобы какой-то бесполезный и непрактичный скилл, как необладающие им, почему-то всегда хотят его представлять.
 
Вряд ли у человека, у которого получается 2.5мб хеллоуворлд получится "маленький шеллкод".
Причем тут он, я хаунту отвечал, и у него думаю хватит скила. Если нужно притянуть большой функционал в одном файле через эксплойт с ограниченным буфером, промежуточный шелл отлично справится.

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

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

Я уже несколько раз говорил, вопрос не в том, насколько это нужно или нет, вопрос в том, можешь ли ты это или нет. Если можешь, то ничего тебе не мешает, например, нагенерировать мусорный код, похожий на легитимный, в котором твой условный 10кб лоудер просто растворится. Или же, например, ты не сможешь сам сделать свой шеллкод на Цэ или Плюсах, не зная, как собирать код без стандартных библиотек. Это не то чтобы какой-то бесполезный и непрактичный скилл, как необладающие им, почему-то всегда хотят его представлять.
Ну и будет у тебя +1 практически бесполезное достижение в копилке. Я когда начинал кодить тоже бегал за супер оптимизациями, и по весу и по скорости. Через время понимаешь, что это баловство. Ну умею, а дальше что, не применяю нигде. Кубок в чулане. Под точечные задачи написать шелл на Цэ это применимо, но таких задач 1 к 1000. В остальном резать вес не нужно, если файл нормально работает и криптуется.
 
Ну и будет у тебя +1 практически бесполезное достижение в копилке. Я когда начинал кодить тоже бегал за супер оптимизациями, и по весу и по скорости. Через время понимаешь, что это баловство. Ну умею, а дальше что, не применяю нигде. Кубок в чулане. Под точечные задачи написать шелл на Цэ это применимо, но таких задач 1 к 1000. В остальном резать вес не нужно, если файл нормально работает и криптуется.
Знания лишними не бывают, так можно сказать про все - "таких задач 1 к 1000, зачем мне тратить на это время"

Собственно вопрос к тебе - а ты сам то что умеешь? Чего добился чтобы выебываться тут

Достаточно быть на уровне upx, который с открытым исходным кодом и доступен каждому мамкиному криптору на изучение. Мне не попадались файлы которые не мог бы загрузить юпекс. Если такие есть, то уже с явнями отклонениями в структуре.
Это уже больше к крипторам, да и для чего тебе столько всего лепить в ехешник, чтобы нагружать криптора?


Обновилась либа -> обнови ее у себя в проекте.
Обновление либы != переписывание ее с нуля
Даже переписывание с 0 не гарантирует что ты не напишешь похожий код
 


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