Многочисленные инжекты

Тема в разделе "WASM.BEGINNERS", создана пользователем Felther, 9 июн 2023.

  1. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Есть загрузчик который содержит x86/x64 бинарники, он должен подгрузить один из бинарников в какой нибудь процесс, потом загрузчик закрывается и бинарник из процесса в который инжектировались должен опять инжектироваться в другой процесс и подгружать он должен уже подходящий бинарник и так до бесконечности. То есть это не простой инжект x86 или x64 бинарника. Если бинарник згрузили в x86 процесс, он должен уметь инжектировать в x64 или инжектировать сам себя в x86,. Хотел бы услышать алгоритм как такое реализовать без костылей, как вот реализовать такую передачу бинарников между процессами
     
  2. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    301
    Создание такого "бесконечного" инжектора с возможностью переключения между x86 и x64 бинарниками требует заметной осторожности и понимания, как работают различные механизмы и архитектуры. Это сложная задача, которую можно разделить на несколько шагов.
    1. Определите архитектуру целевого процесса: Прежде чем инжектировать код, вам необходимо определить, является ли целевой процесс x86 или x64. Это можно сделать, например, с помощью функции `IsWow64Process` из WinAPI.
    2. Создание подходящего процесса: В зависимости от архитектуры целевого процесса, выберите соответствующий бинарный файл для инжектирования (x86 или x64).
    3. Инжектирование кода: Выполните инжектирование бинарного кода в целевой процесс. Для этого можно воспользоваться методами, такими как `CreateRemoteThread`, `QueueUserAPC` или любым другим методом инжектирования.
    4. Управление переключением архитектур: Инжектируемый код должен содержать оба бинарных файла (x86 и x64) и определить архитектуру процесса после инжектирования. Необходимо чтобы инжектированный код мог выполнять следующие действия:
    - Определить архитектуру текущего процесса.
    - Определить архитектуру следующего процесса, в который запланирована инжекция.
    - В зависимости от архитектур, выбрать подходящий бинарник.
    - Инжектировать выбранный бинарник в следующий процесс, используя соответствующие методы.
    5. Гарантия безопасности и стабильности: Подобная "бесконечная" инжекция может вызывать проблемы стабильности и потенциальные проблемы с безопасностью. Таким образом, убедитесь, что код написан надежно и протестирован во всех возможных сценариях. Рассмотрите возможность использования таймаутов и других безопасностных механизмов для предотвращения возможных проблем.
     
    Win32Api нравится это.
  3. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Ну это понятно. Например мы выбрали процесс и определили что он x64 и заинжектили туда x64 бинарник, далее например выбронному процессу нужно инжектироваться в x64 процесс, это без проблем у нас есть текущий образ, просто сами себя копируем, но если нужно инжетировать с выбранного процесса в x86 процесс? В выбранные процесс то мы заинжектировали только x64 бинарник
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.322
    Инжектируй каждый раз оба шелла, склеянные в один буффер, в зависимости от архитектуры выбирай, какой из них запускать. Логично же, не?
     
    Application нравится это.
  5. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Просто как потом получать другой, которые не запускался и находится в буфере, указателя то нету
     
  6. q2e74

    q2e74 Active Member

    Публикаций:
    0
    Регистрация:
    18 окт 2018
    Сообщения:
    998
    Felther, как и с любыми другими rop-гаджетами. почитай практичекий анализ двоичных файлов, там есть. Вкратце - начала ищешь знакомое, потом от этого пляшешь.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.322
    Что значит нету, у тебя два шелла в одном большом буффере, смешение точек входа обоих ты знаешь, что тебе еще надо?
     
  8. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    Felther, а в чём соль? такие инжекты быстро вылетят с ошибкой "нет памяти" и/ль "куда ты лезешь, редиска?". :)
     
  9. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    Mikl___ , TermoSINteZ предлагаю добавить в правила варн или бан за ответы от ChatGPT, иначе форум превратится в помойку.

    Я про пост номер 2 от galenkane
     
  10. galenkane

    galenkane Active Member

    Публикаций:
    0
    Регистрация:
    13 янв 2017
    Сообщения:
    301
    варн за флейм предлагаю так же сделать
     
  11. Felther

    Felther New Member

    Публикаций:
    0
    Регистрация:
    16 май 2022
    Сообщения:
    26
    Не, мне грубо говоря нужно так не в каждый инжектиться. Я так понимаю мне нужно выделять один буфер в процессе чтобы туда вместились два образа, потом их туда записывать. Чтобы потом заинжектить второй образ, выполняясь в первом, достаточно получить размер текущего образа в ntheaders и прибавить imagebase. А как тогда получить потом imagebase, если передавать управление на ep? Или просто управление тогда передавать не на ep, а на специально созданную функцию с 1 аргументом imagebase(как раз на нее можно будет создавать удаленный поток), но тогда на нее нужно получать смещение и как это сделать не экспортируя эту функцию?
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.243
    вообще, можешь соорудить (полу)автомат - параметры инжекта подыскиваются прогой, а ты задаёшь начальные данные: размер буфера и смещения брутфорсить, и переключалка функций инжекта. + один более-менее крупный буфер выделить не всегда возможно, нужно дробить на мелкие части.
    все данные можно в файлик на диске складывать и чрез него передавать любые параметры + подгружать доп код.
    фиии.. да, пущай играются - скоро эту всю хрень отключат (как минимум для доступа простому люду) :)