Хорошие инструменты для понимания / обратного проектирования сетевого протокола верхнего уровня - PullRequest
4 голосов
/ 17 сентября 2009

Есть интересная проблема под рукой.У меня есть ролевая MMOG, запускаемая через клиентское приложение (не браузер), которое отправляет действия моего игрока на сервер, который синхронизирует всех игроков, отправляя пакеты обратно.

Теперь игра используетпротокол верхнего уровня по TCP / IP для отправки данных.Однако wireshark не знает, какой протокол используется, и отображает все, кроме заголовка TCP, в виде дампа.

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

Моя задача состоит в том, чтобы немного переработать протокол, чтобы найти некоторые базовые сведения о данныхв пакетах.

Кто-нибудь знает, почему строка чата не видна в виде простого текста и есть ли вероятность использования стандартного протокола верхнего уровня?

Кроме того, есть ли какие-либо инструменты?что может помочь получить данные из дампа?

Ответы [ 3 ]

5 голосов
/ 16 ноября 2009

Если он зашифрован, у вас есть шанс (фактически, у вас есть 100% шанс, если вы правильно его используете): ключ должен находиться где-то на вашем компьютере. Просто откройте ваш любимый отладчик, понаблюдайте, как немного (ошибается, сто байтов или около того, я надеюсь) данных, поступающих из сокета, установите точку наблюдения для этих данных и посмотрите на следы стека вещей, которые получают доступ Это. Если вам действительно повезет, вы можете даже увидеть, как это расшифровывается на месте. Если нет, вы, вероятно, поймете тот факт, что они используют стандартный алгоритм шифрования (с теоретической точки зрения безопасности они были бы дураками), либо взглянув на следы стека (если вам повезет), либо используя один из профилировщиков IV / S-box (избегайте академических, большинство из них не работают без особых проблем). Многие алгоритмы шифрования используют блоки «стандартных данных», которые могут быть обнаружены (это IV / S-блоки), это то, что вы ищете в отсутствие другой информации. Что бы вы ни нашли, поищите в Google и попробуйте переопределить их библиотеку шифрования, чтобы сбросить данные, которые зашифрованы / расшифрованы. Из этих свалок должно быть относительно легко увидеть, что происходит.

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

2 голосов
/ 17 сентября 2009

Скорее всего, сжато или зашифровано.

Если он зашифрован, у вас не будет шансов.

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

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

2 голосов
/ 17 сентября 2009

Наилучшее предположение: шифрование или сжатие.

Даже telnet поддерживает сжатие по проводам, хотя весь протокол полностью основан на тексте (ну, почти).

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

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

...