Создание потока в чужом процессе (x86) управляя x64 программой, через NtCreateThread windows 10

Тема в разделе "FASM", создана пользователем NANO_VIRUS, 1 май 2021.

Метки:
Статус темы:
Закрыта.
  1. NANO_VIRUS

    NANO_VIRUS New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2017
    Сообщения:
    15
    Привет.
    Я хочу создать поток используя функцию NtCreateThread, при этом на user стороне через системный вызов.
    NtCreateThreadEx работает отлично, но мне нужен контроль над созданием стека и возможность создавать потоки на старых версиях windows.
    Вообщем проблема такая.
    Я выделил память под стек, правильно (как мне кажется) заполнил структуры CONTEXT(x64) и INITIAL_TEB.
    По итогу отладки создался поток, регистр eip правильно прыгнул на нужный адрес, а вот регистр rsp заполнялся не правильно, в связи с чем произошел вылет.
    В ходе тестов по заполнению разных регистров в структуре CONTEXT(x64) заметил не состыковки. Например заполняя rax в CONTEXT(x64) одним значением, то в 32 битном процессе вместо eax заполнился ebx. Что выводит к трем вариантом, либо я заполнил структуру CONTEXT(x64) не правильно, либо она изменилась с версией windows(в интернете она никогда не менялась и на оф сайте тож молчок), либо я что-то сделал еще не правильно.

    Структуры и вообще процесс создания потока брал с исходников функции RtlCreateUserThread, брал с разных источников ReactorOS, с исходников слитой windows xp, и еще пару примеров с интернета, но проблема везде одна.
    Сам пишу на FASM. Возможно на текущей версии windows они заглушили этот способ, возможно он работает только через ядро. Подскажите, где правильно копать? Если у кого завалялся рабочий пример, буду оч рад его посмотреть и сравнить, что где и как.
    В заранее спасибки[​IMG]


    И на всякий случай. У меня ну очень особая программа, поэтому я использую вместо оберток системные функции и вызовы, и я точно определенно прочитал табличку на оф сайте, что они могут поменяться
     
  2. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    NANO_VIRUS,

    Не верный подход. У тебя не нэйтив приложение, посему и нэйтив юзать незачем. Вызывай штатную апи, CreateThread(). Уже давно нэйтив потоки не создаются, даже если его создать через нэйтив апи, то он будет не полноценный не совместим с юзер.
     
  3. NANO_VIRUS

    NANO_VIRUS New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2017
    Сообщения:
    15
    незачем или нельзя? Какие проблемы с неполноценностью? Представим что я пишу драйвер
     
  4. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    NANO_VIRUS,

    Поток для норм работы в юзер должен быть юзер, те пройти загрузчик, кернел и гуй. Иначе это будет не полноценный ядерный поток. Нельзя даже представить зачем может быть нужно создавать нэйтив потоки при инжекте в частности.
     
  5. NANO_VIRUS

    NANO_VIRUS New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2017
    Сообщения:
    15
    Они и так создаются под прослойкой юзерных функций, то что я их не юзаю, а вызываю чисто системные вызовы, связано с защитой и еще с дофига вещей, которые нет смысла мне обьяснять, так как вопрос был совсем о другом. И не нужно меня переубеждать использовать прослойку. То что выполняется между прослойкой и вызовом системной функции, я тоже выполняю. Так что я прекрасно понимаю как это работает.

    Мне нужно лишь знать поч не работает либо это не возможно при появлении NtCreateThreadEx с windows vista
     
  6. Indy_

    Indy_ Well-Known Member

    Публикаций:
    4
    Регистрация:
    29 апр 2011
    Сообщения:
    4.775
    NANO_VIRUS,

    > связано с защитой и еще с дофига вещей, которые нет смысла мне обьяснять

    С какой защитой ??

    Если не понимаешь что делаешь тогда иди лесом. Какая разница какой поток в юзер. Нэйтив будет нерабочим. Это всё разобрали задолго до тебя.
     
  7. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    У тебя реально есть 64-битная ХРшка?
     
  8. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    только она консоль и плейстейшн вита, видимо
     
  9. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.574
    Rel, почему хрюша, мб речь о вин2к3. Их много еще встречается. Даже вин2к встречается на рабочих станциях (сам был в шоке, но факт).
     
  10. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    956
    в основном это бухгалтерия или что-то такое, как таргет для всякой малвари - полный капец, впрочем, мастера метерпретера с поиска таких хостов и начинают
     
  11. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.241
    Да понятно, но это такой процент, которым можно пренебречь. Я конечно понимаю, что господам блекушникам куда легче ломать устаревшие всего на каких-то жалких 18 лет системы, но все же. Если уж даже единственный живой спец по ядру XP не знает, чем отличается NtCreateThread и NtCreateThreadEx в плане поведения, то на этом наши магловские "полномочия всё" (с). При всем при этом он еще и из 64-битного нейтив приложения пытается создать поток в 32-битном нейтив приложении, насколько я понял, что вообще могло тут пойти так?
     
  12. NANO_VIRUS

    NANO_VIRUS New Member

    Публикаций:
    0
    Регистрация:
    24 июл 2017
    Сообщения:
    15
    Почему я использую это, мои личные дела, они не должны касаться сути вопроса. Свои шаблонные ответы можешь оставить для других ребят.

    Тему можно закрывать.
     
    cddee3 нравится это.
Статус темы:
Закрыта.