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

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

timaxa007

Модератор
5,831 409 672

Типа изучай HEX кодировку и сохраняй под свой стиль (на подобии как у NBT). Лень разбираться в подобном, тогда используй нестандартную кодировку архивации и с помощью кода, который как-бы распаковывает твой архив, только не виде файла, а виде кода для другого кода (типа распаковываешь картинку и сразу её биндищь).
Примера подобного использование того (HEX код) и того (архивация) у меня пока-что нет.

Бесконечная дальность прорисовки в майнкрафте

Последнее редактирование: 15 Мар 2018
Ну, как-то так. Я тоже могу ошибаться. Я пишу на 1.7.10.

JustAGod

1,070 47 403

Можно вообще до жути простой способ попробовать: через ксор.
Объясняю как это работает:
У нас есть некий ключ. Ключ это абсолютно любое целое не отрицательное число.
Шифрование/расшифровка: На вход нам подается массив изначальных/зашифрованных байтов любой длины. Все они по-порядку ксорятся ключом и на выходе мы получаем массив зашифрованных/расшифрованных байтов.
Пример:
Допустим у меня есть массив (1) и ключ . Тогда выходной массив будет . Важно понимать что знак ‘^’ в Java обозначает операцию побитового сложения xor. В результате получаем (2). В силу особенностей побитового сложения когда мы проделаем ту же операцию над массивом 2 мы вновь получим массив 1.

У этого способа есть свои недостатки но мне лень о них рассказывать. Почитай лучше вот тут.

Заказы не принимаю.
Деньги принимаю.

deleted.user

Мошенник

Как то не шибко много инфы на этот счет в гугле..

tox1cozZ

aka Agravaine

8,429 597 2,870

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

Источник: forum.mcmodding.ru

Разбор шифрования в Minecraft

Привет. Знаете про Minecraft? Да-да это та самая нашумевшая игра из 2014 про кубики, дракона и злых школьников, которые объединились в невероятной амальгаме. В игре есть как singleplayer, так и multiplayer. Но что шифровать в одиночке? (Хотя идея защитить свою карту паролем, чтобы негодяи не убили вашего верного пса, довольно заманчива).

верный пёс

Майнкрафт стал СЛОЖНЕЕ

Сегодня я расскажу про то, как работает шифрование в многопользовательском режиме. Но сначала нужно определиться с инструментарием.
Вот что я буду использовать:

  1. MCWP MITM прокси для исследования протокола майнкрафт.
  2. yggdrasil-server Сервер авторизации, похожий на тот что использует mojang для лицензионных аккаунтов. И да, все команды приведены для Windows.

Протокол майнкрафт

Мультиплеер майнкрафт построен на клиент-серверной архитектуре поверх tcp. По официальным данным начиная с версии 1 (до этого были еще альфа и бета) сетевая подсистема игры построена на фреймворке Netty (Java).
Если сильно упростить, то роли клиента и сервера сведены к выполнению в цикле этих действий:

Для клиента

  • Подключается к серверу
  • Подтверждает свой юзернейм (если сервер отправит Encryption Request)
  • Загружает и рисует карту
  • Перемещается по карте и отправляет свою позицию
  • Взаимодействует с остальными миром и отправляет события на сервер
  • Получает и проигрывает события от сервера

Для сервера

  • Принимает игроков
  • Проверяет их юзернеймы (если online-mode: true)
  • Генерирует карту и отправляет клиентам
  • Получает события и позицию от игроков и передает другим игрокам
Читайте также:  Как обновить яву Майнкрафт

Как устроены аккаунты в Minecraft

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

И хотя игра может работать без лицензии (изначально этот режим создавался для игры без доступа к сети интернет, когда нельзя проверить подлинность игрока, и называется в файлах конфигурации online-mode: false) без аутентификации пользователя шифрование не включается.

Кстати, сам Notch (создатель игры) говорил про пиратов так: «Качайте пиратку. Если она все также будет нравиться Вам в будущем, когда Вы сможете позволить ее себе, тогда и купите. Также не забудьте почувствовать себя плохо;)».

создатель майнкрафт

Лицензионной копией считается та, которая была куплена на сайте разработчика и имеет аккаунт Mojang (или Microsoft). А также привязанный к этому аккаунту uuid. UUID — это уникальный идентификатор каждого из игроков майнкрафт. Он не меняется даже после смены никнейма в игре.

Процесс обмена информацией с реестром аккаунтов (сервером аутентификации и авторизации) начинается еще задолго до подключения к серверу.

Рассмотрим поэтапно:

  1. Игрок заходит в лаунчер(программа для запуска игры)
  2. Игрок вводит пароль и логин от аккаунта
  3. Лаунчер отправляет их на сервер и если они верны получает токен
  4. Лаунчер хранит и обновляет токен при каждом входе в игру

Могу я украсть ваш аккаунт?

Уже заметили? Лаунчер отправляет логин и пароль игрока на сервер. Да, через https, но что нам мешает узнать логин и пароль подменив сервер авторизации? Так и поступим.
Разворачиваем yggdrasil-server:
Потребуется Python 3.8+

// Клонируем репозиторий git clone https://gitlab.com/seeklay/yggdrasil-server.git cd yggdrasil-server/
// Разрешаем и устанавливаем зависимости python3 -m pip install -r requirements.txt
// Запускаем свой сервер авторизации + сервер сессий sanic —cert x509/fullchain.crt —key x509/cert.key -d -p 443 server.app

Теперь нужно заставить лаунчер жертвы доверять нашему tls сертификату.

Раньше, лаунчер был, как и сама игра просто .jar файлом и заполучить его доверие можно было так же просто, как и клиента игры, но теперь лаунчер это нативная .exe программа которая использует корневые сертификаты системы. Углубляться в то, как креативно можно заставить жертву понажимать пару неизвестных кнопок не будем, но посчитаем что этот этап уже пройден. Тогда остается направить запросы на наш сервер. Например, изменя ip домена authserver.mojang.com на ip собственного сервера в файле hosts.

Теперь, когда жертва захочет зайти в игру, она разлогинится в лаунчере, так как сессия не зарегистрирована на нашем сервере. И клиенту придется ввести логин и пароль от его аккаунта. Когда это произойдет, в консоли сервера авторизации мы увидим это:

[DEBUG] AuthenticateRequest( agent=AuthenticateRequestAgent(name=’Minecraft’, version=’1′), username=’habr’, password=’newjersey’, clientToken=’4feb4d1fe82446d2aa4eb3d20f8c9ffd’, requestUser=’true’) [INFO] attempt to authenticate as habr but user not exists

В дебаг логе видно данные учетной записи. Атака удалась. А игрок так и не смог войти в лаунчер, так как такого пользователя на нашем сервере не было.
Да, это выглядит интересно, но как заставить игрока установить корневой сертификат и отредактировать hosts?
Игроки майнкрафт в основном — дети и обмануть их проще всего. Хочешь скачать новый мод на слона в майнкрафт? Скачай наш .exe нажми два раза и при запросе прав администратора нажми — да, и все слон — твой, а точнее кот в мешке.
Но да, это по сути глупость ведь попадя на компьютер пользователя и получив права администратора можно сделать гораздо ‘больше’.

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

Могу я узнать местоположение ваших алмазов?

Хорошо, мы узнали, что можно подменить сервер авторизации. Но что, если подменить сервер аутентификации (сервер сессий) который отвечает за подтверждение того, что игрок с конкретным uuid и никнеймом входит на сервер?

Читайте также:  Как быть читером в Майнкрафте на сервере

Для этого потребуется локальный игровой сервер, но его установку я показывать не буду. Также потребуется лицензионный аккаунт (ну да), или «локальный» на yggdrasil-server.
Чтобы увидеть, какими пакетами обмениваются сервер и клиент, воспользуемся mcwp.
Python 3.7+

// Устанавливаем MCRP python3 -m pip install MCRP
// Запускаем MTIM прокси mcwp -v -c examplesconf_blacklist.yaml

Заходим на порт прокси, и видим в консоли такую картину:

Что мы видим? Сервер посылает запрос на включение шифрования, и клиент на него отвечает, а затем они оба включают симметричное шифрование AES.
После включения шифрования mcwp уже не показывает дальнейший обмен пакетами, так как не может их расшифровать, ведь не знает ключ.
Но так у меня нет лицензионного аккаунта майнкрафт, и аккаунт m7 зарегистрирован локально на сервере yggdrasil-server и сервер тоже использует этот сервер аутентификации, мы можем расшифровать это соединение загрузив в mcwp модуль для локальной дешифровки.

Попробуем еще раз:

// Запускаем с модулем дешифровки (требуется версия mcwp >= 0.1.7-pre1) mcwp -c examplesconf_blacklist.yaml -v -d md -ll

И сразу видим отличия в логе инициализации:

[02/24/2023 02:22:30 PM] [INFO] MCRP: Running MCRP v0.1.7-pre1 (cubelib version 1.0.4-pre1) [02/24/2023 02:22:30 PM] [INFO] MCRP: Proxying config is: 127.0.0.1:25565 -> 127.0.0.1:25575 [02/24/2023 02:22:30 PM] [INFO] MCRP: Using protocol decryptor: Yggdrasil-Server-DecMod/v0.1 [02/24/2023 02:22:30 PM] [DEBUG] MCRP/CRYPTO: Generating 1024 RSA key. [02/24/2023 02:22:30 PM] [INFO] MCRP: Registred direct handlers list[1]: [02/24/2023 02:22:30 PM] [INFO] MCRP: [02/24/2023 02:22:31 PM] [INFO] MCRP: Registred relative handlers list[0]: [02/24/2023 02:22:31 PM] [DEBUG] MCRP: Entering mainloop [02/24/2023 02:22:31 PM] [INFO] MCRP: Waiting for client connection.

Видно что используется дешифратор протокола и был сгенирирован ключ RSA.
Подключаемся еще раз и смотрим в консоль:

Теперь мы видим все пакеты, которые передаются между клиентом и сервером (локальным сервером, который использует наш ‘игрушечный’ сервер авторизации).
Видя все пакеты, теперь мы можем отслеживать местоположение игрока и узнать где его дом. (ну и забрать алмазы конечно)

Разбор шифрования в Minecraft

Как работает шифрование в майнкрафт и как его можно расшифровать.
У протокола майнкрафт есть 3 состояния: Рукопожатие, Вход в игру, Игра.

Рассмотрим поближе что и кому отсылают сервер и клиент во время входа в игру:

  • Client -> Server: ClassicLogin.LoginStart(Username=’m7′)
    Клиент передает юзернейм, с которым хочет войти
  • Client Сервер передает свой публичный ключ и токен проверки
  • Client -> SessionServer: SessionJoin(accessToken, selectedProfile, serverId)
    Клиент передает на сервер сессий информацию о сервере к которому собирается подключится.

Клиент фактически говорит: у меня есть действительный токен 123 связанный с юзернеймом m7 и я хочу зайти на сервер с sha1(публичным ключем 456 и общим секретом 789)

  • Client -> Server: ClassicLogin.EncryptionResponse(SharedSecret, VerifyToken)
    Клиент отвечает зашифрованными публичным ключем сервера, симметричным ключем и токеном проверки

Разбор дешифрования

  • Когда сервер запрашивает у клиента включение шифрования, он посылает ему свой публичный ключ RSA и данные проверки, которые клиент должен зашифровать ключем сервера.
  • Когда прокси видит этот пакет, он подменяет ключ и/или данные проверки на собственные. Это нужно, что-бы когда клиент ответит общим симметричным ключем, зашифрованным публичным ключем сервера, мы могли его расшифровать и сохранить для расшифровки последющих сообщений.
  • Затем клиент отвечает общим симметричным ключем и рандомными данными, которые отправил сервер, но зашифрованные публичным ключем сервера. А перед тем как ответить, клиент делает запрос на sessionserver.mojang.com и отправляет туда свой токен, полученный при авторизации, и хеш sha1(shared_secret + public_key). Это нужно для защиты от атаки человека по середине, который подменит публичный ключ (но не подменит сессию).
  • Когда прокси получает ответ от клиента, он обращается к серверу сессий и дает команду подменить sha1(shared_secret + proxy_public_key) на sha1(shared_secret + server_public_key).
  • Когда сервер получает ответ от прокси, он обращается к серверу сессий на конечную точку session/minecraft/hasJoined с serverId, равным sha1(shared_secret + server_public_key) с общим секретом и username получеными от клиента, но так как прокси подменил serverId, сервер получает ответ 204 от сервера сессий (означает что проверка юзернейма прошла успешно) и подтверждает вход в игру пакетом LoginSuccess(UUID=’917cd927-86a2-42cd-b7b0-b1838ea4c933′, Username=’m7′) который передаётся уже зашифрованным с помощью общего секрета и шифра AES.
Читайте также:  Куда устанавливать плагины для Майнкрафт

Еще по теме (англ)

  • https://wiki.vg/Protocol_Encryption#Authentication
  • https://wiki.vg/Legacy_Mojang_Authentication#Authenticate

Источник: h.amazingsoftworks.com

Как исправить ошибку «Внутреннее исключение» в Minecraft

Как исправить ошибку

Что нужно знать об ошибке «Внутреннее исключение» в Minecraft?

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

Как исправить ошибку «Внутреннее исключение» в Minecraft?

  • Нажмите Windows, чтобы ввести cmd, щелкните правой кнопкой мыши командную строку и нажмите «Запуск от имени администратора».
  • Напишите netsh interface tcp show global и нажмите Enter.
  • Наличие получения состояние бокового масштабирования отключено, мы введем netsh interface tcp set global rss=enabled и нажмем Enter.
  • Если автоматическая настройка окна приема отключена, у нас на Как исправить «Внутреннее исключение» Ошибка в Майнкрафте, приходится писать netsh interface tcp set global autotuninglevel=normal и нажимать энтер.
  • Перезапускаем игру, чтобы попытаться снова загрузить реалм или сервер.
  • Отключить VPN, брандмауэры, антивирус и Hamachi.
  • Если VPN не используется, мы можем использовать его, чтобы проверить, решена ли проблема.

Изменить DNS-сервера

  • Входим в панель управления для входа в сеть и интернет.
  • Мы выбираем для просмотра состояния, сетевых задач, как для Как исправить «Внутреннее исключение» Ошибка в Minecraft.
  • Нажимаем на Ethernet рядом с подключениями и задаем ему свойства.
  • Выбираем версию 4 протокола Интернета (TCP/IPv4) для выбора адресов DNS-серверов.
  • В предпочтительном DNS мы размещаем 8.8.8.8, а во вторичном 8.8.4.4 следом.
  • Мы перезагружаем наш компьютер, чтобы применить изменения.
  • Использование другого подключения может помогите, если мы используем Wi-Fi, мы можем использовать мобильные данные.

Уменьшить расстояние рендеринга

  • Мы открываем игру, чтобы войти в одиночную карту.
  • Нажав Esc, мы входим в меню параметров.
  • Мы перейдем к настройкам видео, где мы уменьшим расстояние рендеринга до 8 фрагментов или меньше.
  • Измените нашу графику на быструю, уберите мягкое освещение и уменьшите расстояние симуляции.
  • Создайте нам новый профиль запуска на установках и новый.
  • li>
  • Нажимаем Windows, чтобы написать cmd
  • Находясь в командной строке, мы дадим вам запустить от имени администратора.
  • Мы собираемся написать netsh winsock reset и нажать Enter.
  • Далее мы пишем тип netsh int ip reset и нажимаем введите.
  • Теперь вам нужно написать ipconfig/release и нажать Enter.
  • Далее следует ввести ipconfig /renew и нажать Enter.
  • Наконец мы напишите ipconfig /flushdns с вводом.

В случае, если вы ничего не достигли с предыдущими указаниями о том, как исправить «Внутреннее исключение» Ошибка в Minecraft, уместно обратиться в службу поддержки сообщества, чтобы получить помощь, важно подчеркнуть, что о проблеме, которая возникает больше, чем все, что мы имеем в версии 1.7 или выше, проходя через отключение от сервера, видя различные возможные решения позволяют нам понять, что причин возникновения ошибки много.

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

Источник: minecraftperu.ru