Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Перехват сообщений процесса (антикликер)  (Прочитано 16099 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SCRIBE
Гость
« : 09-01-2017 07:56 » 

Привет.

Вопрос в продолжение к предыдущему, пытаюсь осуществить минимальую защиту приложения(процесса).
Можно ли как-то перехватить эти сообщения, что посылаются кликерами? И даже если перехватить, то как их отличить от программных посылок сообщений, типа,
Send/PostMessage, от нормального клика пользователя мышкой? А черт его знает...

Заранее спасибо.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 09-01-2017 10:34 » 

Никак. Сообщение не содержит такой информации: https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644958(v=vs.85).aspx
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
zubr
Гость
« Ответ #2 : 09-01-2017 10:58 » 

Да, по простому - никак. Чтобы узнать хозяина клика надо перехватывать у открытых процессов функции апи, имитирующие клик (mouse_event, SetCapture, Send/PostMessage, FindWindow и т. д.). Это конечно сложно, но можешь попробовать готовые инструменты для перехвата типа madCollection, правда не уверен, что он умеет в x64 перехватывать, по крайней мере лет 6 назад не умел.
Записан
SCRIBE
Гость
« Ответ #3 : 09-01-2017 11:23 » 

А хотя бы накинуть хук на созданный процесс?

Я пока пробую так, но ничего не выходит:
Код: (Delphi)
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
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 09-01-2017 12:53 » 

Кликеры определяют по патернам поведения: допустимо ли такое поведение при честном клике. Оценивается не одиночный клик, а вся сессия или ее часть. Например, в игре игрок не может кликать тысячи объектов с интервалом в доли секунды. С другой стороны, надо понимать первичные цели. Например, на игровом проекте, где я сейчас работаю, мы лояльно относимся к кликерам, хотя некоторых "честных" игроков это раздражает. Все просто: пользующиеся кликерами, как правило, либо нормальные плательщики, либо в прошлом платили (и их надо уважить, потенциально они снова могут стать плательщиками). Достаточно лимита операций в секунду, чтобы не наглели. Например, разрешить 3 клика в секунду.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
SCRIBE
Гость
« Ответ #11 : 09-01-2017 12:55 » new

Я тоже за это, но как хук то поставить?))

И еще, я в свое время когда играл в игры где небыло особо защиты, не донатил никогда, а только кликеры и делал, под паттерн не подхожу))
« Последнее редактирование: 09-01-2017 12:57 от ..::SCRIBE::.. » Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #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.
Но для этого есть обновы самого ПО, пакеры, протекторы и т.д. Да и, кому это нужно, не тот уровень=)

Спасибо за наводку, поищу как это дело реализуется.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines