Pull to refresh

Comments 41

Так держать!
Код не программиста, но для «Инженера» просто здорово.

Да, а в первом абзаце заключения, я бы просто поставил точку вот после этих слов:
Питон отлично подходит людям

  • Поручик, вы и на питоне программировать можете?
  • Могу-с, только ноутбук постоянно соскальзывает.

Это же великолепно!!!
Раньше я для автоматизации рудиментарного бота (зрение+кноподав) пользовался несложным AutoIt — тоже могу порекомендовать.

Пробовал. Штука классная, но питон на порядок богаче по возможностям. В библиотеке pyautogui например есть locateOnScreen('вырезанная_картинка.png') которая позволяет в автоматическом режиме рапознавать изображение на экране и возвращает центр его координат. Таким образом можно например решать простые головоломки в играх или обходить каптчу самописной защиты в LineageII
Ботов для игр проще писать на базе чтения памяти с помощью win32api readProcessMemory или MmCopyMemory.
Естественно. Это как раз и будет материалом следующей статьи. Просто на питоне это делать легко и приятно даже для новичков и я сильно удивлен, почему его еще активно не используют под это дело.
Ну почему ж — в наше время раньше был популярен перл, просто он вдруг стал сложным для большинства :)

Ботик для РО
буду очень ждать. использую struct, ~winapi(readprocessmemory) и ctypes. и пока код не очень красивый.
другой вопрос, как выполнять такие задачи параллельно? допустим, при работе Pyautogui нельзя пользоваться компьютером. ну не запускать же под каждую копию игры виртуалку.
да, я хотел бы видеть в статье подробный разбор readprocessmemory(processHandle, addr, buffer, len(buffer), ctypes.byref(bytesRead)) как при этом читать строки, юникод, байты?
к примеру, где-то для buffer используют ctypes.create_string_buffer(bytes), а где-то ctypes.c_ulonglong()
Готовлю материал. Просто разобрать нужно на каком то интересном примере, а не сферический код в вакууме да еще, чтобы было понятно хотя бы 80% аудитории хабра. Подготовка такой статьи довольно времязатратная штука.
а такое разве не будет палить античит?
Два чая этому господину!
Что будет заметно дольше без знания точных адресов, правда.
Практически для любой популярной онлайн игры есть обходы ее античитов в паблик доступе. Если нет в русском сегменте, то точно можно найти в англоязычном. Как говориться волков бояться — в лес не ходить. А вообще процесс python.exe исполняющий ваш код наверняка выглядит менее подозрительным, нежели какой нибудь Xc7$smkT.exe да еще и инжектящий в процесс игры свою библиотеку.
Название процесса звучит как Dr.Web CureIt (правда не уверен насчет инжектов)
А если такое дело пошло, на каком стеке и какими тулзами проще всего писать эффективных(полноценных) ботов для игр?
Исследование игры на нижнем уровне и написание под нее бота — штука комплексная. Есть замечательная книга на эту тему которая на 90% описывает то что вам нужно. gamehacklab.ru/topic/4834-утекла-книга-гейм-хакинг-разработка-автономных-ботов-для-онлайн-игр Найти ее можно и в pdf правда на английском. Если такие вопросы — рекомендую начать с вещей попроще, вроде поиска нужных значений в памяти и программного чтения/записи в них. Например на том же питоне.
После того, как попробовал писать на питоне, слег в больницу с диабетом
Классная шутка, же. Чего сообщество не оценило? Видно, нужно было написать «с синтактическим диабетом»
интересно получилось, как-то давно делал похожее на delphi, для LAII, играл на пиратке с хай рейтом, суть была в том чтобы банки CP использовались автоматически. Кто играл на пвп серверах думаю поймет.
«Спам ГЦП банок». С тех пор придумали игровые мыши с макросами и доп.клавишами)
P.S.: тоже делал, только для спама подходило плохо, а вот циклить макрос /nexttarget /attack /delay 15 /pickup /pickup /pickup получалось замечательно. Ставишь в центр маленькой комнаты в катах и машинка фармит камни за тебя)
Делал подобную конструкцию для другой игры, тоже для новогоднего эвента и тоже ради спортивного интереса… Только использовал связку Python + OpenCV. Нарезал эталонных изображений, которые бот искал на экране и кликал по ним автоматически. На контрастных объектах отрабатывает с довольно высокой точностью.
Главный недостаток Python'а в плане ботостроения — совершенно кошмарная работа с кодировками текста. Как только вы начинаете искать строки в памяти процесса и конвертить их, скажем, из cp1251 в utf-8, вы проклянёте Python. Все эти долбанные декодеры с энкодерами никогда не работают как надо, да к тому же любая ошибка закончится километром бессмысленных логов, увенчанных UnicodeDecodeError, и во всём этом мусоре не будет ни малейшего намёка на строку, реально вызвавшую ошибку.

В 3-ей версии Python "Все эти долбанные декодеры с энкодерами" всегда работают как надо. А километровые логи на много короче чем в Java и слева указывают имя модуля, имя функции, а справа номер строки для более полного понимания в каком месте произошла ошибка. Или Вы ожидаете от ЯП подобного:
Error in line 13 you meant print() instead pirnt()

Если вы «труъ» программист и готовы брызжа слюной доказывать, что питон фигня и новичков сразу нужно макать в ручное управление памятью, яки младенца в святую воду — можете смело закрывать статью.

Как бы между Python и ручным управлением памятью есть и промежуточное звено: языки с автоматической сборкой мусора.


Питон отлично подходит людям с базовыми знаниями в области программирования и гуглинга для решения интересных задач.

А C#, Kotlin да и другие языки не подходят?


Реально юзер френдли язык. Лично по моим ощущениям синтаксиса меньше раза в три и нет идиотского количества ошибок, как в других языках, даже при написании небольших программ.

Очень спорное утверждение. Как раз таки в Python ошибок может быть только больше из-за его динамической природы.


Отличная экосистема. Если вы знаете, как сформулировать вопрос гуглу, вы с большой долей вероятности найдете или готовое решение или инструмент, позволяющей сделать, то, что вы хотите.

Опять-таки. А к другим языкам это не относится?


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

Помимо Python вы знаете только C++?


Документация. По простоте, понятности и лаконичности ближайший аналог видел только у PHP.

Да куча документации хорошей и разной по популярным языкам.


В питоне прослеживаются черты линукс философии. Даже установка новых модулей легка и приятна и не вызовет у вас трудностей если вы освоили какой нибудь apt или yum

nuget для C#, maven для Java.


Питон удобен для создания всяких хаков и автоматизаций в играх, особенно тех, где требуется частая модификация.

Какая модификация?

Если вы «труъ» программист и готовы брызжа слюной доказывать, что питон фигня и новичков сразу нужно макать в ручное управление памятью, яки младенца в святую воду — можете смело закрывать статью.
Как бы между Python и ручным управлением памятью есть и промежуточное звено: языки с автоматической сборкой мусора.

Сие было небольшим троллингом программистов, которые отрицают, что не все языки подходят для освоения юными падаванами и кричат что именно их язык нужно учить потому что он самый[хардкорный, массовый, энтерпрайзный, кошерный, ...] да еще и литературы вдобавок насоветуют а ля «паттерны проектирования» или опусов Кернигана и Ричи. Это ведет к скорейшему забиванию на идею что нибудь попрограммировать.

А C#, Kotlin да и другие языки не подходят?

На шарпе переделывал инъектор для игры Rust, опять же при помощи гугла и советов коллеги — то еще удовольствие если с языком не работаешь каждый день. Так же, если на питоне понравилась программка или модуль — то ты открываешь, изучаешь и копируешь нужный код. В c# для подобного пришлось качать net reflector и прогонять прогу через деобфускатор de4dot. Я думаю не стоит тут упоминать как выглядит код после деобфускации, кто ковырял сам знает.
Очень спорное утверждение. Как раз таки в Python ошибок может быть только больше из-за его динамической природы.

Возможно для больших и сложных проектов это так, но у меня есть только опыт написания небольших программок под собственные нужны и он говорит об обратном.
Опять-таки. А к другим языкам это не относится?

На мой, достаточно субъективный, взгляд накладывается опыт разбирательств с другими языками. Питон сообщество нацелено не только на профессионалов, вот в чем его плюс. Возможно, если вы опытный программист, вы не заметите разницу в общении на форумах или в подаче документации, но для начинающих важно чтобы объяснялось для их уровня. И да, никто не будет делать на c# или java программки для системного администрирования,
а на питоне будут. Это и создает ту экосистему для людей-не-программистов.
Помимо Python вы знаете только C++

А кто сказал что я знаю python и с++? Я знаю базовые для всех языков конструкции и как пользоваться гуглом. Дополнительный синтаксис осваивается за пару часов ( если это конечно не lisp или брэйнфак ). Это как раз та фишка о которой я и говорил в статье — питон не нужно хорошо знать чтобы решать на нем задачи.
Да куча документации хорошей и разной по популярным языкам.

Опять же с точки зрения профессионального программиста да, а с точки зрения не программиста вопрос очень спорный. Отписал выше.
nuget для C#, maven для Java

Не спорю. Тут это просто плюс, по сравнению с языками, в которой таких систем нет.
Какая модификация?

В играх отвратительно часто встречаются апдейты меняющие статические адреса и указатели, хранящие скорость, коэффициент разброса оружия или еще какую нибудь интересную переменную. Или например ввели в игре временное изменение и кликер тыкает уже не туда, куда ему положено.
Большое спасибо за статью, дали пищу для размышлений :) Плюс пока не могу поставить — карма низковата, но считайте этот плюс плюсом в свою личную карму ;)
Я немного поворчу, если позволите
мой быдлокод будет резать вам глаз

То, что Вы это признали — хороший признак того, что Вы от него хотите избавиться и писать труЪ-код. Одно дело — хвастаться и буквально кичиться быдлокодерством, и совсем другое — признать и активно с ним бороться. Сейчас сам на этом или чуть более раннем этапе.

расхвалить питон и показать еще не освоившим, что с ним может делать человек-не-программист

Именно это как раз важно. Это как выучиться на сварщика, но работать/подрабатывать в оркестре барабанщиком (и делать это хорошо).
Статья хорошая, осталось чуть-чуть подтянуть правописание (судя по комментариям, Вы умеете писать грамотно, что не очень часто встречается — просто не торопитесь с публикацией)).
Всё, перестаю ворчать.
Мы не можем ставить исполнение программы на паузу применив классический sleep() т.к. все собьется да и вообще кругляши летят достаточно быстро.
Что-то туплю… Почему собьется? По поводу скорости: а sleep(0.01) не пробовали?
Смысл в том, что кругляш едет до центра около 2-х секунд и кнопку нужно нажимать через 2 секунды, после того как его засекаем программно. то Есть если поставить time.sleep(2) а потом нажать кнопку, кнопка то нажмется, но в эти 2 секунды программа не будет ловить другие кружки а тупо ждать.
А не подскажете модуль (не нашел, мб плохо искал) который анализирует звук исходящий из игры? И при помощи которого можно сделать специальные триггеры на определенный звук? Как выше в комментариях написано было, например,
locateOnScreen('вырезанная_картинка.png')
Занятная статья. Также, хотелось бы увидеть пару слов о защите в таких играх.
У меня накопилось некоторое количество опыта по обходу защит и даже кое какие свои наработки, но боюсь ответ значительно превосходит формат комментария. Вроде статья неплохо зашла, думаю и на тему защит напишу со временем.
UFO landed and left these words here
Ну у меня нет мании величия и я ни в коем образе не утверждал, что мой метод правильный и изящный. Всегда найдется тот, кто сделает лучше, выше, быстрее, сильнее. Суть статьи в том, чтобы показать, что человеку можно чуть чуть погуглить и сделать на питоне какую то интересную вундервафлю, даже если он не разу не профессионал. Ваш OpenCV гугл кстати не разу не выдал когда я искал либы под это дело. Если бы он мне попался на глаза первым — возможно в статье был бы он. В любом случае спасибо за инфу, буду иметь в виду.
UFO landed and left these words here
Арбитраж!))) А вообще понравилась, интересная идея и доведение её на результата
Ребят, а кто имеет ботов для телеграмм игр? тот же Chat Wars?
Only those users with full accounts are able to leave comments. Log in, please.