1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Toxuin, 8 апр 2012.

  1. Автор темы
    Toxuin

    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.

    Если у кого-нибудь есть какие-нибудь наработки или желание\возможность поковырять Покет Майнкрафт - выходите на контакт.
     
    Terminatiriliys и Mega_Man нравится это.
  2. asn007

    asn007 Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    asn008
    Имя в Minecraft:
    asn007
    Красавец! :3
     
  3. BanZay_Pro

    BanZay_Pro Активный участник Пользователь

    Баллы:
    63
    могу помочь, есть пару девайсов с андройдом и wifi роутер с прошивкой dd-wrt... если что пиши
     
  4. Автор темы
    Toxuin

    Toxuin Старожил Девелопер Пользователь

    Баллы:
    103
    Прошивка на роутере особенного значения не имеет. Чтобы увидеть как общаются между собой два девайса с майнкрафтом, нужно убрать шифрование в беспроводной сети, хотя бы в гостевой. После этого перехватывать пакеты можно с помощью Wireshark или любого другого снифера пакетов. Майнкрафт общается по UDP, если что. В файле http://dl.dropbox.com/u/5758571/MCPE_packet_format.txt есть даже фильтры для Wireshark для перехвата только определенного типа пакетов.
    Что нужно сделать так это разобраться какой пакет за что отвечает и как устроен. Документировать протокол.
     
  5. BanZay_Pro

    BanZay_Pro Активный участник Пользователь

    Баллы:
    63
    Завтра попробую... сделаю так:
    1)поставлю записывать экраны обеих устройств
    2)запущу программу wireshark
    3)начну ставить/ломать блоки, передвигаться...
    4)все это проанализирую
    5)сделаю вывод
    Вроде не сложно, посмотрим как на деле окажется...
     
    DavidShabaev нравится это.
  6. Mega_Man

    Mega_Man Активный участник Пользователь

    Баллы:
    68
    Ну красавчик, че. Будем свой майнкрафт делать на андроид?
     
  7. BanZay_Pro

    BanZay_Pro Активный участник Пользователь

    Баллы:
    63
    :fp:
    сначала произведем реверинженеринг, а только потом, возможно, начнут появляться сервера для интернета
     
  8. Mega_Man

    Mega_Man Активный участник Пользователь

    Баллы:
    68
    Ок, начинаем раскопки ядра майнкрафт пе, доделываем тнт, ставим их сто штук и вешаем айфон ^^.

    По теме, завтра тож гляну на файло, интересно блин. Фактически если серьезно поработать то можно заставить ПЕ версию подключаться к нормальному серверу. Только с картой проблемс. Она большая. И она может подвесить яблофон.
     
  9. Автор темы
    Toxuin

    Toxuin Старожил Девелопер Пользователь

    Баллы:
    103
    Именно такую мысль я и лелеял в начале:) Изначальная утопическая задумка была сделать так, чтобы с покетедишна можно было подключаться к "большим" серверам. Очевидно возможностей карманной версии на полный настольный экспириенс не хватит, но побегать-початиться - вполне. Все уперлось в вопиющую недокументированность протокола и мою полную некомпетентность как анализатора пакетов, гы.
     
    HoShiMin нравится это.
  10. BanZay_Pro

    BanZay_Pro Активный участник Пользователь

    Баллы:
    63
    Хм.. я думаю что это будет работать если:
    1) карта (на сервере) будет размером как на телефонах (то есть ограничена)
    2)подключение minecraftpe к основному серверу будет реализовать сложно. вариант сделать две карты (одинаковые) с синхронизацией... будут у сервера поменьше ресурсов тратиться...
    Давайте заканчивать Оффоп
     
  11. Mega_Man

    Mega_Man Активный участник Пользователь

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

    И кстати, это не оффтоп, а прямое обсуждение темы.
     
  12. Автор темы
    Toxuin

    Toxuin Старожил Девелопер Пользователь

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

    Эта задача имеет более одного пути решения, так что да, это возможно – в той или иной форме. Но, опять же, моя поделка умеет только "здороваться" с клиентами, говорить о чем-то более серьезном без документирования протокола бессмыслено. Почему? Потому что мы не знаем наверняка как оно устроено и все наши придумки могут обернуться прахом просто потому что оно устроено таки не так, как нам сначала казалось.
     
  13. Mega_Man

    Mega_Man Активный участник Пользователь

    Баллы:
    68
    Пфф, No Problems, пишем свою версию с нуля =)
    Неужели доков вообще нет?
     
  14. Автор темы
    Toxuin

    Toxuin Старожил Девелопер Пользователь

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

    DoritosMan Старожил

    Баллы:
    103
    Имя в Minecraft:
    koocez
    оперативки небось не хватит на теле( лаги будут...)

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

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