Как отловить имитацию движения курсора относительно моего окна?

Тема в разделе "WASM.WIN32", создана пользователем Flasher, 15 фев 2012.

  1. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Доброго времени суток.
    Задача: не дать имитировать программно движение курсора поверх моего окна. Как можно отличить программное движение от реального с помощью мышки?

    Хукать во всех процессах SetCursorPos/SendInput/mouse_event не вариант.

    Спасибо.
     
  2. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    имхо никак. Программно имитируют движение курсора как раз для того, чтоб для проги не было разницы
    Не хотите глобально хукать - тогда драйвер?

    Дык ведь при желании соберут робота с "рукой" (реально с 2-мя моторчиками и реле/эл-магнитом достаточно, можно из конструктора детского запилить или старую мышу разобрать) - двигать реальную мышь, даже прикольнее. И способ определения отсутствует.

    [offtop]
    может оно того не стоит? ну пусть подвигают, программно... защищать от ботов онлайн-игры другими способами надо ;)
    [/offtop]
     
  3. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    Ну.. сейчас задача не защита от ботов, а от но-рекоилов.
    Это чит против разброса при стрелбе. Реализуется примитивным способом:
    Код (Text):
    1. if(GetAsyncKeyState(VK_LBUTTON){
    2. GetCursorPos(&MousePosition);
    3. SetCursorPos(MousePosition.x, (MousePosition.y+(NoRecoilAmount)));
    4. }
    Т.е. при стрелбе мышка по Y идёт вниз, и разброса патронов совсем нет, все идут в одну точку :)

    Может поэксперементировать что-нибудь с отловом WM_MOUSEMOVE/WM_MOUSELEAVE ?

    В CALLBACK'e http://msdn.microsoft.com/en-us/library/windows/desktop/ms644986%28v=vs.85%29.aspx от SetWindowsHookEx в lParam передаётся структура MSLLHOOKSTRUCT. С помощью данных этой структуры никак не задетектить? Например что за флаг там LLMHF_INJECTED ?
     
  4. 100gold

    100gold New Member

    Публикаций:
    0
    Регистрация:
    26 фев 2010
    Сообщения:
    165
    В глубокой теории можно обрабатывать "случайность" движения человека. Т.е. набрать большое количество статистических данных изменения координат во времени для реальных людей, с этих данных попробовать выдвинуть гипотезу о характере распределения случайной величины. После того, как был каким либо образом получен закон распределения случайной величины, можно путём сбора статистических данных с "целевой" машины фиксировать с отклонения от распределения, что будет, большой долей вероятности, показателем наличия эмулятора.

    То что это выглядит так просто - это потому, что вся грабля зарыта в способе получения закона распределения. Кажется нет какой либо общей методики для вывода и вся сложность в этом.
     
  5. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    а разве невнятно написано:

    посуществу 2х других ничего сказать не могу, тащемта смотрите сорцы виндов, сомневаюсь что там какието глобальные перемены со времен 2к

    полагаю что отреверсить укп можно путем поиска ваших постов)
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Flasher
    По флагу LLMHF_INJECTED в LL-хуке можно ловить имитацию по mouse_event\SendInput, но SetCursorPos таким образом не поймаешь
     
  7. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    а вообще говоря, если запускать игру на отдельном десктопе?
     
  8. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    От mouse_event спасет, от SetCursorPos - нет.
     
  9. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    Поставить фильтр на дров, обслуживающий I/O от мыша. Не IRP, а именно похачить дров железячный. В любом другом случае эмуляцию не определить(ничего не мешает мне сформировать стандартный пакет данных). А виртуальные машины, вари всякие тоже эмулят мышь. В любом случае детект такое дело гиблое и бессмысленное.