Доступ в Ring0 без драйвера или перхват обращений в режиме DEBUG

Тема в разделе "WASM.RESEARCH", создана пользователем V00D00, 30 апр 2011.

  1. V00D00

    V00D00 New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2006
    Сообщения:
    10
    Адрес:
    Portlan, OR
    Всем привет!

    Задался целью найти заветные NTAPI-функции, которые отвечают за чтение и запись портов, маппинг физпамяти и т.д. Естественно, эти функции существуют, но они не документируются. Подтверждение тому наличие режима DEBUG в ОС Windows. К примеру, если в консоли выполнить команду debug, то можно получить возможность выполнять ряд операций, которые доступны только при наличии драйвера режима ядра. Например, чтобы считать текущее время (часы), достаточно записать в порт 70h адрес регистра 4, а затем считать порт 71h: O 70 4, затем I 71.

    Примеров можно привести массу, но задача стоит другая. Может кто-то подскажет, каким средствами можно перехватить команды режима debug?
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    V00D00
    Для начала, режим DEBUG никакого отношения не имеет к консольной утилите debug. И ни то, ни другое не является подтверждением никакой из Вами перечисленных фантазий.

    Во-вторых, нет никаких недокументированных функций, позволяющих без участия драйвера обращаться к портам из юзермода и маппить физическую память. Есть ntvdm и режим виртуального 8086.
     
  3. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
  4. V00D00

    V00D00 New Member

    Публикаций:
    0
    Регистрация:
    3 мар 2006
    Сообщения:
    10
    Адрес:
    Portlan, OR
    l_inc, я понимаю, что Debug не является консольной программой, меня интересует, каким образом через debug удается читать и записывать в порты. Какие функции и процедуры для этих целей задействуются?
     
  5. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    V00D00
    Вообще-то является.
    Никакие. Просто инструкции in/out. debug — 16-битная программа для dos, запускаемая в окружении ntvdm (virtual dos machine). ntvdm перехватывает привилегированные инструкции и эмулирует результат, позволяя таким образом работать приложениям, написанным для dos. Хотите точно так же работать с in/out, пишите dos-приложение. Но учтите, что никакой власти над системой или устройствами Вы не получите, т.к. любое действие контролируется ntvdm.
     
  6. ormoulu

    ormoulu Well-Known Member

    Публикаций:
    0
    Регистрация:
    24 янв 2011
    Сообщения:
    1.208
    Выросло поколение, которое не знает ни что такое debug, ни что такое dos.
    А обратная совместимость осталась...
    http://ru.wikipedia.org/wiki/Debug
     
  7. h0t

    h0t Member

    Публикаций:
    0
    Регистрация:
    3 апр 2011
    Сообщения:
    735
    V00D00
    на самом деле с помощью драйвера вы можете позволить запись в порты своему приложению, работающему в UserMod. Советую почитать литературу по защищенному режиму работы процессора.
     
  8. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Вообщето бездрайверные пути были, если есть дебаг привилегии, через NtSystemDebugControl, но в последних версиях винды лавочку прикрыли насколько я знаю.
     
  9. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    semen
    Спасибо за информацию. Не слышал раньше. Действительно до Win2003 SP0 была в рабочем состоянии.
     
  10. semen

    semen New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2004
    Сообщения:
    334
    Адрес:
    Russia
    Помоему в х64 версиях запись в MSR накрылась, кому не лень можно проверить - вот пример кода http://www.securitytracker.com/id?1009128
     
  11. gaeprust

    gaeprust New Member

    Публикаций:
    0
    Регистрация:
    2 май 2011
    Сообщения:
    188
    l_inc
    Доступ к портам не только мод(CPL) определяет, но есчо и IOPL(IOPM не рассматриваем). Порт доступен, если CPL <= IOPL, да и не только порт, инструкции Cli и Sti также допускаются к исполнению. Сколько раз приходилось трейсить в олли I/O с маскировкой прерываний :)
    В ранних версиях системы был инфокласс для процессов ProcessUserModeIOPL, вот он и поднимал IOPL.