Снять нотификатор

Тема в разделе "WASM.NT.KERNEL", создана пользователем RET, 30 окт 2010.

  1. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Многие защиты, типа антиботов и т.п. любят ставить нотификаторы на отслеживание запуска нежелательного софта. (PsSetCreateProcessNotifyRoutine) Как его можно снять "малой кровью"?
    Может есть готовый код у кого?
    Как это делает RkU в своём Normandy.sys? Есть ли у кого интерфейс к этому дрову?
     
  2. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Найди адрес списка и удали сам, детали см. в исходниках ядра.
     
  3. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    И все же может Normandy.sys кто-то реверсил? Там много функ полезных имеется...
     
  4. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Решено динамической вставкой ret8 в ядре. без заморочек.
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    o PsSetCreateProcessNotifyRoutine(@Notify, TRUE).
    o Обнулить PspCreateProcessNotifyRoutineCount(придётся очищать сам описатель тоже).
    o Удалить вручную.
     
  6. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Clerk
    Спасибо довольно исчерпывающая инфа по адресу: http://www.nobunkum.ru/issue001/rootkits-windbg
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    RET
    В сурцах же есть всё. Зачем эти статьи.
     
  8. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Статью по вашим советам (PspCreateProcessNotifyRoutineCount) нашёл. Про сорцы - коммерческий проект был некогда было копаться. Теперь понял, благодарю.
     
  9. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    Разрабатываю подобие антивируса на курсовую, как можно препятствовать снятию нотификаторов установленных моим ав, устанавливаю следующие нотификаторы:
    1. PsSetCreateProcessNotifyRoutine
    2. PsSetLoadImageNotifyRoutine
     
  10. dtt

    dtt New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2010
    Сообщения:
    26
    проверять их по таймеру
     
  11. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Верно, и пожалуй, это единственный человеческий способ. Я чуть больше скажу. На самом деле "снять" нотификатор можно несколькими способам, основными из которых мне видятся два: перезаписать адрес в таблице нотификаторов или просплайсить код нотификатора (например, тупо ret вставить в начало). Первый способ реально отследить только периодическим мониторингом "по таймеру". Со вторым чуть интереснее: можно перехватить и обрабатывать специальным образом #PF, но в общем и целом этот способ нетривиален для новичков.
     
  12. dtt

    dtt New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2010
    Сообщения:
    26
    сплайс на свои участки можно проверять либо по crc, либо с помощью технологии shadow walker
     
  13. x64

    x64 New Member

    Публикаций:
    0
    Регистрация:
    29 июл 2008
    Сообщения:
    1.370
    Адрес:
    Россия
    Да, в общем-то, об этом я и говорил.
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    x64
    Это технологии из области IDP, не доступные простым смертным(ведь патчи использовать и изменять IDT нельзя) :)
    JCronuz
    Никак в общем случае, если не известен механизм их снятия.
     
  15. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Clerk- Если можно, может статью напишите. "Простым смертным"?
    x64, -Я именно так и сделал сплайсом (заморачиваться с таймерами и т.п не нужно) #4 (PsSetCreateProcessNotifyRoutine что собственно и интересовало меня, ADD: в принципе и "нехороший" драйвер можно было пропатчить... если кому надо пишите в ЛС как я Frost и GameShield ломанул - м.б. расскажу :) )
     
  16. dtt

    dtt New Member

    Публикаций:
    0
    Регистрация:
    9 окт 2010
    Сообщения:
    26
    по таймеру предлагали проверять не только нахождение вашего нотификатора в списке, но и ваш сплайс (вдруг его сняли?). Вообще посоветую вам не использовать сплайсинг в ядре, т.к. это чревато последствиями.
     
  17. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    Нотификатор на запуск приложения не только защитами может использоваться. Глобально его убивать не стоит. Могу предложить такую идею.
    1. Установить свой нотификатор. Надо это сделать раньше остальных.
    2. Когда будет вызван нотифай, надо определить - пропускать дальше или нет.
    3. Если дальше не пропускаем, то начинаем раскручивать стек, пытаясь добраться до кода который последовательно вызывает все нотификаторы (это один или 2 уровня вверх)
    4. Пользуясь таблицей смещений, которую заранее вычислили для всех OS. Изменяем счётчик цикла так, чтобы итерация вызова нашего нотифая оказалась последней.

    Т.е. если бы код вызывающий нотифай выглядел бы так:
    for(size_t i=0;i<NotifyCount;++)
    notify(a,b,c ...);
    То из первого нотифая необходимо найти адрес переменной i и сделать его равным NotifyCount или больше. Т.е. проще всего вписать туда очень большое число и не парится с поиском значения NotifyCount.

    Если бы код менялся часто, то смещений было бы очень много и была бы большая проблема их всех найти. Но я думаю конкретно этот кусок кода не менялся и смещение будет одно для всех OS.
     
  18. CrystalIC

    CrystalIC New Member

    Публикаций:
    0
    Регистрация:
    26 июл 2008
    Сообщения:
    500
    RET
    Написал уже. Способность понимания Инде не в силах в вас развить.
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    RET
    Почитал последнюю вашу тему в блоге, хотел отписать но для этого нужно регаться, а мне лень. Напишу здесь. Сабж:
    Патч в любой форме считается отсталым и не приемлимым способом. Необходимо зарегать багчек-нотифи стандартными средствами(док. KeRegisterBugCheckCallback()) и откатывать фолт из него.
     
  20. TSS

    TSS New Member

    Публикаций:
    0
    Регистрация:
    13 апр 2009
    Сообщения:
    494
    Clerk
    Это из моего блога цитата, про патч это не ко мне, а к разработчикам данных перехватов. Я лишь описал баг ( хотя это и баян столетний ).