Расшифровка кодирования протокола MMORPG
Я планирую писать автоматизированный бот для игры.
Трудная часть - выяснить, как они закодировали свой протокол... Чтобы сделать запуск бота легко, просто запустите персонаж и запишите, что он делает в wirehark. Тем не менее, интерпретация среды сложнее... Она получает около 5 пакетов каждую секунду, если вы без дела, следовательно, много garbarge.
Мой план: поскольку игра работает под TCP, я буду использовать freecap (http://www.freecap.ru/eng), чтобы заставить игру подключиться к прокси работает на моей машине. Мне понадобится этот прокси-сервер, способный к пакетной инъекции или, возможно, сервер, способный пересылать захваченные пакеты. Таким образом, я могу воссоздать и возиться с тем, что посылает сервер, и понять их кодировку протокола.
- Кто-нибудь знает, где я могу получить прокси-сервер, который позволяет впрыскивать пакеты или где я могу выполнять инъекцию пакетов (не через аппаратное обеспечение, как в случае с беспроводным или что-то еще!)
- Где, если я могу найти сервер/прокси, который отправляет захваченные пакеты (т.е.: повторяет соединение).
- Любые лучшие инструменты или методологии для сопоставления шаблонов? Что-то, что может выделить шаблоны из mutliple сообщений, было бы БОЛЬШИМ.
ИЛИ, есть ли лучший способ расшифровать это здесь? Возможно, стратегия разборки (путем подключения функции winsock и начала разборки оттуда)? Я не делал этого раньше, поэтому не уверен. ИЛИ, любые другие идеи?
Ответы
Ответ 1
Перехват сетевого трафика и анализ протокола обычно являются менее предпочтительным методом для достижения вашей цели. Для большинства современных игр шифрование является серьезным фактором, и есть серьезные головные боли, связанные с анализом протокола для любых, но тривиальных факторов наиболее распространенных сценариев геймплея.
Большинство современных реализаций * того, что вы пытаетесь сделать, полагаются на чтение и управление пространством памяти и процессом работающего клиента. Клиент уже выполнил все жесткие части для вас, включая дешифрование трафика и сортировку его в гораздо более удобные для чтения структуры данных. Для взаимодействия с сервером вы можете вызывать функции, встроенные в клиент, вместо того, чтобы создавать целую серию пакетов с нуля. Плюс к этому подходу заключается в том, что вам приходится делать гораздо меньше работы по интерпретации данных и производству. Минус заключается в том, что в сетевом трафике часто бывают некоторые данные, которые были бы полезны для бота, но были отброшены клиентом, или что вы можете отправить трафик на сервер, который клиент не может произвести (что в моей собственной скважине - развитая иерархия для таких, - это несколько шагов дальше по "обманутому" склону).
*... Я говорю об этом, увидев эволюцию большинства сообществ MMORPG для боттинга/взлома из анализаторов сетевых протоколов, таких как ShowEQ и Odin Eye/Excalibur для приложений на основе памяти, таких как MacroQuest и InnerSpace. В этой заметке InnerSpace предоставляет отличную расширяемую структуру для варианта с памятью и процессом на основе того, что вы пытаетесь, и вы должны изучить его как основу для своего проекта, если отказаться от подхода к сетевому анализу.
Ответ 2
Как я уже делал несколько игровых ботов в прошлом (для удовольствия, а не для получения прибыли или для скорби, конечно, для написания игровых ботов очень весело), я рекомендую следующее:
- Если вы можете закодировать и не защищать чит-коды, чтобы не делать этого, я настоятельно рекомендую написать вложенную DLL по следующим причинам:
- Ваша DLL будет иметь доступ к пространству игровой памяти напрямую, и после того, как вы перепроектируете структуры данных (или высунув память или разбор кода), у вас будет доступ к большому количеству данных. Это также позволит вам обойти любое сетевое шифрование, которое может иметь игра. Недостатком прямого доступа к памяти процесса является то, что смещения и структуры данных изменяются между версиями, однако структуры данных часто не меняются со стабильной игрой, и вы можете компенсировать изменения смещения путем поиска шаблонов кода вместо использования фиксированных смещений.
- В любом случае, вы все равно сможете подключить функции WinSock с помощью API-перехватчиков (посмотрите Microsoft Detours и отличный, но теперь коммерческий madCodeHook).
- В противном случае я могу только посоветовать, чтобы вы давали живым/интерактивным редакторам пакетов, например WPE Pro.
В большинстве сценариев самые крутые методы (обратное преобразование кода и прямой доступ к памяти) имеют наименьшую производительность. Они требуют много навыков (чтобы понять код) и времени, как изначально (чтобы пройти весь код и разработать код для взаимодействия с структурой данных), так и для обслуживания (в случае, если игра обновляется). (Конечно, иногда они позволяют делать классные вещи, которые невозможно сделать с официальным клиентом, но большую часть времени это очевидно, как вопиющий обман, и, вероятно, быстро привлечет GM). Большую часть времени боты создаются путем замены игровой графики/текстур сплошными цветами и создания простых "пиксельных" ботов, которые ищут определенные цвета на экране и соответственно реагируют (например, нажимают на них).
Надеюсь, что это поможет, и помните - обман - это только весело, когда это не делает игру менее забавной для всех остальных;)
Ответ 3
A) Я играю в MMO и не поддерживаю ботов, голосуя вниз...
B) Загрузите Backtrack v.3, запустите arpspoof на своем шлюзе по умолчанию и на вашем хосте. Существует приложение, которое будет обманывать удаленный хост SSL cert sslmitm (я считаю, это имя), которое затем позволит вам создать полное соединение через ваш хост. Затем запустите firec tcpdump/ethereal/wireshark (выберите свой ящик pcap) и передвигайтесь вокруг случайного материала, чтобы узнать, что делает пакет. Это будет вашей самой большой проблемой; но проксирование с помощью человека в средней атаке на себя - это путь.
C) Я не одобряю эту деятельность, эта информация предоставляется только как бесплатная информация.
Ответ 4
Возможно, есть несколько разумных предположений, которые вы можете сделать, что должно значительно упростить вашу задачу. Тем не менее, чтобы наилучшим образом использовать их, вам, вероятно, понадобится больший комфорт с программированием с гильзами, чем кажется.
Во-первых, это безопасная ставка на то, что используемое шифрование относится к одной из трех категорий:
- None
- Сырный
- Далеко лучше, чем вы, вероятно, взломаете
Вероятность того, что средний случай оказался очень низким.
Затем убедитесь, что пакеты зашифрованы/дешифрованы рядом с краем программы (как только они входят, прямо перед выходом), и что тело игры связано с ними в дешифрованной форме.
Наконец, протокол, который они используют, скорее всего, состоит из
- ascii с блоками данных
- binary goo
Итак, сделайте небольшой пакет, обнюхивающий карточкой, установленной в беспорядочном режиме для незашифрованного ascii. Если вы видите что-то отличное, вы опережаете игру. Но если вы не откажетесь от всей идеи "выстукивания", а вместо этого начните следовать коду, поскольку он возвращается из отправляемых данных из точки останова и переходит в отладчик. Рисунок: внешний слой или три будут стандартными сетевыми материалами, затем наступит уровень шифрования, а за ним будет огромная масса материала, связанного с протоколом, незашифрованным.
Вы должны быть в состоянии зайти так далеко за час, если вам жарко, на выходные, если вы достаточно квалифицированы, мотивированы и прилежны, и никогда, если вы безнадежны. Но в принципе (и, несомненно, гораздо проще на практике) это можно сделать так.
Как только вы доберетесь до того места, где приходит что-то похожее на незашифрованное слизи, он получает маринованную форму, и заглушенная форма исчезает, а затем начинает беспокоиться о том, что это значит.
- MarkusQ
Ответ 5
Похоже, что шифрование не происходит, поэтому вы можете сделать сетевой подход.
Хорошим местом для начала было бы найти идентификатор пакета - большую часть времени, что-то рядом с фронтом пакета будет идентификатором типа пакета. Например, перемещение может быть 1, выстрел может быть "2", чат может быть "4".
Вы можете написать свой собственный прокси-сервер, который прослушивает один порт для вашей игры, чтобы подключиться, а затем подключается к серверу. Вы можете делать нажатия клавиш в своих командах отключения прокси-сервера, или вы можете сделать свою прокси-запись для отладки информации, чтобы помочь вам продвинуться дальше.
(Я написал бота для онлайн-игры в PHP - из всех вещей.)