драйвер или sysenter?

Тема в разделе "WASM.BEGINNERS", создана пользователем goga2007, 30 июн 2007.

  1. goga2007

    goga2007 New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2007
    Сообщения:
    184
    добрый вечер.
    начал читать тут некоторые статьи о драйверах режима ядра и возник вопрос имеет ли смысл писать драйверы (чтобы, например, отключить антивирус=)), разве нельзя попасть в ринг0 с помощью sysenter и вызывать нативАпи ?...в чем проблема?
     
  2. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    Регистрация:
    11 сен 2006
    Сообщения:
    1.426
    хочешь сказать, тысячи людей - дураки, один ты такой умный?
     
  3. goga2007

    goga2007 New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2007
    Сообщения:
    184
    ...совсем не хочу этого сказать, просто не понятно что им мешает...
    ...может я дурак?..
     
  4. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    читай статьи дальше
     
  5. EP_X0FF

    EP_X0FF New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2006
    Сообщения:
    450
    Нет нельзя. Внимательно почитай про архитектуру Windows, уровни привилегий. А так вопрос из рубрики "Юмор".
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    На самом деле вопрос автора не лишен смысла и ответ - можно =)
    Через одну функцию юзермодную можно установить MSR, заведующий SYSENTER'ом, любым значением, в том числе и адресом своего кода, в котором уже делать что угодно. Драйвер не нужен.
     
  7. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    Great
    надеюсь нужны привилегия администратора? :derisive:
     
  8. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    rei3er
    Ну естественно =) Ну в принципе аналог написания драйвера.. только драйвер лишний не светится. А по привилегиям так же
     
  9. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну код то будет работать в адресном пространстве процесса, а не ядра
    и все адреса функций придется искать вручную
    или нет? (я просто не очень вкурсе внутреннего устройства Windows и в частности написания драйверов)
     
  10. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Это да. Зато селектор CS будет ядерный =)
    Ну это тоже да =) Ну а что в этом такого =) Можно заранее перед переключением вычислить все смещения через LoadLibrary/GetProcAddress, а там просто надыбать базу ядра и сложить смещения с ней. Надыбать базу ядра как-нибудь через FS, значение которого в ядре другое.
     
  11. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    однако FS автоматом при sysenter не меняется
    поэтому еще нужно знать значение соответствующего селектора :)
     
  12. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    + как мы узнаем адрес стека ядра текущего потока? Или при переключении потоков меняется MSR для ESP?
    да, еще один вопрос, в стеке ядра потока лежит какая-нибудь важная системная информация? (если проводить аналогию с Linux, то там непосредственно перед стеком лежит структура thread_info, отвечающая за идентификацию процесса, и доступ к ней идет как раз через ESP (ESP & ~KSTACK_SIZE), KSTACK_SIZE = 4096 или 8192)
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Но зато оно фиксировано =)
    При SYSENTER стек меняется, естественно =)
    Ээ это надо методом тыка изучать =)
     
  14. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    гы, если задачу решать в общем случае, такой вариант не пойдет, ну то есть где брать селектор даже если он фиксирован? :)
    я не это имею в виду
    естественно SS и ESP меняются на те значения, которые лежат в соответствующих MSR-ах
    вопрос в том, меняются ли сами значения в MSR-ах при переключении потоков (чтобы после sysenter из любого потока попасть куда надо)
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Например прочитать оригинальный обработчик, он должен его как-то ставить?) Ну или просто забить, насколько я помню, он от версии к версии не меняется
    А зачем менять значения в MSRах?
     
  16. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    ну как, смотри
    если ESP в соответствующем MSR не меняется, то как мы узнаем адрес стека ядра потока после sysenter?
    нет, если в нем ничего важного не хранится, то да, ESP не критичен и можно без него обойтись, в противном случае (как в Linux) рано или поздно жестко зависним (kernel panic) :)
     
  17. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    На время работы в ядре лучше запретить переключение потоков =) С этим всегда проблемы в таких делах :)
    мб адрес пользовательского стека все-атки?
     
  18. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    все, насчет адресов стеков ядра решение нашел в исходниках Linux :)
    Код (Text):
    1. sysenter_entry:
    2.     mov esp, dword [esp + TSS_sysenter_esp0]
    3. ...
    видно есть некий кусок памяти, где находится некоторая системная информация
    адрес этой области помещается в MSR ESP, по некоторому смещению в ней (TSS_sysenter_esp0) находится адрес стека ядра процесса, который меняется при переключении контекста
    ну это легко :)
    Код (Text):
    1. push eax
    2. mov eax, esp
    3. sysenter
     
  19. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    offtop
    вообще интересная дискуссия получается :)
     
  20. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Насчет того же в винде мне ничего не известно =) Нужно смотреть стек ядра под отладчиком и ковырять истинный обработчик sysenter
    Да уж =)