Доброго времени суток. Задача: не дать имитировать программно движение курсора поверх моего окна. Как можно отличить программное движение от реального с помощью мышки? Хукать во всех процессах SetCursorPos/SendInput/mouse_event не вариант. Спасибо.
имхо никак. Программно имитируют движение курсора как раз для того, чтоб для проги не было разницы Не хотите глобально хукать - тогда драйвер? Дык ведь при желании соберут робота с "рукой" (реально с 2-мя моторчиками и реле/эл-магнитом достаточно, можно из конструктора детского запилить или старую мышу разобрать) - двигать реальную мышь, даже прикольнее. И способ определения отсутствует. [offtop] может оно того не стоит? ну пусть подвигают, программно... защищать от ботов онлайн-игры другими способами надо [/offtop]
Ну.. сейчас задача не защита от ботов, а от но-рекоилов. Это чит против разброса при стрелбе. Реализуется примитивным способом: Код (Text): if(GetAsyncKeyState(VK_LBUTTON){ GetCursorPos(&MousePosition); SetCursorPos(MousePosition.x, (MousePosition.y+(NoRecoilAmount))); } Т.е. при стрелбе мышка по 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 ?
В глубокой теории можно обрабатывать "случайность" движения человека. Т.е. набрать большое количество статистических данных изменения координат во времени для реальных людей, с этих данных попробовать выдвинуть гипотезу о характере распределения случайной величины. После того, как был каким либо образом получен закон распределения случайной величины, можно путём сбора статистических данных с "целевой" машины фиксировать с отклонения от распределения, что будет, большой долей вероятности, показателем наличия эмулятора. То что это выглядит так просто - это потому, что вся грабля зарыта в способе получения закона распределения. Кажется нет какой либо общей методики для вывода и вся сложность в этом.
а разве невнятно написано: посуществу 2х других ничего сказать не могу, тащемта смотрите сорцы виндов, сомневаюсь что там какието глобальные перемены со времен 2к полагаю что отреверсить укп можно путем поиска ваших постов)
Flasher По флагу LLMHF_INJECTED в LL-хуке можно ловить имитацию по mouse_event\SendInput, но SetCursorPos таким образом не поймаешь
Поставить фильтр на дров, обслуживающий I/O от мыша. Не IRP, а именно похачить дров железячный. В любом другом случае эмуляцию не определить(ничего не мешает мне сформировать стандартный пакет данных). А виртуальные машины, вари всякие тоже эмулят мышь. В любом случае детект такое дело гиблое и бессмысленное.