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

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

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

Метки:
  1. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Обновление библиотеки authlib-2.1.28 для Minecraft 1.16.5
    Как и обещал, проверил прошлую, наспех сделанную библиотеку в действии. Результат: библиотека оказалась нерабочая.

    Правильно написал @Re'aktiv, ссылки на авторизации теперь создаются из нескольких строк, часть хранится в старом-добром YggdrasilMinecraftSessionService, а начало ссылки (https://api-staging.mojang.com) теперь перенесено в YggdrasilEnvironment. И что самое "приятное", InClassTranslator не видит в этом классе ни одной строки! Но не беда, я всё переделал и теперь уже выкладываю проверенную библиотеку. Проверку осуществлял на домашнем сервере + клиенте с Fabric, с настройкой online-mode: true. Результат:
    [​IMG]

    Итак, что сделано:

    • YggdrasilMinecraftSessionService. Убрана проверка на домен, с которого берутся скины.
    • YggdrasilMinecraftSessionService. Убрана проверка цифровой подписи скинов.
    • YggdrasilMinecraftSessionService. В класс добавлен параметр-строка DOMAIN_NAME с началом хоста (http://localhost) для удобства редактирования в InClassTranslator'е.
    • YggdrasilMinecraftSessionService. Добавил строку в лог SkinFix by TaoGunner. Менять разрешается :)
    • YggdrasilEnvironment. Изменил пути серверов авторизации на ссылку на строку YggdrasilMinecraftSessionService.DOMAIN_NAME.
    • YggdrasilSocialInteractionsService. Убрал запрос на привилегии, который сыпал ошибкой в лог клиента. Чисто косметическое изменение.
    Вот так выглядит класс YggdrasilMinecraftSessionService в InClassTranslator'е:
    [​IMG]

    Что выделено красным - то можно редактировать для своих нужд. Судя по этой картинке ссылки получатся такими:
    И еще одно дополнение: так как было изменено несколько классов, то теперь в клиенте лучше заменить библиотеку полностью, удалив оригинальный authlib, а на сервере лучше полностью заменить содержимое папки com.mojang.authlib.
     

    Вложения:

    Последнее редактирование: 5 май 2021
  2. Re'aktiv

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

    Баллы:
    66

    Ураааа! Спасибо! )
     
  3. Re'aktiv

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

    Баллы:
    66

    Хм. Потестил в общем вашу библиотеку и понял что она опять к сожалению не работает.
    Сперва всё поправил как надо на свой сайт - пишет службы авторизации отключены, и там не видно что какие-то запросы летят, хотя повторю ещё раз - ссылка что в класстрансляторе в первой строке поставлена правильная. Обратил внимание что в файле YggdrasilEnvironment у вас везде прописано localhost, повесил в локалхост логгер и увидел что запросы по прежнему летят в него. Т.е. у вас оно работает потому что вы поправили YggdrasilEnvironment , а ваше "В класс добавлен параметр-строка DOMAIN_NAME с началом хоста (http://localhost) для удобства редактирования в InClassTranslator'е." почему-то не работает.
    Потестируйте пожалуйста ещё раз, или объясните мне пожалуйста где я косяк?
     
  4. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Протестировал. Было забавно обнаружить, что проблема скрывалась в этом:
    [​IMG]
    Компилятор не дурак: зачем ему делать ссылки на final-строку, если можно тупо подставить её при компиляции? :lol:
    Убрал final, протестируйте, пожалуйста. (ссылку обновил)
     
  5. Re'aktiv

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

    Баллы:
    66
    Попробовал, прописал опять везде свои ссылки - вроде чего-то поменялось. Теперь в одиночке натягивается скин, т.е. ссыль на profile.php явно работает. В сервере всю папку аутхлиб на вашу пофикшенную с пофикшенным под меня классом заменил, и вот там всё-равно какая-то трабла. Пишет не удалось проверить имя пользователя. Я подменил сайт на логгер и увидел что как минимум на мой join.php не летят никакие данные, обращения есть а данных в POST или GET нет, хотя токен и ууид лаунчер клиенту отдал, т.е. чего-то видно поломалось в самом механизме авторизации, либо возможно я как всегда чего-то делаю не так. В общем теперь запросы летят на правильный домен, но данные не летят. Может всё-таки как-нибудь в YggdrasilEnvironment впихать текстовые строки, чтобы править прямо там?
     
    Последнее редактирование: 7 май 2021
  6. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Проверил еще раз: у меня всё работает. Результаты в debug-логе:
    Код:
    [05.07.21][18:30:53]    [JOIN] Вызов скрипта. Метод: POST | Тип содержимого: application/json; charset=utf-8
    [05.07.21][18:30:53]    [JOIN] Получены JSON-данные: {"accessToken":"9d399be6279e41d2a5344a0f26d63242","selectedProfile":"5e1e184e9f734cf9aa30ce6bef53254b","serverId":"22d128404f3ff1f656e85bd0209b622fa076e6e6"}
    [05.07.21][18:30:53]    [JOIN] Запрос MySQL: SELECT id FROM players WHERE uuid="5e1e184e9f734cf9aa30ce6bef53254b" AND accessToken="9d399be6279e41d2a5344a0f26d63242";
    [05.07.21][18:30:53]    [JOIN] Найдено результатов: 1
    [05.07.21][18:30:53]    [JOIN] Запрос MySQL: UPDATE players SET serverID="22d128404f3ff1f656e85bd0209b622fa076e6e6" WHERE uuid="5e1e184e9f734cf9aa30ce6bef53254b" AND accessToken="9d399be6279e41d2a5344a0f26d63242";
    [05.07.21][18:30:53]    [JOIN] Успешное выполнение скрипта! Выходим...
    [05.07.21][18:30:53]    [HASJOINED] Вызов скрипта. Метод: GET
    [05.07.21][18:30:53]    [HASJOINED] Запрос MySQL: SELECT username,uuid FROM players WHERE username="TaoGunner" AND serverId="22d128404f3ff1f656e85bd0209b622fa076e6e6"
    [05.07.21][18:30:53]    [HASJOINED] Найдено результатов: 1
    [05.07.21][18:30:53]    [HASJOINED] Успешное выполнение скрипта! Выходим...
    
    Надо смотреть ваши скрипты.
     
  7. Re'aktiv

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

    Баллы:
    66
    Добрый вечер. Потыкал ещё свои скрипты. Ошибку не нашёл, но постараюсь изложить чего нашёл.
    В общем мой логгер не особо то видимо ловит json запросы, по этому я сразу и писал что запросы пустые - там всё нормально, все данные что лаунчер отдал клиенту летят уже от клиента на join.php как надо, и даже join.php в ответ ему как и положено не шлёт никаких ошибок а молча записывает полученный serverId. А вот дальше чего-то непонятное происходит, поскольку запрос на мой hasJoined.php не летит никакой. В клиенте вылезает ошибка которая уже из самого клиента а не которую какие-либо скрипты присылают: "Не удалось проверить имя пользователя!" - она там в файле переводов в клиенте лежит. В общем есть подозрение что либо запрос от сервера не летит вовсе, либо летит не туда где в аутлибе написано, хотя ссылки все проверил и как надо записал. В итоге сервак и не может проверить то что ему надо. Не понятно почему у меня так, а у вас работает. Может ещё чего-то где-то надо исправить? В сервере заменял всю папку authlib из вашей библиотеки с моими ссылками. Куда копать дальше не знаю, посмотрим как оно будет у других, ибо мне не к спеху, ибо просто с друзьями поиграть хотел. На всякий случай прикладываю пофикшенную аутлибу и картинки.
     

    Вложения:

  8. alexandrage

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

    Баллы:
    173
    Вот так парсятся json аргументы на php
    $json = json_decode(file_get_contents('php://input'));
    @$uuid = $json->selectedProfile;
    @$token = @$json->accessToken;
    @$serverid = $json->serverId;
     
  9. Re'aktiv

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

    Баллы:
    66
    Спасибо, это понятно) Не понятно почему запросы на hasJoined.php мой не летят от сервера.
     
  10. alexandrage

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

    Баллы:
    173
    Там своя аутлиба же в ядре. Тебе надо там тоже ссылки сменить. Если бумага, то запускать надо с джарника cache/patched_1.16.5.jar иначе перепатчит обратно на обычный.
     
  11. Re'aktiv

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

    Баллы:
    66
    Я вот эту папку полностью заменил в ядре на ту же аутлибу что в клиенте с пропатченными ссылками, сервер не бумага - форджевый, обычный. В форже нету вроде ничего больше похожего на аутлибу, в папке libraries тоже. Х.з. где чего не так, и не понятно ещё почему у ТС работает.
     

    Вложения:

  12. Re'aktiv

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

    Баллы:
    66
    Кстати а ничего не мешает попробовать запусить ванилу и проверить как оно будет на ней...
     
  13. Re'aktiv

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

    Баллы:
    66
    Хы) Интересная инфа, в ваниле авторизация работает как часы, стало быть проблема не в моих скриптах, и не в аутлибе, а в том что не работает оно именно в ядре майна которое форж приносит с собой. Надо копать)
     

    Вложения:

  14. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Уже откопал за тебя. Даю подсказку:
    • В папке с сервером Forge удали файл minecraft_server.1.16.5.jar и попробуй запусти сервер через forge-1.16.5-36.1.16.jar. Будешь удивлён.
    • Загляни в \libraries\net\minecraft\server\ :lol:
     
  15. Re'aktiv

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

    Баллы:
    66
    Спасибо)
    1) minecraft_server.1.16.5.jar - я его и фиксил, а он чего-то оказывается форжевому серверу не особо то и нужен. Запускал я всегда через forge-1.16.5-36.1.16.jar, но думал что ядро майносервера ванильного тоже как-то он подсасывает и эксплуатирует раз с собой приносит.
    2) А вот это вот да, чёто там есть. Вечерком потычу, когда смотрел видать проглядел, спасибо)

    З.Ы. Не плохо бы добавить подобные заметки для разных серверных ядер сразу к основному посту, чтобы потом не метались в догадках где чего фиксить остальные)
     
  16. Re'aktiv

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

    Баллы:
    66
    Везде в выше указанных местах всё пофиксил - авторизация работает! Спасибо)
     
  17. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Очень рад. Тему постараюсь освежить и проверить библиотеку на самых часто используемых серверах.
     
  18. alexandrage

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

    Баллы:
    173
    Все правильно, новый forge использует деобфусцированный клиент и сервер.
     
  19. Автор темы
    TaoGunner

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

    Баллы:
    66
    Имя в Minecraft:
    TaoGunner
    Как человек, писавший Core-моды для Forge, пустил скупую мужскую соплю. Вспомнил, как каждый ASM-патч проверял с обфускацией и без неё, писал на это всё условия... :confused:

    P.S.: Актуализировал первое сообщение темы
     
  20. Re'aktiv

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

    Баллы:
    66
    Осталось дождаться когда спонж запилят под 1.16.5 и начнётся новая массовая миграция серверов на новые версии)
     

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