инжект из кернел мода

Тема в разделе "WASM.NT.KERNEL", создана пользователем qwqwqwqw, 13 апр 2009.

  1. qwqwqwqw

    qwqwqwqw New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2009
    Сообщения:
    54
    интересуют готовые рабочие примеры инжекта в юзермод ....

    например для запуска процесса .......................
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Полуготовое есть здесь.

    Не понял, при чём здесь инжект и запуск процесса? Тебе нужно внедрение кода или создание процесса? Не понятно.
     
  3. qwqwqwqw

    qwqwqwqw New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2009
    Сообщения:
    54
    нужно внедрить код ...
    он будет работать в юзермоде ... и целью этого кода является создание процесса ... (createprocess)
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Аттачься к csrss, запиши код и передай управление, в чём проблема ?
     
  5. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Clerk
    привет, как передать управление стабильнее всего (без апц) на код? я подумывал перехватить что-то вроде KiFastSystemCall но жаль этой точки в 2к нету. (с учетом внедрения в запущенный процесс).
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Зависит от того, откуда исполняется инжект. Если IRQL = PASSIVE_LEVEL, то просто передать управление(Iret etc.)
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Clerk
    Если текущий поток создавался как ядерный, а ты делаешь iretd, то могут быть проблемы с TEB и прочей юзермодной ерундой, которая не заполняется для ядерных потоков. Я пробовал) Там немножко извратиться придется и в конце концов проще так не делать, как оказалось.
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Great
    Разумеется что необходимо создать стек, TEB, инициализировать его и пр. Это проблемно сделать изза того что нужна совместимость с разными версиями. Раз APC не подходит, значит нельзя создавать поток, так как он и начинается с юзермодной апк. Всё вручную делать.
    На самом деле Грит прав, проще в контексте чужого потока исполниться, темболее что весь нужный функционал или экспортируется, либо весьма просто находится. Насчёт передачи управления лучше чем напрямую инструкцией Iret не придумать.
     
  9. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    Clerk
    чем обычный джапм не устраивает?
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Exp10der
    А что ядерный селектор кода и стек на юзермодные менять не нужно ?
     
  11. Exp10der

    Exp10der Мастер дзена

    Публикаций:
    0
    Регистрация:
    27 авг 2007
    Сообщения:
    337
    Адрес:
    Красноярск
    Clerk хм.. не подумал =)
     
  12. Medstrax

    Medstrax Забанен

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    673
    sysexit?
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Medstrax
    Знаете такую инструкцию ?, тогда должны знать что она делает. Флуд пошёл уже.
     
  14. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    1. Запиши код вызова CreateProcess в а.п. CSRSS.
    2. Создай поток в процессе CSRSS, адресом точки входа укажи код, записанный на предыдущем шаге.

    Если опустить детали, то это всё, что тебе нужно.
     
  15. asd

    asd New Member

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    952
    Адрес:
    Russia
    Запусает по 10 потоков в каждом процессе. Бывает падает, ибо до ума так и не довёл.
     
  16. qwqwqwqw

    qwqwqwqw New Member

    Публикаций:
    0
    Регистрация:
    25 мар 2009
    Сообщения:
    54
    а нельзя ли возложить инжект на
    KeUserModeCallback
    ?
    тоесть выполнить код в контексте процесса типа систем
     
  17. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Этот способ имеет ещё больше ограничений, чем даже APC. Тебе оно надо? Зачем ты лезешь в такие дебри? Это может быть полезно разве что для изучения ядра, но никакой практической пользы не несёт. Когда нужно коммерческое и стабильное решение - следует брать то, что проверено и наиболее документировано. В данном случае я бы рекомендовал банальное создание потока, как я и писал чуть выше, это совсем не сложно.
     
  18. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    qwqwqwqw
    http://twister.rootkits.ru/sources/ke_user_mode_callback.rar
    Зачем палицца, потоки создавать.. Перечисляем потоки, например PsGetNextProcessThread() чтоб вручную списки не юзать, суспендим каждый, получаем контекст, сохраняем гдето Esp(например в TEB или выделяем под талицу память), сохраняем контекст в стеке, загружаем Eip на свой код. Ждём когда код получит управление. Когда это произойдёт взводим атомарно проверяем и взводим флажёк. Если он взведён восстанавливаем контекст и возвращаемся, для того чтоб только один поток исполнил код. Никаких замут с инициализацией чеголибо, этим не спалят при проверке TID в какомнибудь модуле, сообщив что обнаружен паразитный тред..
    Для процессов типа smss, в котором потоки никогда не выходят из состояния ожидания придётся использовать коннект на порт, подобное может понадобится и для csrss, дабы вывести поток из состояния ожидания.
     
  19. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Что ж вы всё через жопу хотите делать. Ты ж человеку реально геморрой предлагаешь. Я предлагаю простой способ, основанный практически полностью на частично документированных API ядра. А палевность... Ну конечно, если пишете малварь, то туда вам и дорога - в жопу с её геморроем, а если нормальное приложение (что-нибудь секурное, например, или прикладное, мало ли) - почему нет?
     
  20. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Помоему APC вполне хватит для решения задачи топик-стартера.