2009-02-12 2 views
15

Я планирую написать автоматизированный бот для игры.Расшифровка кодировки протокола MMORPG

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

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

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

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

+2

Просто убедитесь, что вы не нарушаете игры TOS. И ваше имя весело в контексте этого вопроса. –

ответ

18

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

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

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

+0

Читая память spaec клиента, вы хотите взломать кодировку или запустить бота? Проблема с этой реализацией заключается в том, что боту теперь требуется клиент, а также все ресурсы, необходимые для клиента taht (gpu, cpu, весь экран, много памяти и т. Д.). – Zombies

+0

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

+0

Хм, я видел много ботов, которые, похоже, знают об их окружении и знают, как ходить в местах. Я предполагаю, что они знают, как видеть координаты x/y, которые сервер сообщает клиенту, где находится символ игрока. – Zombies

3

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

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

+3

Я играю много ММО и поддерживаю ботов, противопоставляя свой голос. – Sparr

+1

Ха-ха, я ценю ваше мнение; и боты - причина, по которой вы можете играть во многих MMO. Но я действительно проголосовал за эту статью. Почему я голосовал вместо этого? Потому что мой фон в сетевой безопасности, поэтому я люблю нарушать сетевые протоколы. Протоколы декодирования - FUN !! – Suroot

+0

Suroot - что является хорошим методом для анализа различных пакетов и их одновременного сравнения ... Я предполагаю, что я вроде как не сравнимый для нескольких файлов ... – Zombies

13

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

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

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

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

+0

Можно ли запустить игровой клиент и всю его графику, не отображая графику на экране? Следовательно, вы можете запускать несколько копий + пользователь компьютера изначально никогда не видел игру на экране? – Zombies

+0

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

+0

> Если нет защиты читов, препятствующих вам это делать Я не совсем понимаю. Вы говорите о программах мониторинга сторонней памяти? Действительно ли они работают достаточно хорошо, чтобы полностью предотвратить это, или просто замаскировать определенные программы из памяти? – Zombies

3

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

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

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

С шансом среднего случая быть очень низким.

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

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

  • ASCII с блоками данных
  • бинарных Goo

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

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

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

- MarkusQ

+0

Я набрал фразу типа «ЭТО ТЕСТ» через игровой чат при захвате пакетов и заметил, что он не был зашифрован. Кроме того, все пакеты имеют очень похожую структуру. – Zombies

+0

чат и игра могут быть на разных каналах, с различными протоколами. –

+0

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

0

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

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

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

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

Смежные вопросы