Хостинг серверов Minecraft playvds.com
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление
  3. Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Лаунчер GravitLauncher v4(модификация sashok724's Launcher v3) [Обновление]

Тема в разделе "Веб-обвязки и лаунчеры", создана пользователем Gravit, 9 авг 2018.

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

    Gravit Участник Пользователь

    Баллы:
    36
    Представляю Вашему вниманию свою модификацию sashok724's Launcher v3, которую я делал для себя, так как многое не устраивало.
    Обновление: в ветке 4.0.xx произошли большие изменения

    [​IMG]
    Основные изменения
    [+] Поддержка нативной библиотеки защиты Avanguard
    [+] Сборка Gradle
    [+] Полноценные продвинутые модули на Java
    [+] Белые списки для тестеров
    [+] Установка разных скинов на разные сервера
    [+] Код избавлен от множества грязных "хаков", зависящих от реализации и недокументированных особенностей конкретной JVM
    [+] Вырезана установка своей JVM. Добавлена опция, позволяющая вернуть эту функцию
    [+] Защита от брута пароля

    [+] Лаунчер комплируется и запускается с JDK 11/10/9/8
    [+] ClassPath не виден в строке запуска
    [+] Вырезана недокументированная возможность использования JavaScript плагинов на стороне сервера
    [+] Различные исправления и доработки
    [+] Усиленная защита на всех этапах работы лаунчера

    [+] Исправления багов из основной ветки лаунчера
    [+] ProGuard на стороне владельца проекта
    [+] Модификация класса с помощью JavaAssist для записи в Launcher.jar адреса и порта. Теперь скопировать config.bin недостаточно, а с учетом ProGuard маппинги у всех разные и просто так подменить один файл другим невозможно
    [+] Новый современный дизайн по умолчанию
    [+] Опциональные моды
    [+] Новая система автообновления. Поддержка обновления с старых версий и оригинального сашка сохранена

    Особенности установки на некоторые конфигурации
    При установке на Sponge необходим специальный LaunchWrapper (ссылка). В Sponge этот файл находится в libraries/net/minecraft/launchwrapper/1.12/
    При использовании версии 1.5.2 и ниже необходим патч для работы на Windows с isUsingWrapper true: 1.5.2 (ссылка скоро будет)
    При запуске сервера на JDK 9/10/11 необходимо изменить конфигурацию ProGuard для корректной работы сборки лаунчера:
    Код:
    [/I]
    [I]-libraryjars '<java.home>/lib'
    -libraryjars '<java.home>/jmods'
    


    Поддержка
    [+] Принимаю Pull Request'ы
    [+] Баг трекер на GitHub, можно писать предложения по улучшению
    [+] Форк активно развивается

    Переход с основной ветки sashok724's Launcher
    Рекомендуемая инструкция для крупных проектов
    • Рекомендуется настроить мой лаунчер с нуля на отдельном порту: Установка с нуля. Используйте незанятый порт для возможности настройки без downtime
    • Скопируйте private.key и public.key с старого лаунчера. Потеря этих файлов грозит невозможностью обновиться. Так же препятствием на пути автообновления может служить ошибка в runtime Сашка, полностью ломающая автообновление
    • Далее командами downloadClient скачать клиенты вашего проекта
    • Перенесите настройки предыдущих профилей в новые. Обратите внимание - экранирование точек не требуется
    • Перенесите настройки авторизации/скинов/UUID с старого LaunchServer.cfg на новый. Настройте новые параметры под свой проект
    • Перенесите папку updates с старого лаунчера в новый
    • Перенесите настройки из config.js старого лаунчера в новый. Дизайн для оригинального сашка не будет работать на моем форке без глубоких изменений
    • Выполните build и проверьте правильность настройки
    • Обновите скрипты старта серверов и создайте аккаунты в соответствии с инструкцией
    • Остановите лаунчсервер оригинального сашка, в конфиге нового лаунчсервера измените порт на порт старого лаунчсервера, проверьте корректность автообновления.
    • Перезапустите все сервера с использованием нового скрипта запуска

    Wiki проекта: https://github.com/GravitLauncher/Launcher/wiki/

    Исходники проекта(4.0.xx и выше): https://github.com/GravitLauncher/Launcher
    Исходники проекта(3.17.xx и ниже): https://github.com/gravit0/Launcher

    Сборка 4.0.7 от 19 Ноября 2018: https://github.com/GravitLauncher/Launcher/releases/tag/v4.0.7-stable
    Сборка 3.17.0 от 24 Августа 2018: https://github.com/gravit0/Launcher/releases/tag/3.17.0

    Ссылка на Discord канал: https://discord.gg/aJK6nMN
    Тему буду дополнять
     
    Последнее редактирование: 20 ноя 2018
  2. Mr Hosting
  3. Автор темы
    Gravit

    Gravit Участник Пользователь

    Баллы:
    36
    Резерв
     
  4. Santa

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

    Баллы:
    76
    Имя в Minecraft:
    Jewish_Cat
    а зачем ты избавился от jvm? -.-
     
  5. alexandrage

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

    Баллы:
    173
    Оно околобесполезное. Ибо только жаба вайнворлда спасает от Универсалок. Но она робит исключительно через jni.
    Код:
    #include <jni.h>
    #include <windows.h>
    #include <string>
    using namespace std;
    typedef jint(JNICALL *JNI_CREATEJAVAVM)(JavaVM **, JNIEnv **, void *);
    JNI_CREATEJAVAVM jni_JNI_CreateJavaVM = NULL;
    
    extern "C" __declspec(dllexport)
    int main() {
        using namespace std;
        JavaVM *jvm;
        JNIEnv *env;
        string JAVA_HOME("C:/jre-x64");
        string JVM_DLL("/bin/server/jvm.dll");
        string JVM_HOME = JAVA_HOME+JVM_DLL;
        HMODULE hJvm = ::LoadLibrary(JVM_HOME.c_str());
        jni_JNI_CreateJavaVM = (JNI_CREATEJAVAVM)GetProcAddress(hJvm, "JNI_CreateJavaVM");
        JavaVMOption options[1];
        string launcher ="-Djava.class.path="+JAVA_HOME+"/Launcher.jar";
        char *options1 = &launcher[0u];
        options[0].optionString = options1;
        JavaVMInitArgs args;
        args.options = options;
        args.nOptions = 1;
        args.ignoreUnrecognized = FALSE;
        args.version = JNI_VERSION_1_8;
        jni_JNI_CreateJavaVM(&jvm, &env, &args);
        jclass class_Launch = env->FindClass("net/launcher/run/Mainclass");
        jobjectArray str_array = env->NewObjectArray(12, env->FindClass("java/lang/String"), env->NewStringUTF(""));
        env->CallStaticVoidMethod(class_Launch, env->GetStaticMethodID(class_Launch, "main", "([Ljava/lang/String;)V"), str_array);
        jvm->DestroyJavaVM();
    }
    
     
  6. Автор темы
    Gravit

    Gravit Участник Пользователь

    Баллы:
    36
    1. Время и место на диске
    Скачивание JVM занимает время, которое новичок может потратить на игру(привет деревня и 3G с потерями пакетов)
    2. Обновления безопастности
    Администраторы не будут обновлять JVM регулярно, а в обновлениях содержатся обновления безопастности и исправление ошибок.
    3. Не очень хорошо таскать с собой то, что уже есть у клиента
    4. Лишаем пользователя выбора, например между OpenJDK и Oracle
     
  7. log_inil

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

    Баллы:
    88
    1. Чумовая логика, скачивать ассесты гигами через 3g мы можем, а скачать стабилити джаву - нет.
    Играть на сервере через 3g можем, а скачать джаву - нет.
    Скачать скины игроков через 3g можем, а джаву - нет.
    2. Например? Что такого опасного может произойти с джавой, которая запускается для клиента? Т.е. ставить моды разных не проверенных людей это безопасно?
    3. Ничерта у него нет, ну будет у него седьмая джава и все, даже лончер не запустится, стартер надо пилить.
    4. Лол, запускать маин на openjdk, еще сервер на нем запустите.

    Джарник лаунчера в этой версии хранится в трижды упакованном виде в сервере?
    upload_2018-8-9_16-54-51.png
     
    Последнее редактирование: 9 авг 2018
  8. Автор темы
    Gravit

    Gravit Участник Пользователь

    Баллы:
    36
    Не вопрос
    Код:
    /lib/jvm/java-8-openjdk/bin/java -jar Launcher.jar
    https://imgur.com/BgP1sM7
    Код:
    /lib/jvm/java-8-openjdk/bin/java -Xmx1024M -Dlauncher.noJAnsi=false -cp Launcher.jar:Spigot.jar org.bukkit.craftbukkit.Main
    https://imgur.com/KDzwutO
    P.S. Из за ограничения на длинну сообщения не могу вставить скрин прямо сюда
     
  9. Незнайчик

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

    Баллы:
    76
    Похвально что кто-то занялся форком :good:
     
  10. Akame

    Akame Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Akame
    По PHP напишу одно - код не комильфо.
    Создаешь новые переменные и по факту дублируешь данные.
    Бессмысленное использование *_once, подключение других скриптов. Ты не в цикле интерпретируешь подключаемое содержимое.
    http://php.net/manual/ru/function.require-once.php
     
  11. Zoom4ikDan4ik

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

    Баллы:
    78
    Непонятное разделение лаунчера на сам лаунчер и либу для авторизации. Идее есть место быть, но она бессмысленна.
     
  12. Автор темы
    Gravit

    Gravit Участник Пользователь

    Баллы:
    36
    PHP код привязок пока не трогал, он был написан sashok724's
    Мой скрипт привязки к Yii2
    Sashok724's сделал так, что authlib использует классы Launcher, что довольно бессмысленно, надо избавиться от этой зависимости и тогда модули будут разделены правильно
    Модуль Launcher содержит всё, что нужно для запуска клиента и работы с JavaFX
    Модуль LauncherAuthlib содержит классы для авторизации, ему не нужно знать как запускать клиент и как работать с JavaFX
    Модуль libLauncher содержит общие классы, необходимые всем другим модулям. В идеале - каждый модуль зависит только от libLauncher и своих библиотек
    Модуль LaunchServer содержит только те классы, которые необходимы серверу авторизации, он не должен знать ни о authlib, ни о JavaFX

    P.S. Avanguard надо будет подключить сюда
     
  13. Will Orion Z

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

    Баллы:
    76
    Имя в Minecraft:
    willorion
    Как бы это норма, на openjdk сервер прекрасно крутится и клиент на линуксах запускается.
     
  14. alexandrage

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

    Баллы:
    173
    P.s Столько бесполезной работы провел. А то что всем нужно не сделал. Прикрутить BCrypt для юзеров dle.Чтоб зря не костылять через запрос к сайту.
     
  15. Автор темы
    Gravit

    Gravit Участник Пользователь

    Баллы:
    36
    Алгоритм хеширования может меняться от версии к версии PHP. Могут использоватся различные соли/алгоритмы генерации солей, что бы еще больше усилить безопастность. От версии к версии могут меняться поля базы данных, их тип и всё что угодно.
    Кроме того, в скрипт привязки можно добавить свой собственный код для учета статистики или бана никнейма прямо в момент авторизации.
    Единственное, что мне совсем не нравится в скриптах привязки - формат ответа. Для приличия нужен хотя бы json(JsonAuthProvider уже есть, нужно только переписать скрипты привязки на него)
     
  16. alexandrage

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

    Баллы:
    173
    Сказал бы прямо==лень. В старом сашке я давно сделал.
     
  17. alexandrage

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

    Баллы:
    173
    На счет бд согласен. Давно вывел таблицу сашка 2 отдельно.
     
  18. Автор темы
    Gravit

    Gravit Участник Пользователь

    Баллы:
    36
    Если возьмется кто нибудь - приму Pull Request, без проблем

    Сегодня день потратил на Avanguard.
    Библиотека глючная, что бы можно было адекватно использовать нужно закоммитить 90% функционала.
    Во время тестов вылетал Discord с ошибкой памяти.
    Огромная нагрузка на ядро, такая что курсор переставал двигаться.
    Обычный майнкрафт 1.12 без модов вылетал с OutOfMemory через пару минут после старта.
    После тестов ядру винды совсем поплохело и начали глючить даже обычные программы.
    И это на Core 2 Duo и 8Гб ОЗУ.

    Если и использовать Avanguard, то только с минимальным функционалом
     
  19. Akame

    Akame Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    Akame
    Смотрю многие любят создавать велосипеды. Однако 3 декабря 2015 года толковые программисты больше не используют соли и делают ставки на самое высокопроизводительное хеширование Argon2
     
  20. alexandrage

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

    Баллы:
    173
    Есть и такое для java https://github.com/phxql/argon2-jvm
     
  21. Автор темы
    Gravit

    Gravit Участник Пользователь

    Баллы:
    36
    Поддержка Avanguard
    С помощью @Zaxar163 прикрепил поддержку Avanguard. Используется собственный форк авангарда от Zaxar163
    Все beta/experimental фитчи не включались в сборку Avanguard
    Сделал защиту от выгрузки модуля Avanguard

    Проверил на Extreme Dll Injector всеми доступными в этом инжекторе способами
    Есть 1 способ обойти эту защиту, но он очень трудоемок для автоматического обхода и без запроса прав админа ничего с этим сделать нельзя.
    Универсальные обходы не будут работать, как и обходы, расчитаные на простую выгрузку модуля Avanguard

    Как использовать:
    Скачиваем Avanguard32.dll и Avanguard64.dll и кидаем в <папка клиента>/native
    Сам jar'ник собираем с ветки gravit-fix
    Как наберется достаточно изменений сделаю релиз и солью с мастером
     

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