SCRIBE
Гость
|
|
« : 09-01-2017 07:56 » |
|
Привет. Вопрос в продолжение к предыдущему, пытаюсь осуществить минимальую защиту приложения(процесса). Можно ли как-то перехватить эти сообщения, что посылаются кликерами? И даже если перехватить, то как их отличить от программных посылок сообщений, типа, Send/PostMessage, от нормального клика пользователя мышкой? Заранее спасибо.
|
|
|
Записан
|
|
|
|
RXL
|
|
« Ответ #1 : 09-01-2017 10:34 » |
|
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
zubr
Гость
|
|
« Ответ #2 : 09-01-2017 10:58 » |
|
Да, по простому - никак. Чтобы узнать хозяина клика надо перехватывать у открытых процессов функции апи, имитирующие клик (mouse_event, SetCapture, Send/PostMessage, FindWindow и т. д.). Это конечно сложно, но можешь попробовать готовые инструменты для перехвата типа madCollection, правда не уверен, что он умеет в x64 перехватывать, по крайней мере лет 6 назад не умел.
|
|
|
Записан
|
|
|
|
SCRIBE
Гость
|
|
« Ответ #3 : 09-01-2017 11:23 » |
|
А хотя бы накинуть хук на созданный процесс? Я пока пробую так, но ничего не выходит: var MainHook: HHook;
function HookCallBack(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; begin Result := CallNextHookEx(MainHook, nCode, wParam, lParam); if nCode >= 0 then begin LogThis('Message ' + inttostr(PCWPStruct(lParam).message)); end; end;
if CreateProcess(nil, PWideChar(FPath), nil, nil, true, AFlag, nil, nil, tmpStartupInfo, tmpProcessInformation) then begin MainHook:= SetWindowsHookEx(WH_CALLWNDPROC, @HookCallBack, 0, tmpProcessInformation.hThread); end; Процесс запускается, но в логе пусто. Или без dll тут никак?
|
|
« Последнее редактирование: 09-01-2017 11:37 от ..::SCRIBE::.. »
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #4 : 09-01-2017 12:01 » |
|
А что тебе даст хук? Ну поймаешь сообщение идущее к твоему окну, все равно откуда идет непонятно.
|
|
|
Записан
|
|
|
|
SCRIBE
Гость
|
|
« Ответ #5 : 09-01-2017 12:03 » |
|
Ну, я посмотрел какие сообщения отправляют кликеры, и какие сообщения отправляются при обычном нажатии, расхождения есть, и да, их можно исправить и на 100% подделать, но это знает далеко не каждый. Так что было бы неплохо хук накинуть и фильтровать хоть немного.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #6 : 09-01-2017 12:13 » |
|
И что ты увидишь в данных хука отличных от данных, которые ты можешь получить в своем окне из процедуры окна? Хендл окна, координаты клика, код сообщения.
|
|
|
Записан
|
|
|
|
SCRIBE
Гость
|
|
« Ответ #7 : 09-01-2017 12:16 » |
|
Мне не важно какое окно его отправило, я просто закрою процесс при подозрительном сообщении. Мне в хуке надо только стандартные данные, код сообщения, w|l параметры и координаты.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #8 : 09-01-2017 12:31 » |
|
Тогда зачем хук, эти же данные ты можешь получить из процедуры своего окна.
|
|
|
Записан
|
|
|
|
SCRIBE
Гость
|
|
« Ответ #9 : 09-01-2017 12:32 » |
|
Не могу, через CreateProcess запускается совсем другая программа, написана не мною. Такое чувство что Вы уговариваете меня не прыгать из окна
|
|
« Последнее редактирование: 09-01-2017 12:35 от ..::SCRIBE::.. »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #10 : 09-01-2017 12:53 » |
|
Кликеры определяют по патернам поведения: допустимо ли такое поведение при честном клике. Оценивается не одиночный клик, а вся сессия или ее часть. Например, в игре игрок не может кликать тысячи объектов с интервалом в доли секунды. С другой стороны, надо понимать первичные цели. Например, на игровом проекте, где я сейчас работаю, мы лояльно относимся к кликерам, хотя некоторых "честных" игроков это раздражает. Все просто: пользующиеся кликерами, как правило, либо нормальные плательщики, либо в прошлом платили (и их надо уважить, потенциально они снова могут стать плательщиками). Достаточно лимита операций в секунду, чтобы не наглели. Например, разрешить 3 клика в секунду.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
SCRIBE
Гость
|
|
« Ответ #11 : 09-01-2017 12:55 » |
|
Я тоже за это, но как хук то поставить?))
И еще, я в свое время когда играл в игры где небыло особо защиты, не донатил никогда, а только кликеры и делал, под паттерн не подхожу))
|
|
« Последнее редактирование: 09-01-2017 12:57 от ..::SCRIBE::.. »
|
Записан
|
|
|
|
RXL
|
|
« Ответ #12 : 09-01-2017 13:08 » |
|
Я тоже. Просто мы "не целевая аудитория". Мы бы при любом раскладе не платили в этих играх. Ну или с очень малой вероятностью.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
SCRIBE
Гость
|
|
« Ответ #13 : 09-01-2017 13:18 » |
|
В современных играх кликерить особо не на чем (от игры зависит).
И еще такой вопрос, хук повесить можно?=)))
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #14 : 09-01-2017 13:32 » |
|
Если чужой процесс, то глобальный хук, естественно длл.
|
|
|
Записан
|
|
|
|
SCRIBE
Гость
|
|
« Ответ #15 : 09-01-2017 13:35 » |
|
Но он почти родной, создавался через CreateProcess, на нем висит уже Job, есть айди процесса, и все равно длл? Ну да ладно, длл так длл, все к нему шло
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #16 : 09-01-2017 21:33 » |
|
Рандомное время между down и up при клике, рандомные координаты клика, рандомное время между кликами - и никаким алгоритмом не определишь бота. Думаю, только школьники, написавшие свой первый кликер, будут кликать в одно и тоже место с одинаковыми временными интервалами.
|
|
|
Записан
|
|
|
|
zubr
Гость
|
|
« Ответ #17 : 09-01-2017 21:47 » |
|
Ну если так уже не хочется глобальный хук, загони свой код в чужой процесс (инжект - OpenProcess, WriteProcessMemory, CreateRemoteThread) и подмени там процедуру окна (сабклассинг - GetWindowLong, SetWindowLong).
|
|
|
Записан
|
|
|
|
SCRIBE
Гость
|
|
« Ответ #18 : 10-01-2017 08:13 » |
|
Это да, если постараться, можно что угодно. Никакая защита не есть 100%-ой, но это не значит что ее не должно быть. Вот как раз школьников и откинем, уже плюс. А серьезные дяди взломают ее и так, будь там что угодно, каким-то Olly или SoftICE. Но для этого есть обновы самого ПО, пакеры, протекторы и т.д. Да и, кому это нужно, не тот уровень=)
Спасибо за наводку, поищу как это дело реализуется.
|
|
|
Записан
|
|
|
|
|