Запуск Ring3 потока из Ring0

Тема в разделе "WASM.WIN32", создана пользователем valinor, 15 июн 2005.

  1. valinor

    valinor New Member

    Публикаций:
    0
    Регистрация:
    7 май 2005
    Сообщения:
    27
    Народ, какие есть методы чтобы сабж сделать?
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
  3. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    valinor

    Не буду читать эти ссылки, скажу сразу, занимался я этим вопросм, метод до ужаса прост, ловил поток юзерского процесса, внедрял туда код вызова CreateProcess, выполнял, возвращал управление в прежнюю точку и продолжал поток - донор дальше. Скажу сразу, в одном из номеров архива NT Insider была статейка, про этот сабж, конкретно там вызывалась некая r3-функция и выполнялась в ринг0. Но, должен предостереч вот от чего,, дело в том, что код r0 это как правило хорошо отлаженыый и функционирующий по определенным правилам, чего нельзя сказать о коде r3. Так что, если к примеру произойдёт деление на 0, то никакие Seh не спасут, ждёт только одно - BSOD.



    Блин, дописать надо драйверок, что то там со стеком пользователя, работает через раз.. блин ...
     
  4. valinor

    valinor New Member

    Публикаций:
    0
    Регистрация:
    7 май 2005
    Сообщения:
    27




    То есть ты как-то подменял EIP пользовательского режима? Как это можно сделать кроме подмены адреса возврата из системного вызова? И опять же, такой метод не универсален, ведь системные вызовы делаются по разному в разных NT (в 2к - через int, в xp+ - через syscall)
     
  5. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    valinor

    > xp+ - через syscall

    насколько я знаю,

    в xp системные вызовы делаются и через syscal, и через int

    попробуйте. должно сработать.
     
  6. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    я пробовал - работает.
     
  7. CARDINAL

    CARDINAL Member

    Публикаций:
    0
    Регистрация:
    23 янв 2004
    Сообщения:
    551
    Адрес:
    Moscow
    kaspersky

    valinor

    да, делятся, если процессор поддерживает fastsyscall, так вот, :) это значения не имеет, кроме того, к примеру, есть возможность менять точку возврата непосредственно при выходе из KiSystemService, если процессор поддерживает и использует fastCall, то , тем не менее, int 2e содержит правильый адрес функции KiSystemService. Кроме того, не стоит забывать, что это организует нам немалый геморой при толадке айсом, так как последний ни разу не любит перехваитить системные вызовы, заменить их своими обработчиками:), таким образом придётся прибегнуть к непосредственному поиску KiSystemService обработчика в памяти и перехватить его :). Я разработал универсальный метод, не хочу пока выкладывать сырцы, всё тешу себя надеждой их доработать и закончить статью, но, я думаю, вы без труда организуете этот метод самостоятельно, если есть интерес, к тому же там всё очень примитивно и просто:)

    Но, скажу одно- работает же блин :))