Собственно интересует этот вопрос. Я канеш не тестил, но сугубо чтоб поговорить или мб Вы тестили. Как лучшего всего выполнить шелл код при этом не набирая детекты на сам стаб? Вот я запилил стаб, который антиэмулит, антиотладка, дешифровывает наш пейлод метрепетера и его запускает - ((void(*)())exec)(); Но тут рескан памяти покажет наш стаб и что в его дампе производится данный шелкод. И детект на наш крипт. Как вариант инжектить шелкод - VirtualAllocEx, WriteProcMemory, CreateRemoteThread. При этом после инжекта - стаб удаляется и в теории не набирает детектов. В первом случае хз как сисколами вызывать exec. Можно ли? Второй вопрос. Насколько успешен второй мной описанный вариант? Плюс второго варианта - можно заюзать сисколы, стаб не набирает детектов особых, можно инжектить в любой процесс и т.п. И как лучше всего делать стаб, выполнять шелкод и т.п.? Для своего личного криптинга шеллкодов. И есть ли у Вас экзотические методы обхода детекта в рантайме при таком чуде? --- Сообщение объединено, 16 ноя 2020 --- И еще доп вопрос. Можно ли морфить сам шеллкод? Насколько успешная это идея?
nullPtr, Не понятные мутные вопросы, составленные из не понятных тебе терминов. Какой именно детект, он может быть статик и динамик. Статик - сигнатуры, эвристика. Динамика - та же статика, но детектор получает поток данных от эмулятора, сканера памяти, либо ловушек. > удаляется и в теории не набирает детектов. Это если действие асинхронно относительно скана. > сисколами вызывать exec. Можно ли? Зачем, если готовые апи работают через теже ядерные вызовы. Гемора заработать на плавающиъ структурах интерфейсах, при этом такое бессмысленно. > Можно ли морфить сам шеллкод? А что ты понимаешь под этим термином ?
1. Со статик детектом все понятно. Обхожу на раз два. 2. Интересует обход динамик детекта при рантайме и чтоб на мой стаб не набирал детектов. Проактивка + эмулятор Скорее будет асинхронно относительно скана. Т.е. сперва мы делаем трешген, проходит какое-то время и в этот момент запускаем шелл код. Но в шелл код метрепетера будет добавлена что-то инструкции ввида Sleep(5000). За эти 5 секунд стаб должен удалиться, а инжектнувший шелл код начнет работать уже из под svchost.exe. А тем самым узнать будет сложно откуда инжектился шелл код. Каким-то образом мы должны отследить, что мы под эмулем или нас хукают. Как вариант уже сказал, вызываем сисколы и инжектим код. Под морфингом шелл кода понимаю не только замена инструкции, но трешген и т.п. чтоб хотя бы сигнатурно наш треш был более или менее чист. В приоритете обойти деф, каспер, нод. Ну вобщем топовые аверы. Мне все равно будет ли дальше работать метрепетер или кобальт. Моя задача с обходом запустить шелл.
nullPtr, Шелл это не битовая последовательность отправленная на исполнение прямое, тоесть обычный код имеющий абсолютную адресацию. На 64 в твоём случае любой код это шелл. На самом деле шелл это загружаемая при атаке последовательность, к примеру при ROP. Там нечего морфить, так как это не код, а данные. Так что не понятно о чём идёт речь. > В приоритете обойти деф, каспер, нод. В произвольный момент времени запустится сканер памяти или по триггеру - сервисы и авер запалит. А есчо может у них используются гиперы, тогда сразу запалят, где то слышал что у каспера такое есть, хотя я сомневаюсь. Ну и опоздал ты с такими вопросами лет на 10
Понял Бро, спасибо за разъяснение, все четко и детально А что если инжектить рефлектив dll в котром и есть наш шелл код метрепетера (а после наш dll запускает шелл)? Хотя идея глупая, но временно помочь должна... А так, ты прав. С изобретением сканера памяти все пошло не туда куда надо Лан морфить бинарь или сорцы, но все же --- Сообщение объединено, 16 ноя 2020 --- P.s. все же, буду благодарен за любую инфу как выполнять шел код с минимальным рантайм детектом
Что значит с минимальным рантайм детектом? --- Сообщение объединено, 16 ноя 2020 --- на сколько я понимаю, гипервизор стоит у них на серваках (песочница) логирует вызовы API и тд, работает на основе PageGuard
Шелкод, твой метерпретер - это по сути просто программа. Нет разницы никакой. Это разница только в твоей голове. Любой пэйлоад можно заморфить. Ну почти любой (всё же практика от теории отличается). Кури в сторону трансляторов компиляторных, и наверняка словишь озарение и идеи. Кубик Рубика собирал когда-нибудь? Длл - это такой же код, как и твой шелл, разве что PE-заголовок имеет. Форма не имеет значения. Код или данные? - код как данные. Инжекты - это всё. Этот маленький кусочек, после мусора, перед твоим джампом. Сисколлы или АПИ? И за сисколлами следять и за апи. Мне, в сисколлах удобнее. Но отталкиваться тут надо от другого. От эвристики, с помощью которой тебя будут ловить. Тут надо быть либо медленным, либо дерзким. Медленное - скорее всего поломается само по дороге, а дерзкое - это как под видеокамерами. Видеть и знать, и успеть застопить - это про разное. Всему есть место и время. Для Инди всё не проблема. "что это ядро пишет, либо область расшарена "(с) . А шарить - это преступление? В любом случае, осталось только узнать "Кто?", верно? А потом узнавать рекурсивно Короче, я бы сказал так. Инжект и размещение важнее в разы, чем всякие морфизмы. Если бы не размещение, морф - было бы тривиальной математической задачкой. Но кому тривиальная - а кому "любофЪ". В этом и разница между ресерчем и блэком. В первом случае нечего палить, так как нет криминального поведения.
q2e74, > А шарить - это преступление? Только фразы не нужно из контекста выдёргивать и новый им смысл придавать. Имелся мужпроцессорный обмен между процессами протектора, выполняющихся под общим визором. nullPtr, > Чет в депрессуху ввела эта техна.. Там описана штатная авер вирта, она выполняется в ином процессе и эмулирует системное окружение. Это выводит на ответ по твоему вопросу на счёт сканера памяти - если выполняющийся код разложить на трассу и найти каждую выборку(те обращение к памяти), то в среде вирты она закончится на вирт-стабах: апи во первых. Локально трасса продолжится, но для вирты прекратится тк будет вызван спец шлюз в вирте, тогда вирта вернёт данные, эмулируя апи без их связывания в последовательности выборки; такой вызов я назвал атомом, так как его нельзя разложить на две трассы(cfg/dfg), он не делим https://wasm.in/blogs/softvernye-anklavy.548/ Если есть локальная последовательность выборки(трасса -> адресная трансляция декодером инструкций), тогда во первых можно обнаружить сам атом(вирту), так как данные возникнут ниоткуда, а во вторых скрыть память от любого режима и потока - отобразить невалид область памяти на валид путём подмены выборки. Это значит что при трансляции выборки она изменяется в доверенном потоке и для каждой инструкции отдаются нужные данные. Для любой не доверенной выборки данных в памяти не будет, впрочем как и самой памяти. Это единственный метод антидампа. Но там есть большой подводный камень" - это связано с адресацией из ядра напрямую в анклав, проще говоря если строка в софт анклаве и тольно она выбирается, то при передаче ссылки в ядро eg: MessageBox() будет адресация невалид памяти и всё сломается, посему нельзя произвольное приложение так криптануть", ну разве что создать базу аргументов апи, впрочем мелкие детали. Но не смотря на эти возможности авер запалит само тело такого криптора", поэтому всё равно его придётся как то криптовать. Депресняк надеюсь прошёл, так как ты его забудешь от обьёма инфы Да ну и забыл добавить главное - чем атом связан с анклавом, это невозможность выборки из атома ни напрямую иным модом и виртой, так как в первом случае адресов не существует, во втором выборка закончится на авер атоме. Вот общее между двумя выборками. --- Сообщение объединено, 17 ноя 2020 --- Вот тут пример реализации https://wasm.in/threads/opredelit-ssylki-na-pamjat-v-dinamike.33497/#post-413503 Их было очень много и давно, но это нужно смотреть на rohitab, там наверно сохранилась вся последовательность поиска общего решения, было много промежуточных паблик реализаций.