Сплайсинг системных сервисов из драйвера

Тема в разделе "WASM.WIN32", создана пользователем v0s, 1 апр 2006.

  1. v0s

    v0s New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2006
    Сообщения:
    10
    Подскажите как правильно реализовать? Вообще это возможно? :)
     
  2. Guest

    Guest Guest

    Публикаций:
    0


    Если кто-то будет перехватывать тоже сплайсингом, но другие команды затрет, будет БСОД
     
  3. v0s

    v0s New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2006
    Сообщения:
    10
    А как самому грамотно перехватить, чтобы избежать бсода?
     
  4. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
    Corleone

    А почему должен быть бсод ?



    ЗЫ. А вообще сплайсингом лучше не делать в ядре.
     
  5. Guest

    Guest Guest

    Публикаций:
    0
    MegaZu

    Я образно сказал, но вероятность вылета велика в ядре, особенно если заезженные ф-и перехватывать. Лучше делать перехват ч-з СДТ, тут некорректно поставить его невозможно, да и в очередь все перехваты выстраиваются, сколько б их не было



    v0s

    Почему бы не почитать ms-rema, у него все подробно написано по перехватам, там же он и высказывает свое мненме насчет сплайсинга в ядре, с которым я согласен полностью (проверено на деле). Есть также куча сайтов по этой тематике, готовые руткиты можно найти на www.rootkit.com
     
  6. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    Сплайсинг в ядре можно сделать безопасным образом.

    Допустим перехватываемая функция вызывается на DISPATCH_LEVEL, в этом случае надо послать DPC на все процессоры в системе и зациклить их там на время установки перехвата. В этом случае можно гарантировать, что никакой поток не обратиться к недопатченой функции.

    Надежный сплайсинг функций вызывающихся на PASSIVE_LEVEL сделать сложнее, так как ее исполнение может быть прервано в самом начале, но проблема решается добавлением проверки контекста потоков.
     
  7. NullSessi0n

    NullSessi0n New Member

    Публикаций:
    0
    Регистрация:
    20 янв 2006
    Сообщения:
    322
    Ms Rem

    добавлением проверки контекста потоков.

    В смысле по eip определяем, в user страницах мы или нет? Если нет - то мы в режиме ядра?
     
  8. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    По eip определяем, не остановлен ли поток на опасном учстке (который будет сплайситься). Если такой поток обнаружен, то надо подождать некоторое время и попробовать снова.
     
  9. v0s

    v0s New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2006
    Сообщения:
    10
    Corleone



    Да, это надежно просто и понятно, но хотелось бы исследовать и другие методы :)



    Ms Rem



    Ага, как раз это и нужно - ведь системные сервисы можно вызывать только с IRQL == PASSIVE_LEVEL?





    А как это определить разъясни plz.
     
  10. Guest

    Guest Guest

    Публикаций:
    0


    Берешь, вичисляешь адрес перехвата, и смотришь не лежит ли eip в момент остановки потока в области затирания
     
  11. v0s

    v0s New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2006
    Сообщения:
    10
    Corleone, ок, это понятно а как узнать момент остановки потока?... :o
     
  12. Ms Rem

    Ms Rem New Member

    Публикаций:
    0
    Регистрация:
    17 апр 2005
    Сообщения:
    1.057
    Адрес:
    С планеты "Земля"
    А зачем его узнавать? Перед тем как устанавливать перехват надо просто заблокировать все побочные процессоры через DPC и поднять свой IRQL до DISPATCH_LEVEL. При этом все другие потоки будут остановлены.
     
  13. v0s

    v0s New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2006
    Сообщения:
    10


    А это как делается? :)
     
  14. MegaZu

    MegaZu New Member

    Публикаций:
    0
    Регистрация:
    22 июл 2005
    Сообщения:
    290
  15. v0s

    v0s New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2006
    Сообщения:
    10
    Пасиба. Но ниасилил :dntknw:
     
  16. Freeman

    Freeman New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2005
    Сообщения:
    1.385
    Адрес:
    Ukraine
    A что, если сплайсеть один неиспользуемый/малоиспользуемый сервис. а потом брать заглушки и ставить там вместо

    mov eax,nomer_syscall

    mov eax,nomer_novogo_maloispolzuemogo

    тогда патчить надо один дворд всего.