1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

kernel-mode перехват для антивируса

Тема в разделе "WASM.NT.KERNEL", создана пользователем whitequark, 24 фев 2008.

  1. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    не испортит, просто в стеке останется ещё один адрес возврата старый, который будут адресом возврата для перехватчика, он его затрёт своей командой ret и вернётся в код вызвавший api функциию

    а откуда ещё процедуре брать адрес возврата? она подразумевает что он лежит на вершине стака!
     
  2. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Вообще-то у процедур бывают параметры. И передаются они часто через стек. И лежат они сразу выше адреса возврата. И если сделать лишний "push loc_1" непосредственно перед процедурой, то адресом возврата будет считаться loc_1, а параметры полетят: первым параметром будет считаться "настоящий" адрес возврата, вторым параметром - "настоящий" первый параметр и т.д.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Если stdcall вызов, а таких большинство, то если есть параметры в функции, возврат будет посредством ret n*4, где n-число параметров. Если ты запихнёшь в стек в начале функции что-либо, во первых параметры сместятся, первым параметром окажется твоё значение, а по возврату командой ret n*8 в стеке останется последний параметр. Не говоря даже про команду push не в начале функции. А для KiSystemService возврат из sysenter выполняется командой sysexit, либо если вход выполнен посредством Int2Eh то возврат командой iretd.
     
  4. rei3er

    rei3er maxim

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    917
    Адрес:
    minsk
    процедура вообще может не предусматривать возврат
     
  5. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Параметры я как то не учёл =) а без них работает! ну а функции которые не предусматривуют возврат нет смысла перехватывать
     
  6. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.922
    угу, пусть выполняют свой невыгружаемый код ;)
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Код (Text):
    1. KiSystemServiceRepeat:
    2.         mov     edi, eax                ;copy system service number
    3.         shr     edi, SERVICE_TABLE_SHIFT ; isolate service table number
    4.         and     edi, SERVICE_TABLE_MASK ;
    5.         mov     ecx, edi                ; save service table number
    6.         add     edi, [esi]+ThServiceTable ; compute service descriptor address
    7.         mov     ebx, eax                ; save system service number
    8.         and     eax, SERVICE_NUMBER_MASK ; isolate service table offset
    Одинаковый в Xp и Vista;
    Интересна команда:
    and eax,SERVICE_NUMBER_MASK, код 00000FFF25h
    Для перехвата KiSystemServiceRepeat нужно расположить обработчик по адресу, вычисленному так, чтобы смещение в команде jmp near указывало на этот обработчик с учётом того, что младший байт смещения равен нулю и затем командой обмена с перефиксом lock загрузить смещение обработчика(старшие 3 байта с опкодом 0E9h) по адресу инструкции and eax, SERVICE_NUMBER_MASK. Это будет выполнено на атомарном уровне.
     
  8. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Как вызвать напрямую функцию похуканую кем то через ssdt в обход этого хука?
     
  9. Clerk

    Clerk Забанен

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

    sww_ New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2007
    Сообщения:
    155
    Clerk Вранье, можно. Но я не скажу как.
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Удачи, впринципе можно восстановить функцию или пройтись по секции кода ntos, заменив все ссылки на данный обработчик, или установить свой обработчик KisystemCallEntry(KisystemService) и KiSystemServiceRepeat с модификациеё MSR, но надо будет также патчить ntos(там вроде две проверки содержимого MSR_SYSENTER_EIP).
    К примеру, функции ntos!ZwXX передают управление на KiSystemServiceRepeat командой jmp near, можно и тут похукать. Всё это слишком геморойно. Это если под вызовом иметь ввиду вызов из UserMode, из KM можно вручную вызвать.
     
  12. sww_

    sww_ New Member

    Публикаций:
    0
    Регистрация:
    21 окт 2007
    Сообщения:
    155
    Clerk
    Это называется трахаться стоя в гамаке и в противогазе - то, что ты написал ;)

    Ничего не снимается, ничего не патчится (практически) ;)
     
  13. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Ну антируткиты же как то востанавливают такие функции, а мне нужно её не востанавливать а просто узнать её реальный адрес чтобы обратится на прямую

    ps мне из KernelMode надо
     
  14. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    LOL

    +1

    короче извращения продолжаются, закрыли бы лучше бредотопик
     
  15. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    2FED
    Адрес какой функции ?
    Адреса сервисов в SST, оригинальные из образа ntos, KiSystemServiceRepeat смотри в разделе Projects, мой посл. пост.
     
  16. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Ну вот например антивирус мне выдаёт следующие
    Код (Text):
    1. Функция NtCreateKey (29) перехвачена (8056E761->F8507FE0), перехватчик C:\WINDOWS\system32\Drivers\a347bus.sys, драйвер опознан как безопасный
    Это драйвер Alcohol 120% перехватил эту функцию, тоесть я так понял если я вызову её из своего драйвера то попаду сначала на F8507FE0, а как мне попасть сразу на 8056E761?
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Дамп покажи.
     
  18. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    дамп чего?
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    8056E761h
     
  20. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    вот