Бот - как избежать слежки?

Тема в разделе "Свободное общение", создана пользователем borisblade, 18 дек 2009.

  1. borisblade

    borisblade Гость

    Я с другим пацаном разрабатываю прогу автоматизации действий в одном приложении. Ее алгоритм:
    1 раз в секунду делать скриншот
    2 маленький ORS (optical recognition system) - определить изменения в окне клиентской программы
    3 по алгоритму принять решение о дальнейшем действии
    4 выполнить клик мышкой по кнопке

    Косяк в том, что использовать ИИ-бота запрещено, и клиент отслеживает это.
    Вопросы:
    1 как запущенный клиентский экзешник может отследить, что работает бот, а не я?
    2 как мне обойти эту слежку?

    мои размышления по первому вопросу:
    1) тупо делает tasklist и смотрит какие процессы из каких папок запущены
    2) в клиенте есть лог, в кот. выводятся события - клиент, я думаю, может отследить обращения к своему скролл-окну или хз что там за дочерний объект. этот пункт меня не пугает, т.к. бот скриншотит эти ихменения а не обращается к окну
    3) может ли клиент отследить клики мышью? - например бот без рандомизатора тыкает в один и тот же пиксел и водит мышью тупо по прямым - сразу видно, что играет не человек

    по поводу второго вопроса - мое мнение:
    1) использовать виртуальную машину в VirtualPC / Vmare Workstation либо рдп-сессию / сессию р-админа либо что-то подобное - запускать клиента в ней, а бот - на хост-машине
    2) запускать клиента из под учетки с сильно-урезанными правами

    Что думаете?
     
  2. zubr

    zubr Гость

    Ну и что это клиенту даст, мало ли какие процессы из каких папок запущены.
    Клиент и так знает обращения к своему окну. Ему надо как то отделять события сделанные пользователем от событий активированных программно. никакой лог эту задачу не решает.
    Врядли, по ламерски это, не надежно.

    Я бы, если бы у меня стояла задача защиты от бота сделал бы перехват функций FindWindow, FindWindowEx, GetWindow, SetCurcorPos, SendInput, mouse_event и подменял бы им результат.
     
  3. borisblade

    borisblade Гость

    Спасибо за оперативный ответ.
    Теперь конкретизирую. клиент не онлайн-игра, а нечто другое. Приложение представляет собой 4 окна, позиция/размеры которых не меняется, не появляются другие окна. В общем эти окна статичны и не перекрывают друг друга. поэтому считывание инфы легко сделать скриншотом и не надо использовать функции *Window. Может ли клиент отследить функцию скриншота раз в секунду?
    Другое дело - клики и движения мышью. Как сделать эти действия максимально похожими на человека?
    Движения:
    1 во время простоя мышь движется по "стандартным юзерским" траекториям - к пуску, к окну винампа наверху монитора и тд
    2 траектория мыши от точки А до точки Б должна представлять собой случайную кривую в заданном коридоре, т.е. зигзагообразную линию с фиксированной максимальной амплитудой и небольшим шагом. Как сложно реализовать?
    3 скорость движения мыши должна быть резкой - типа человек собирается быстро нажать на кнопку. Как сложно реализовать?

    Клики:
    1 случайные координаты в заданной зоне. Окна сделана в виде страниц ИЕ - т.е. кнопки - не объекты, а картинки - ну как на странице браузера.
    2 случайные ошибки/мисклики
    3 клики в сторонних приложениях

    Учитывая вышесказанное, я бы сделал так:
    создал бы виртуальную машину - в ней запустил клиент
    на хост-машине запустил бы бота
    бот скриншотит и кликает куда надо - все функции происходят на хост-машине, перехватить их процесс из виртульной машины не может - так?

    Что скажешь?

    Как вариант - сделать запись моих реальных движений - это реально? Записать сотню моих мувов - кликов и забить их в программу. Более того - сделать список этих движений обновляемым - я буду записывать эти движения.

    !!! ВАЖНЫЙ ВОПРОС !!! Я двигаю курсор из одного угла монитора в другой и кликаю по идеальной прямой. Бот системными функциями делает то же самое. Клиент может различить, где я, а где бот?
     
  4. borisblade

    borisblade Гость

    Вопрос по виртуальной машине. Какие виртуалки есть в природе? Я знаю VirtualPC, VMare Workstation - какие еще? Какие у них достоинства и недостатки?
    Самый, пожалуй, важный вопрос - клиент может узнать, что он запущен на виртуальной машине? У каждой железки и компа в целом есть Hardware ID - друг-асушник сказал, что у виртуальных машин ID четко указывает на их виртуальность. Нельзя ли его изменить?
     
  5. zubr

    zubr Гость

    На хост-машине будет только действие по созданию скриншота, которое клиент не сможет перехватить. Кликанье мыши в клиенте будет все равно в контексте виртуальной машины.
    Не понял, твой бот должен записывать твои мувы с кликами или клиент?
    Может, если он будет перехватывать соответствующие системные функции, обеспечивающие вышеуказанные программные действия. Правда ему еще придется поработать, чтобы определить, что эти действия относятся именно к боту. Именно при клике это будет легко идентифицировать.
     
  6. borisblade

    borisblade Гость

    Имеется ситуация.
    Я загружаю комп, запускаю на нем клиента. С другого компа захожу на первый комп в ту же сессию по рдп. Клиент каким-либо образом может увидеть, что я стал работать по рдп?
    Тот же самый вопрос - только я делаю логон по рдп, т.е. первая машина загружена, но пользователем на нее я не залогинился - логинюсь через рдп-клиент.
     
Загрузка...

Поделиться этой страницей