программа запрещает ставить хуки

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

  1. ntp_

    ntp_ New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2008
    Сообщения:
    47
    Здравствуйте.
    В своей программе я устанавливаю хуки (на мышь, на клаву), проблема в том, что при запущенном sXe Injected (античит для контры), моя программа выдает "Hook not set". После вызова SetWindowsHookEx возвращается NULL. Мне интересно каким образом этот античит запрещает хуки? Быть может здесь используется перехват API функций? И конечно хотелось бы узнать как с этим можно побороться, то есть при запущенном sXe все же поставить свой хук.
     
  2. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    RKU возьми посмотри shadowtable на сколько я помню, одна из старых версий перехватывал в sst функции для защиты от инжэкта, записи в память..
     
  3. Osen

    Osen Рие

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    283
    Адрес:
    Париж
    ntp_
    Если говорить конкретно о SetWindowsHookEx, то есть системные сервисы в Shadow SST - NtUserSetWindowsHookEx и NtUserSetWindowsHookAW.
     
  4. Twister

    Twister New Member

    Публикаций:
    0
    Регистрация:
    12 окт 2005
    Сообщения:
    720
    Адрес:
    Алматы
    Разработчикам античитов пора уже выходить на новый уровень. :) Ну или, хотя бы, установливать хуки глубже, чем в Shadow таблице.
     
  5. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    sXe из Shadow SST сервисов хукает NtUserSetWindowsHookEx и NtUserSetWinEventHook
     
  6. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Пусть выложит список хуков там скорее всего можно обойти каким-то из паблик инжэктов, если нет то просто очистить таблицу или с эмулировать.
     
  7. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
     
  8. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Ну сразу видно что можно с помошью апц в процесс кс заижектится, алертэйбл потоки должны быть.
     
  9. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Оффтоп:
    blast, а есть юзермодный метод блока apc инжекта, или хотябы чекания.. ?
     
  10. ntp_

    ntp_ New Member

    Публикаций:
    0
    Регистрация:
    11 ноя 2008
    Сообщения:
    47
    blast
    А можно поподробней пожалуйста. Не понятно мне причем здесь процесс cs? Я понятия не имею что мне нужно сделать со своей прогой или же с античитом чтобы хук поставился :)

    PS. что за апц?
     
  11. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Из юзермода только перехватить во всех процессаx KiUserApcDispatcher/ZwQueueApcThread.
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    blast
    Зачем во всех процессах ?
     
  13. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Clerk
    Ну можно перехватить KiUserApcDispatcher только в защищаемом процессе, все зависит от задачи это имелось ввиду.
     
  14. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    blast, стоит защита от внедрения удаленных потоков, реализовано через KiUserApcDispatcher. От apc инжекта не спасает. Моно чуть подробней как защитится? :)
     
  15. Clerk

    Clerk Забанен

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

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Как ты вообще узнал что не спасает, выполнился код в твоем процессе без вызова твоего обработчика KiUserApcDispatcher?, тогда это либо не апц инжект, либо кто-то снял перехват.
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Flasher
    > Используй MmSecureVirtualMemory(), чтобы любая модификация кода в пределах секций кода нтдлл пошла боком(насчёт освобождения проекции тоже подходит вроде хз).
    > Запрещай во всех сервисах ожидания обработку очереди потока, в этом случае если левый поток поставит событие в очередь оно никогда не будет обработано.
     
  18. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Ну я вить уже написал :)
    Обе прилажения мои, и 1 - где KiUserApcDispatcher стоит, и 2 - инжектор, раелизованный через InjectProcessMethodThreadApcHidden, Clerk'ом.
    Clerk, MmSecureVirtualMemory - это вить уже не usermode :P
    А вот второе через что реализовать?
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Flasher
    Юзермод весьма ограничен.
    Второе реализовать проблемно. Например твой поток выполняет задержку NtDelayExecution, либо ждёт на обьекте в NtWaitForSingleObject. У подобнах сервисов есть параметр - Alertable, он разрешает прерывать поток для обработки событий в очереди потока. Поток вызвает сервис с этим параметром установленным в TRUE и если есть APC он вызывает диспетчер. Способ очевиден - запрещать во всех сервисах эту обработку, установкой Alertable в FALSE. Также не юзоть NtQueueApcThread, что сильно усложнит код, ибо например нельзя будет использовать таймеры. Так что этот вариант слишком плох.
    Есть способ противостоять внедрению посредством APC, способ основан на одной особенности. Апк - инжект исполняется двумя способами. простой инжект - просто ставится апк в очередь потока, более эффективный - перехватывается диспетчер апк и самый эффективный - редирект диспетчера апк на диспетчер исключений, это может быть декремент переменной ядра KeUserApcDispatcher и установка точки останова ниже либо прямо на KiUserApcDispatcher. Следующий способ позволяет всё это обойти :)
    Особенность заключается в том, что регистр флажков который был при входе в сервис ожидания передаётся в диспетчер апк при обработке апк. Тоесть мы вызываем какойлибо сервис, к примеру тотже NtDelayExecution, но перед вызовом шлюза взводим eflags.tf, если в очереди есть апк, то поток прервётся для его обработки, войдя в диспетчер, но тут будет взведён флаг пошаговой отладки и после исполнения первой инструкции диспетчера возникнет отладочное исключение(STATUS_SINGLE_STEP) и вход потока в диспетчер исключений. Реализация весьма проста.
    > Устанавливаем хэндлер исключений пошаговой отладки, это может быть VEH, перехват диспетчера и тп.
    > Перехватываем шлюз, хэндлер будет определять по номеру сервиса/адресу стуба возможность ожидания с обработкой апк, если это сервис позволяет и обработка разрешена, то перед вызовом шлюза взводит TF.
    > При начале любой обработки апк управление получит установленный диспетчер исключений, мы должны отфильтровать вызов, тоесть обнаружить что не мы поставили апк в очередь, при возврате из сервиса ожидания сбросить TF и пр.
     
  20. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    1) Реализация метода установки Alertable в FALSE.
    Хукаем ZwDelayExecution, ZwWaitForSingleObject, ZwSignalAndWaitForSingleObject, ZwWaitForMultipleObjects и везде если .if Alertable != 0 ставим 0.
    В прилажении, которую охраняю - не юзает NtQueueApcThread, проверял..
    Я Так понял это и есть вся реализация? Какие противопоказания? Если таймер не Alertable, он вить по нормальному суравно выполнится да ?

    Методы с монипуляцией KiUserApcDispatcher у меня не прокатит, если сместить диспетчер KiUserApcDispatcher или снять хук - прога забьет тревогу и упадет.

    И игры с диспетчером исключений не очень подходит, я нуб, год буду разбираться :)

    Остается самый первый вариант с Alertable > FALSE. Выслушаю противопоказанию и пойду реализовать :P