Расшифровка MMORPG протокола кодирования - PullRequest
17 голосов
/ 12 февраля 2009

Я планирую написать автоматизированного бота для игры.

Сложная задача - выяснить, как они закодировали свой протокол ... Чтобы бот легко бегал, просто заставьте персонажа бегать и запишите, что он делает в wireshark. Однако интерпретировать окружение сложнее ... Он получает около 5 пакетов в секунду, если вы бездействуете, следовательно, много мусора.

Мой план: так как игра работает по протоколу TCP, я буду использовать freecap (http://www.freecap.ru/eng), чтобы заставить игру подключаться к прокси, работающему на моей машине. Мне понадобится этот прокси, чтобы можно было вводить пакеты или, возможно, сервер, который способен пересылать захваченные пакеты. Таким образом, я могу воссоздать и поработать с тем, что отправляет сервер, и понять их кодировку протокола.

  1. Кто-нибудь знает, где я могу получить прокси-сервер, который позволяет вводить пакеты, или где я могу выполнить внедрение пакетов (не через аппаратное обеспечение, как в случае с беспроводной связью или чем-то еще!)
  2. Где, если я смогу найти сервер / прокси, который повторно отправляет захваченные пакеты (т. Е. Воспроизводит соединение).
  3. Есть ли лучшие инструменты или методологии для сопоставления с образцом? Что-то, что может выделить шаблоны из нескольких сообщений, было бы БОЛЬШИМ.

ИЛИ , есть ли лучший способ расшифровать это здесь? Возможно, стратегия разборки (через подключение функции winsock и запуск оттуда разборки)? Я не делал этого раньше, поэтому я не уверен. ИЛИ , есть еще идеи?

Ответы [ 5 ]

19 голосов
/ 12 февраля 2009

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

Большинство современных реализаций * того, что вы пытаетесь сделать, основаны на чтении и манипулировании пространством памяти и процессом работающего клиента. Клиент уже выполнил все сложные задачи за вас, включая расшифровку трафика и его разбивку на гораздо более простые для чтения структуры данных. Для взаимодействия с сервером вы можете вызывать функции, встроенные в клиент, а не создавать целые серии пакетов с нуля. Плюсом этого подхода является то, что вам нужно выполнять гораздо меньше работы, чтобы интерпретировать данные и производить действия. Минус в том, что в сетевом трафике часто есть некоторые данные, которые могут быть полезны для бота, но отбрасываются клиентом, или вы можете захотеть отправить трафик на сервер, который клиент не может создать (что, по моему мнению -развитая иерархия для таких, находится на несколько шагов дальше вниз по «обманному» склону).

* ... Я говорю это, видя эволюцию большинства сообществ ботов / хакеров MMORPG от анализаторов сетевых протоколов, таких как ShowEQ и Odin's Eye / Excalibur , на основе памяти такие приложения, как MacroQuest и InnerSpace . На этом замечании InnerSpace предоставляет превосходную расширяемую структуру для варианта того, что вы пытаетесь использовать, основываясь на памяти / процессе, и вы должны рассматривать это как основу для своего проекта, если вы отказываетесь от подхода сетевого анализа.

13 голосов
/ 27 февраля 2009

Поскольку в прошлом я делал несколько игровых ботов (для удовольствия, а не для получения прибыли или, конечно, для горячих мыслей - писать игровые боты - это очень весело), ​​я рекомендую следующее:

  • Если вы можете кодировать, и нет защиты от читов, которая мешает вам это сделать, я настоятельно рекомендую написать внедренную DLL по следующим причинам:
    1. Ваша DLL сможет получить прямой доступ к пространству памяти игры, и как только вы перепроектируете структуры данных (перебирая память или разбирая код), вы получите доступ к большому количеству данных. Это также позволит вам обойти любое сетевое шифрование, которое может иметь игра. Недостатком прямого доступа к памяти процесса является то, что смещения и структуры данных изменяются между версиями, однако структуры данных не очень часто меняются в стабильной игре, и вы можете компенсировать изменения смещений путем поиска шаблонов кода вместо использования фиксированных смещений.
    2. В любом случае, вы все равно сможете подключать функции WinSock с помощью API-хуков (ознакомьтесь с Microsoft Detours и отличным, но теперь коммерческим madCodeHook).
  • в противном случае я могу только посоветовать вам попробовать интерактивные / интерактивные редакторы пакетов, такие как WPE Pro.

В большинстве сценариев самые крутые методы (обратный инжиниринг кода и прямой доступ к памяти) имеют тенденцию быть наименее продуктивными. Они требуют большого умения (чтобы понять код) и времени, как на начальном этапе (чтобы пройти весь код и разработать код для взаимодействия со структурой данных), так и для сопровождения (в случае обновления игры). (Конечно, иногда они позволяют делать классные вещи, которые невозможно сделать с официальным клиентом, но в большинстве случаев это очевидно как явный обман и может быстро привлечь гроссмейстеров). Большую часть времени боты создаются путем замены игровой графики / текстур сплошными цветами и создания простых «пиксельных» ботов, которые ищут определенные цвета на экране и реагируют соответствующим образом (например, щелкают по ним).

Надеюсь, это поможет, и помните - читерство - это весело только тогда, когда оно не делает игру менее интересной для всех остальных;)

3 голосов
/ 03 марта 2009

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

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

  • нет
  • Сырный
  • Гораздо лучше, чем вы, вероятно, взломать

Вероятность среднего случая очень мала.

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

Наконец, протокол, который они используют, скорее всего, состоит из

  • ASCII с блоками данных
  • бинарный липучка

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

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

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

- MarkusQ

3 голосов
/ 12 февраля 2009

A) Я играю в MMO и не поддерживаю ботов, голосуя вниз ... Б) Загрузите Backtrack v.3, запустите arpspoof на шлюзе по умолчанию и на вашем хосте. Существует приложение, которое подделает SSL-сертификат удаленного хоста sslmitm (я верю, это имя), которое затем позволит вам создать полное соединение через ваш хост. Затем запустите tcpdump / ethereal / wireshark (выберите ваш pcap яд) и выполните случайные действия, чтобы выяснить, какой пакет что делает. Это будет вашей самой большой проблемой; но проксирование с Человеком в Срединной атаке на себя - это путь.

C) Я не одобряю эту деятельность, эта информация предоставляется только в качестве бесплатной информации.

0 голосов
/ 06 марта 2009

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

Отличным местом для начала будет поиск идентификаторов пакетов - в большинстве случаев что-то в передней части пакета будет идентификатором типа пакета. Например, ход может быть 1, стрельба может быть «2», чат может быть «4».

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

(Я написал бота для онлайн-игры в PHP - всего.)

...