Как я могу использовать данные, обнаруженные с помощью сканера памяти во внешней программе? - PullRequest
11 голосов
/ 31 августа 2011

Итак, немного предыстории: я использую сканер памяти под названием cheat engine , чтобы получить значения в реальном времени для игровой статистики (например, hp, mana, exp) в видеоигре без открытого исходного кода, котораяЯ пытаюсь сделать бота для.

Для того, чтобы мой бот эффективно использовал эту информацию, мне нужно своевременно получить ее из чит-движка (или любого сканера памяти с аналогичной функциональностью) в мой код бота..

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

Что мне действительно нужно, так это ужасно удобный сканер памяти, который позволяет вам использовать информацию, которую вы обнаруживаете, как набор переменных в каком-то языке программирования (предпочтительно java, c или matlab)), или способ доступа к адресам памяти, найденным на одном из указанных выше языков.

Этот последний вариант должен быть выполнимым, так как чит-движок дает памятьадрес, управляющий идентификатор процесса и тип данных.

Ответы [ 6 ]

10 голосов
/ 28 сентября 2011

На этот вопрос нет простого ответа. Насколько я могу судить, вы новичок в этой области, так что вам действительно нужно правильное введение в тему, и для этого я рекомендую прочитать Эксплуатация онлайн-игр : Обман массово распределенных систем .

Это потрясающая книга, в которой подробно подробно рассказывается о том, как работает игра, и посвящена целая глава о том, как создавать ботов .

Если вы хотите написать приложение для чтения / записи данных по этим адресам памяти, вам необходимо изучить такие функции, как ReadProcessMemory () и WriteProcessMemory () . Какой бы язык вы ни выбрали для реализации своего бота, он должен обеспечивать доступ к API Windows. Это необходимо, потому что вы должны манипулировать пространством памяти другого процесса.

Там есть лотов из учебных пособий , которые показывают, как это сделать, используя C и C ++ , так как они являются предпочтительными языками для подобных вещей. Другой вариант - использовать макро-инструмент , если вы хотите, чтобы что-то простое сыграло в игру для вас .

Современные компьютерные игры реализуют свои собственные механизмы anti-cheat , чтобы сделать их немного сложнее для таких людей, как you (и я). И поскольку эта книга представляет методы атаки и защиты, я рекомендую ее всем, кто интересуется использованием компьютерных игр. Книга полностью загружена примерами кода .

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

0 голосов
/ 28 сентября 2011

Cheat Engine с открытым исходным кодом, поэтому вы должны посмотреть в исходном коде Cheat Engine и посмотреть, как работает дамп памяти.

Тем не менее, мониторинг живого процесса, который вы не контролируете, весьма нетривиален, поэтому, если вы не являетесь мастером по коду черной шляпы, уровень 11, я подозреваю, что он не будет работать.

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

Также прочитайте эту обнадеживающую цитату из FAQ по Cheat Engines:

В: Будет ли Cheat Engine работать в онлайн-играх?

A: Большую часть времени, нет

Но в любом случае, попробуйте - это звучит весело, и я уверен, что вы чему-то научитесь, и всегда есть шанс, что вы это сделаетеработа: -)

0 голосов
/ 28 сентября 2011

Вы пробовали Visual VM?

http://visualvm.java.net/download.html

0 голосов
/ 27 сентября 2011

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

scanmem делает это для Linux.

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

0 голосов
/ 27 сентября 2011

Возможно, вы можете использовать COM со скриптом на Lua (с LuaCOM ) с одной стороны и Matlab или C с другой

0 голосов
/ 01 сентября 2011

Попробуйте использовать интерфейс Lua, чтобы получить то, что вам нужно.

Вот пример (я не пробовал, но я предполагаю, что это работает ....)

http://forum.cheatengine.org/viewtopic.php?t=530047

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...