Отладка ядерного хукера, поделитесь опытом

Тема в разделе "WASM.BEGINNERS", создана пользователем Rel, 19 авг 2010.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.315
    Такая проблема, не знал куда запостить, положил в бегинерс, так как сам полный профан в этом... Есть программа написанная мной, которая определенным образом использует шаренные секции другой (не ругайтесь, все легально), довольно все хитро сделано, но... У заказщика стоит один авер (из антихоливарных соображений название говорить не буду), который перехватывает в ядре определенный функционал (SSDT), NtCreateSection одна из них... При определенном вызове моей программой (ринг3) этой функции система падает в бсод... Хотел попросить Вас поделиться опытом о том, как можно отладить код перехватчика этой функции... то есть вызов происходит в юзермоде, потом спускается в кернел и вот дизасм ядерного обработчика мне нужно увидеть, чтобы понять в чем тут дело... какой функционал вы посоветуете использовать для этого? как бы вы его использовали? на что наиболее грамотно поставить точку останова? как лучше трассировать код? вобщем все вопросы по этой тематике... заранее спасибо! извиняйте, что задаю нубовские вопросы, если сильно бесит, то хоть направьте куда копать...
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Rel
    Syser или WinDbg на перехват?
    или опять орать на дядю Женю.. я угадал? дядя Женя?

    хотя это вопрос прямиком в кернелмоде, ты правильно сделал что запостил сюда, после необоснованных высказываний, что ты считаеш себя чуть лучше Клерка, он бы там не долго прожил :))
     
  3. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    ставишь и настраиваешь vmware и windbg (как описано в кернел моде разделе). В варю авера и программу. Я не в курсе как там перехват выполнен - сплайсом или заменой адреса в SSDT. Если первое, то bp NtCreateSection и отлаживаете спокойно перехват. Если второе, то предварительно надо выяснить какой адрес в SSDT (dd KeServiceTable, потом dd на адрес первый, там соответсвенно адреса сервисов, смотришб который тебе нужен по номеру) и на него поставить точку останова (bp).

    PS не можешь в пм отправить, что за авер и что за параметры?
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Трассировать до kssdoit, либо брейк туда.
     
  5. izl3sa

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    2Clerk
    зачем? он будет стопится ж на каждом вызове сервиса, в то время как он уже знает определенный круг сервисов, вызов которых вызывают бсод. Проще на их обработчики поставить точку останова.
     
  6. Clerk

    Clerk Забанен

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

    izl3sa New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2010
    Сообщения:
    164
    Адрес:
    Spb
    да, вы правы. Я забыл что eax до kssdoit не изменится и будет содержать номер сервиса, к которому можно привязать условный bp. =)
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.315
    спасибо за советы! буду пробовать!