Сабж. Насколько сейчас, в 2024 году, актуально пытаться выпилить crt из своих "проектов"? В чем смысл такого выпиливания кроме очевидного уменьшения размера?
да ни в чем, даже наоборот, отсутствие crt большой красный флаг для аверов, потому что легитное по часто его имеет, а вот малварь нет, то бишь это неплохой такой знак отличия.Сабж. Насколько сейчас, в 2024 году, актуально пытаться выпилить crt из своих "проектов"? В чем смысл такого выпиливания кроме очевидного уменьшения размера?
Ну так речь то идёт, скорее всего, о малвари (учитывая раздел и контекст вопроса). ¯\_(ツ)_/¯Шеллкод ты не сможешь сделать с CRT.
Если белые проеты, то зачем из них выпиливать crt? Под малварь имеет смысл только для уменьшение размера билда который потом будет "зашифрован" в теле криптованного файла в .data/.text секции, ну и без crt будет чуть меньше энтропия (хотя это еще смотря какой алгоритм шифрования будет использовать криптор). Сейчас лучше вообще не хранить шеллкод в бинарнике а через инет его тащить с серва, при этом домены что б были не новорег а лучше всего с open redirect сайтов по типу как было с amp гугл`а https://www.google.com/amp/s/xss.pro (уже баян).Насколько сейчас, в 2024 году, актуально пытаться выпилить crt из своих "проектов"?
Какие вредоносные вызовы делает crt что б их ав отслеживал? Привычные всем нам хуки уже уходят на третий план, сейчас ав больше надеется на встроенную и на собственную реализацию ETW ну и конечно же он мониторит патчи для etw (EtwEventWrite, NtTraceEvent и тд) и в последнее время еще VEH.Меньше вызовов будет которые авер сможет отследить и уловить
Собрать с /MT а потом обернуть в donut с аргументом /b 1 , и все прекрасно будет работать.Шеллкод ты не сможешь сделать с CRT.
Ага, вот только это называется не "написанием шеллкода" а конвертацией бинарника в шеллкод. Такой бинарь будет минимум 80кб на новых студиях, что для шеллкода не всегда позволительно, тк при экспулуатации каких-либо уязвимостей может быть размер шк жестко ограничен и туда 80кб которые генерируются с /MT тупо не вставишь.Собрать с /MT а потом обернуть в donut с аргументом /b 1 , и все прекрасно будет работать.
Собрать с /MT а потом обернуть в donut с аргументом /b 1 , и все прекрасно будет работать
Не знаю как там в плюсах, но в расте 70% всей стандартной либы доступно без CRT - отсутствуют только платформозависимые фичи (работа с файловой системой/процессами/потоками/...), большинство коллекций, по типу Vec/VecDeque/HashMap (правда в отдельном крейте)/... доступно после реализации глобального аллокатора.Получается, с выпиливанием CRT придется отказаться и от STL? В чем смысл малвари на плюсах, если функционал языка становится урезанным до уровня C с классами?
Ты чего, какие ещё глобальные аллокаторы, какие страшные слова, тут у нас чуваки боятся malloc использовать, у которого под капотом HeapAlloc и который "хз как работает", а ты про какие-то аллокаторы им затираешь.доступно после реализации глобального аллокатора.
С этим согласен. Как работает маллок\фри надо на зубок знать от версии к версии, чтобы кучу корраптить. Уважающий себя малварщик знает кучу и может закорптить кучу чтобы написать червя. например для .rtf Тем более я писал мини статью про фулл-сплойты, что собирают адреса смещения, а люди до сих пор не могут сделать это в том же фортиос. Там даже чел в каком-то топике выложил все гаджеты для разных версий glibc. В винде тоже самое, тем более все давно уже задокументировано, утечки тоже можно получить.тут у нас чуваки боятся malloc использовать, у которого под капотом HeapAlloc и который "хз как работает"
CRT это тормоза... Почему, ну... - Наверное, потому что гладиолус. Наверное, если вызывать HeapAlloc напрямую, а не через прокладки в виде new / malloc, то от этого он станет работать быстрее и аллоцировать лучше. Тут важно понять, что VirtualAlloc не является альтернативой, об этом я распишу ниже. Про маппинг файла на исполнение так же скажу ниже, но если кратко, то описанное называется skill issue или "не осилил", и почему вдруг приведенные им выше функции при нормальном маппинге в память не должны "нормально" отработать, он не объяснил, как и то, как в этот список попали memset и memcpy (насчет rand не скажу, не смотрел имплементацию). Ниже постараюсь без эмоций.CRT это не только размер, но и тормоза, а так же использование неясных и абсолютно не нужных, к примеру new/malloc, которые к примеру хз как кучу выделяют/очищают от версии к версии. Не все функции из CRT нормально отработают (тот же malloc, rand, memset,memcpy и другая хрень), если к примеру маппинг файла на исполнение в памяти делать.
Что касается крипта, да, некоторые крипторы действительно прилинковывают CRT к твоему проекту, потому что это уменьшает количество детектов, почему, я расписывал выше, и да, твой CRT может конфликтовать с CRT крипта, только вот вопрос, а причем тут ты и почему это вдруг стало твоей проблемой? Это проблема криптора, хороший криптор должен знать эти нюансы и уметь их обойти, чтобы конфликтов не было. Я сейчас всё не вспомню, давно было (где-то года 2 назад), но когда я пилил свой "морфер", насколько я помню, основные проблемы у меня были следующие:Если у тебя в проекте црт, и криптор тоже собран с црт, могут быть трудноуловимые нюансы.
На самом деле в винде есть 2 хепа, если быть точнее то Segment Heap и NT Heap, более подробно об этом было в статье на blackhat, если вдруг интересно. Но вообще это не должно иметь никакого значения, даже больше, если вместо HeapAlloc предлагается использовать VirtualAlloc, то это плохой совет, потому что сегодня на это уже даже дефендер дрочит, что можно понять не только пореверсив его, но и например по наличию соответствующего апи, таким образом используя VirtualAlloc вместо malloc / new, ты лишь вызываешь больше подозрений у ав, потому что легитный софт так часто VirtualAlloc не использует. Есть ещё альтернатива - секции, их уже юзает легитное по, тот же хром например, или стим, и вот тут ав будет посложнее, но всё равно, использовать его для частых аллоков тоже такое себе и может вызвать подозрения. Самый лучший вариант написать кастомный аллокатор с монотонно увеличивающимся баффером (и возможно максимальным пределом, после которого будет происходить системная деаллокация) и использовать его, и тормозов не будет, и лишних обращений к непонятному тебе апи. =)использование неясных и абсолютно не нужных, к примеру new/malloc, которые к примеру хз как кучу выделяют/очищают от версии к версии.
Если нормально маппить файл, то никаких проблем не будет. Инициализируй TLS, обрабатывай конфиг директорию (если что, речь идёт об IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG) и либо выставляй __guard_check_icall_fptr / __guard_dispatch_icall_fptr в джампы, либо выставляй битмапы в ntdll (сейчас не вспомню, чекни LdrpValidateUserCallTarget в иде (удивительно, как я помню названия этих функций, но не помню деталей), там всё должно быть понятно), и так далее. Если же под маппингом у тебя подразумевается заресолвить импорты и зафиксить релоки, то неудивительно, что у тебя ничего нормально не работает.если к примеру маппинг файла на исполнение в памяти делать.
С этим согласен. Как работает маллок\фри надо на зубок знать от версии к версии, чтобы кучу корраптить.

Вообще-то, C с классами тебе дает RAII, что уже не мало. Потом есть хоть и ебанутое, но метапрограммирование, лямбды (через которые можно сделать полноценный defer, например, который до Цэ так вроде и не доехал еще) и тд.В чем смысл малвари на плюсах, если функционал языка становится урезанным до уровня C с классами?
Самый обычный линейный конгруэнтный генератор (умножение и сложение с константами по модулю), CRT студии/mingw от glibc отличается только константами a и c.насчет rand не скажу, не смотрел имплементацию