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

Утилита [1.7.10 - 1.21] Authlib SkinFix - Авторизация и работающие скины своими руками

Тема в разделе "Модификации клиента", создана пользователем TaoGunner, 29 мар 2016.

Метки:
  1. AnvilM

    AnvilM Ньюби

    Баллы:
    1
    С головами есть проблема, как я понял, что бы получить текстуру головы, майнкрафт отправляет запрос на localhost/auth/profile.php, но uuid для запроса берет с официальных серверов
    (Если пользователь уже заходил на сервер, то uuid для запроса майнкрафт берет у сервера, насколько я понимаю)
    Это на 1.16.5
     
  2. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Если проблема лишь в том, что клиент игры запомнил официальный профиль игрока, а потом клиент был переделан на другой сервер и систему авторизации - то не вижу смысла что-то предпринимать. Слишком частная проблема для тех, кто не почистил клиент, прежде чем использовать.

    1. Удалить содержимое папки assets/skins/
    2. Удалить json с официальным профилем

    Если после этих манипуляций ошибка воспроизводится - то тогда да, это проблема.
     
  3. shoei1944

    shoei1944 Активный участник

    Баллы:
    61
    Привет, появилась проблемка.
    Изначально, проблема была в "Multiplayer is disabled. Check Microsoft settings."
    В сингле скины работали
    upload_2024-6-21_21-43-7.png

    Решил ее через (на клиенте и сервере):
    -Dminecraft.api.auth.host=https://nope.invalid
    -Dminecraft.api.account.host=https://nope.invalid
    -Dminecraft.api.session.host=https://nope.invalid
    -Dminecraft.api.services.host=https://nope.invalid

    Но потом я не смог зайти на "исправленный" сервер, получил ошибку Failed to log in
    upload_2024-6-21_21-44-55.png

    Сервер: Ядро Purpur 1.16.5 патч
    Клиент: Чистый 1.16.5 патч

    Как решить проблему с мультиплеером?
     
  4. koten0k

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

    Баллы:
    46
    Серверы аутентификации в настоящее время отключены для технического обслуживания. Источник: ЯПереводчик
     
  5. shoei1944

    shoei1944 Активный участник

    Баллы:
    61
    имхо, строчки
    -Dminecraft.api.auth.host=https://nope.invalid
    -Dminecraft.api.account.host=https://nope.invalid
    -Dminecraft.api.session.host=https://nope.invalid
    -Dminecraft.api.services.host=https://nope.invalid

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

    PS: php скрипт был запущен
     
  6. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Думаю, для начала нужно разобраться с параметрами запуска клиента игры. Если ты запускаешь клиент с официальным аккаунтом (используя лицензионные UUID и AccessToken), то лучше этого не делать. Если не ошибаюсь, мультиплеер блокируется, если в аккаунте указано, что тебе нет 20 лет.

    Запускай клиент с фейковыми UUID и AccessToken, которые прописаны в базе данных твоей системы авторизации.

    И да - проверь, что и в клиенте, и на сервере есть в логах строчка SkinFix by TaoGunner. Это будет означать, что исправленный authlib загрузился.

    А лучше пиши в телеграмм.
     
  7. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Выяснилось, что сообщение Multiplayer is disabled появляется только в клиенте версии 1.16.5. Чтобы исправить это надо в authlib отредактировать ссылки https://sessionserver.mojang.com и https://api.minecraftservices.com на несуществующие. Тогда кнопка Multiplayer вернётся.

    Обновление

    Изменения:
    • Добавлена пропатченная библиотека для Minecraft 1.20.6 и 1.21.0 - authlib-6.0.54-skinfix.jar;

    Код:
    com/mojang/authlib/minecraft/client/MinecraftClient.java -> createUrlConnection
        // FIX: Добавлен User-Agent на все HTTP-запросы (обход фильтра CloudFlare)
        connection.setRequestProperty("User-Agent", "Mozilla/5.0");
    
    com/mojang/authlib/yggdrasil/TextureUrlChecker.java
        // FIX: Функция isAllowedTextureDomain теперь всегда возвращает true
        // FIX: Функция isDomainOnList теперь всегда возвращает true
    
    com/mojang/authlib/yggdrasil/YggdrasilEnvironment.java
        // FIX: sessionHost и servicesHost заменены на несуществующие
        "https://sessionserver.mojang.lol"
        "https://api.minecraftservices.lol"
    
    com/mojang/authlib/yggdrasil/YggdrasilMinecraftSessionService.java
        // FIX: Добавлены join, hasJoin, profile адреса
        // FIX: Добавлен лог для проверки, что библиотека загружена
    
        public String getSecurePropertyValue(final Property property) throws InsecurePublicKeyException {}
        // FIX: Убрана проверка цифровой подписи текстур
    
    com/mojang/authlib/yggdrasil/YggdrasilUserApiService.java
        public boolean isBlockedPlayer(final UUID playerID) {}
        // FIX: На запрос о блокировке всегда ответ false
    
        private Set<UUID> forceFetchBlockList() {}
        // FIX: Список заблокированных пользователей всегда пуст (убран запрос)
    
        public UserProperties fetchProperties() throws AuthenticationException {}
        // FIX: Все привелегии (мультиплеер, Realms, чат) - включены по-умолчанию
    
    com/mojang/authlib/yggdrasil/YggdrasilServicesKeyInfo.java
        private static Optional<ServicesKeySet> fetch(final URL url, final MinecraftClient client) {}
        // FIX: Убран запрос сертификата клиента (мусор в логах)
    
     
  8. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Ко мне обратился 1 человек, который сообщил, что сам он текстуру видит, а другие игроки его текстуру - нет. Как выяснилось, в процессе патчинга я забыл убрать 1 проверку на цифровую подпись. Поэтому:

    Исправление

    • Исправлена пропатченная библиотека для Minecraft 1.20.6 и 1.21.0 - authlib-6.0.54-skinfix.jar;

    Текстуры проверены, все отображаются.
     
  9. Iluvator

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

    Баллы:
    61
    Доброго времени суток. Спасибо за замечательную библиотеку. У меня все отлично работает, но у игроков иногда появляются фризы, связанные с отправкой сообщений в чат. И я нашел паттерн когда это происходит:
    - Не слать сообщения в чат около 5-10 - минут. Отправляешь сообщений в чат и клиент подвисает на 1-2 секунды. Также клиент может подвиснуть в других игроков рандомно, но специфика такая же - 1-2 секунды.
    - После замены authlib на оригинальную фризы уходят.

    Т.к. выше вроде как про это никто не писал, видимо проблема в технической реализации моих скриптов. Я сам их написал на Python + Fastapi, но написал их на синхронном Python с использованием Sqllite (что может вызывать проблемы). Реализовал стандартные 4 метода, что указаны в инструкции (+ get_texture отвечающий за скины). Однако я не могу понять, как связаны лаги непосредственно с пропатченной библиотекой. Потому что запросов к моему сервису во время лагов нету. Запросы идут когда игроки авторизуются, грузят/удаляют скины, заходят на сервер. Как только я возвращаю оригинальную библиотеку authlib - лаги исчезают.
     
  10. SergK35

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

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    Если модовый сервер, то найти нагрузку можно при помощи мода спарк
     
  11. Iluvator

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

    Баллы:
    61
    С большой долей вероятности ошибка на стороне клиента. (Спарк вроде лаги сервера только искать может). + Ошибка появляется на двух разных сборках, на разных хостах, без общих модов. Общие у них только пропатченная authlib и мои сервисы. А при удалении с клиента патченной authlib лаги проходят.
     
    Последнее редактирование: 9 ноя 2024
  12. Iluvator

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

    Баллы:
    61
    Еще один тест провел, на чистом сервер/клиенте 1.20.1 + Forge 47.3.0: оставил на сервере офф. версию authlib (выключил online-mode). На клиенте authlib_skinfix. Итого все равно вижу лаги, после перерыва в чате. Ставлю на клиент тоже офф версию authlib - лагов нет.

    Edited:
    Ради теста заменил enpoint в пропатченной либе (https://api.minecraftservices.com) на свой тестовый и заметил, что как раз в момент лага идет запрос по адресу:
    "https://api.minecraftservices.com/privacy/blocklist". Я видел что на версиях 1.17-1.18 был баг, связанный как раз с фризами в чате, как у меня, и вызывала их кривая система банов от Mojang. Я подозреваю, нужно вырезать из кода запрос по этому адресу, и фризы пройдут.
     
    Последнее редактирование: 10 ноя 2024
  13. SergK35

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

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    Спарк можно ставить и на клиент для его отладки
     
  14. Iluvator

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

    Баллы:
    61
    Спасибо за информацию, но чем мне поможет spark, учитывая выше мною описанное?
     
  15. SergK35

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

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    Спарк покажет место, которое вызывает нагрузку, но я так понимаю, что уже смогли определить и без него
     
  16. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    После запрета cloudflare от РКН у меня перестал открываться rubukkit на домашнем интернете, поэтому пишу с опозданием, ответ вы уже сами нашли.
    Патченная authlib изменяет пути до join hasJoined и profile, но остальные остаются нетронутыми. И соответственно могут быть фризы:
    1. При использовании чата, так как идёт попытка получения пользовательного ключа и сертификата для подписи сообщений, потому что у Microsoft теперь есть система мутов и банов по сообщениям чата.
    2. При запросе в Realm, там тоже может быть увеличен тайминг на парсинг ошибочного ответа.
    3. При запросе информации о сертификатах других игроков, которые пишут в чат.

    Если еще не разобрались с этой проблемой можем сколлабиться и повырезать все запросы, где наблюдаются фризы.
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Так запрет и это чинит.
     
  18. Iluvator

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

    Баллы:
    61
    Спасибо большое за ответ! Фризы вроде починил, но мы пока еще полноценно это не протестировали, решение в мое случае, которое скорей всего помогло:
    Заменить ссылки https://sessionserver.mojang.com и https://api.minecraftservices.com на ссылку типа "https:/0.0.0.0". Почему такую? Если вставить невалидную ссылку типа "None_1234" - крашнится игра/сервер, если вставить несуществующую ссылку типа "https://none" - фриз станет еще дольше, из-за запроса, который будет заканчиваться таймаутом. А вот переход по ссылке "https:/0.0.0.0" сразу фейлится и вроде как фризов не вызывает. Костыльно, да, но пока работает.
     
  19. nigger2

    nigger2 Активный участник

    Баллы:
    61
    Имя в Minecraft:
    scratching_kek
    Для тех, у кого проблемы с CloudFlare, причина может быть не в User-Agent а в опции Browser Integrity Check, которая проверяет заголовки HTTP-запросов. Ее можно отключить в настройках CloudFlare (Security -> Settings -> Browser Integrity Check). У меня она блокировала все запросы от от Minecraft к моему API. screenshot.png
     
    Последнее редактирование: 11 дек 2024
  20. Iluvator

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

    Баллы:
    61
    Спойлер: это не помогло. Решил вырезать нафиг все запросы непосредственно из кода библиотеки. И вот это уже помогло. Просто закомментил обращения к этим адресам. Если интересно кому, могу дать ссылку с моей небольшой инструкцией на github как делать такие изменения в authlib.
     

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