Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Стартап Minecraft pocket edition – reverse engeneering

Toxuin

Старожил
Девелопер
Пользователь
Баллы
103
На днях любопытства ради попробовал посмотреть как изнутри устроен протокол общения между собой девайсов с сетевой игрой Minecraft Pocket Edition. Результаты достаточно интересные.

Прошу всех школьников, желающих СКАЧАТЬ и замутить свой сервер Poket Ediшon уходить сюда. Оригинальная тема была написана на ********, но утонула под тоннами флуда. Посему прошу не флудить и отвечать только если есть что ответить. Спасибо.

Что я делал:
- Создал Wi-Fi точку доступа на лептопе без шифрования и присоединил к ней оба девайса. Запустил на лептопе Wireshark (перехватчик пакетов), на девайсах - майнкрафт, посмотрел что передается в сети.
- Скачал с одного девайса исполняемый файл (тот, что взломан, т.е. расшифрованный) и пропустил через IDA Pro.
- Скачал apk-пакет для андроида (у меня нет девайсов на андроиде), декомпилировал его в ява-код, ничего интересного не нашел.
- Зато! Внутри apk-пакета обнаружился файл libminecraftpe.so, который я тоже пропустил через IDA Pro.
- Написал очень простую (~50 строк) программку на яве, которая позволяет получить логин-пакет и пытается ответить. Ответить не получилось, работаю над этим.

Что я накопал:
- Майнкрафт общается по UDP. Для общения по сети используется бесплатная библиотека RakNet. Сервер использует порт 19132.
- Даже в текущей версии игры есть код, отвечающий за: TNT, компас, алмазные тулзы (называются emerald), пауков, криперов, коров, свиней, измерения (nether?), летающих мобов (? :confused:), плавающих мобов (squid?), нанесение друг другу урона, сообщения.
- В коде присутствует код сетевых пакетов, отвечающих за экипировку игроков, респаун, сообщения, установку времени суток, взрывы, использование вещей, нажимание кнопок\рычагов.

Если кто-либо заинтересован в реверс-инжиниринге Minecraft PE – я выкладываю свои наработки, вдруг кому интересно.

Дамп пакетов: http://dl.dropbox.com/u/5758571/MCPE_packet_dumps.zip
Пакеты дампались во время одной игровой сессии (т.е. без перезапуска и переподключения), на двух iOS-девайсах (iPod Touch 5.0.1 и iPhone 4S 5.0.1). Архив с дампами содержит файлы формата Wireshark. Дампы содержат короткие очереди пакетов(30-100), снятые во время повторяющихся действий на девайсах: открывание\закрывание двери, подпрыгивание и т.д. В всего архиве 8 дампов.

Дамп классов андроидной библиотеки: http://dl.dropbox.com/u/5758571/mpe0.2.0.dump2.txt
Делал не я, но то, что делал я почти полностью совпадает с этим, только немного грязнее.

Библиотека RakNet, которую использует майнкрафт для общения по сети: http://www.raknet.com/raknet/downloads/RakNet_PC-4.036.zip
Она защищена копирайтом, так что если вам нужна она для чего-то еще, кроме как просто посмотреть - получите бесплатную лицензию на http://www.jenkinssoftware.com/hobbyist.html

Крайне краткое описание пакетов, отвечающих за логин: http://dl.dropbox.com/u/5758571/MCPE_packet_format.txt

Описание других пакетов (четырех), относительно скудное: http://wiki.vg/Talk:Pocket_Minecraft_Protocol

Мою программку на яве, "сервер", даже видно в списке активных игр. Также я написал подобие очереди пакетов так что теперь подключать можно более одного устройства. Сервер все так же ничего не умеет, кроме логин-последовательности (до пакета 0x08).
Выложил эту поделку на гитхабе https://github.com/toxuin/MCPES - если кому интересно - поковыряйте.
Протокол реверсирован крайне плохо. Из 29 пакетов известно назначение только 2.

Если у кого-нибудь есть какие-нибудь наработки или желание\возможность поковырять Покет Майнкрафт - выходите на контакт.
 
могу помочь, есть пару девайсов с андройдом и wifi роутер с прошивкой dd-wrt... если что пиши
 
могу помочь, есть пару девайсов с андройдом и wifi роутер с прошивкой dd-wrt... если что пиши
Прошивка на роутере особенного значения не имеет. Чтобы увидеть как общаются между собой два девайса с майнкрафтом, нужно убрать шифрование в беспроводной сети, хотя бы в гостевой. После этого перехватывать пакеты можно с помощью Wireshark или любого другого снифера пакетов. Майнкрафт общается по UDP, если что. В файле http://dl.dropbox.com/u/5758571/MCPE_packet_format.txt есть даже фильтры для Wireshark для перехвата только определенного типа пакетов.
Что нужно сделать так это разобраться какой пакет за что отвечает и как устроен. Документировать протокол.
 
Завтра попробую... сделаю так:
1)поставлю записывать экраны обеих устройств
2)запущу программу wireshark
3)начну ставить/ломать блоки, передвигаться...
4)все это проанализирую
5)сделаю вывод
Вроде не сложно, посмотрим как на деле окажется...
 
Ну красавчик, че. Будем свой майнкрафт делать на андроид?
 
Ок, начинаем раскопки ядра майнкрафт пе, доделываем тнт, ставим их сто штук и вешаем айфон ^^.

По теме, завтра тож гляну на файло, интересно блин. Фактически если серьезно поработать то можно заставить ПЕ версию подключаться к нормальному серверу. Только с картой проблемс. Она большая. И она может подвесить яблофон.
 
Фактически если серьезно поработать то можно заставить ПЕ версию подключаться к нормальному серверу. Только с картой проблемс. Она большая. И она может подвесить яблофон.
Именно такую мысль я и лелеял в начале:) Изначальная утопическая задумка была сделать так, чтобы с покетедишна можно было подключаться к "большим" серверам. Очевидно возможностей карманной версии на полный настольный экспириенс не хватит, но побегать-початиться - вполне. Все уперлось в вопиющую недокументированность протокола и мою полную некомпетентность как анализатора пакетов, гы.
 
Хм.. я думаю что это будет работать если:
1) карта (на сервере) будет размером как на телефонах (то есть ограничена)
2)подключение minecraftpe к основному серверу будет реализовать сложно. вариант сделать две карты (одинаковые) с синхронизацией... будут у сервера поменьше ресурсов тратиться...
Давайте заканчивать Оффоп
 
Значит нужно найти кого нибудь еще. Да и кстати, можно просто не давать яблоку прогружать всю карту, а прогружать её частями, по мере прохождения.
Это вообще возможно?!

И кстати, это не оффтоп, а прямое обсуждение темы.
 
Значит нужно найти кого нибудь еще. Да и кстати, можно просто не давать яблоку прогружать всю карту, а прогружать её частями, по мере прохождения.
Это вообще возможно?!

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

Эта задача имеет более одного пути решения, так что да, это возможно – в той или иной форме. Но, опять же, моя поделка умеет только "здороваться" с клиентами, говорить о чем-то более серьезном без документирования протокола бессмыслено. Почему? Потому что мы не знаем наверняка как оно устроено и все наши придумки могут обернуться прахом просто потому что оно устроено таки не так, как нам сначала казалось.
 
Пфф, No Problems, пишем свою версию с нуля =)
Неужели доков вообще нет?
 
Пфф, No Problems, пишем свою версию с нуля =)
Неужели доков вообще нет?
Доки. Очень скудные. Там описаны 6 пакетов из 29, и только 2 из них четко понимаемы (остальные а-ля "этим непонятным набором байт сервер отвечает на входящий непонятный набор байт").
Пишем с нуля что? Minecraft Pocket Edition? Интерес как раз в том, чтобы разобраться в mojang'овой верcии протокола и что-нибудь уже делать с ним, кто чего захочет. Если внимательно почитать первый пост, то в нем нет описания конкретного проекта, а лишь призыв к документированию протокола и мои наработки по этой теме. MCPES нельзя рассматривать даже как прототип сервера покетедишна или той самой утопической "прослойки" между большим сервером и MPE, он просто инструмент для понимания работы протокола и относительно удобных манипуляций с пакетами.
 
оперативки небось не хватит на теле( лаги будут...)

процессора только хватит)
 

Поделиться этой страницей

Назад
Верх