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

Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Лаунчер GravitLauncher v5.1

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

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

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

    Баллы:
    66
    GravitLauncher - форк лаунчера Сашка, обросший огромным функционалом. Этот лаунчер предоставляет уникальные возможности, сравнимые, иногда и превосходящие приватные лаунчеры под конкретный проект.
    [​IMG]

    Основные изменения
    [+] Поддержка нативной библиотеки защиты AntiInject: Avanguard2, SimpleGuard и GravitGuard
    [+] Сборка Gradle, API лаунчера доступно в Maven Central
    [+] Полноценные модули на Java с безграничными возможностями
    [+] Конфигурация и профили на JSON
    [+] Использование протокола WebSockets
    Позволяет настроить проксирование nginx, CloudFlare, использовать SSL сертификат, настроить защиту от DDoS атак, выдерживать огромные нагрузки. Скачивание файлов идет по протоколу HTTP/HTTPS в несколько потоков для увеличения скорости загрузки, Вы можете настроить раздачу файлов напрямую через nginx, что серьезно увеличит производительность и снизит нагрузку.

    [+] Код избавлен от множества грязных "хаков", зависящих от реализации и недокументированных особенностей конкретной JVM
    [+] Скачивание своей JVM не обязательно(по умолчанию выкл)
    [+] Умные баны по "HWID"

    [+] "Поиск модов в других клиентах" - фитча, позволяющая брать совпадающие файлы из другого клиента или даже другого проекта, если этот проект использует GravitLauncher 5+. Позволяет серьезно сократить время от скачивания лаунчера до начала игры на вашем проекте
    [+] Лаунчер комплируется и запускается с JDK 12/11/10/9/8.
    Для запуска на Java 9+ может потребоваться установка дополнительных флагов при запуске и указание пути до JavaFX

    [+] Защита от распространенных методов взлома, включая патчинг лаунчера, подброс модов, воровство assess_token и др.
    [+] Готовый модуль для подписи JAR, уникальные скрипты для подписи EXE, позволяющие снизить ложные срабатывания антивирусов до минимума
    Я и несколько активных участников имеют свои настроенные самоподписанные CA и за скромную плату мы можем выдать вам сертификат для подписи лаунчера или подпишем сам лаунчер

    [+] Несколько официальных модулей, добавляющих такие возможности как: Выполнение JavaScript скриптов на стороне лаунчсервера, автосохранение сессий, поддержка Discord RPC, поддержка устаревших способов авторизации и автообновления с лаунчера Сашка, поддержка Systemd и т.д.
    [+] Вы полностью контролируете сборку лаунчера, ProGuard, библиотеки и можете добавлять свои задачи, преобразующие JAR

    [+] Поддержка альтернатив Launch4J
    [+] Новый современный дизайн по умолчанию
    [+] Опциональные моды, включая опциональное включение твинков JVM, ClientArgs, ClassPath
    [+] Возможность работы без сайта с любыми базами данных от SQLite до PostgreSQL используя Hibernate. Регистрация через лаунчер или WebSocket API с сайта без использования PHP
    [+] Новая система автообновления. Поддержка обновления с старых версий и оригинального сашка сохранена

    Поддержка
    [+] Принимаю Pull Request'ы
    [+] На нашем Discord сервере находится бот помощи, которая ответит на большинство частозадаваемых вопросов, подскажет как включить отладку, поможет понять причину ошибки даже если её нет в FAQ

    [+] Wiki, где расписана установка лаунчсервера и распространенные конфигурации настройки
    [+] Баг трекер на GitHub, однако лучше всего писать предложения в Discord
    [+] Форк активно развивается

    Для разработчиков
    • Продвинутый Module API, включающий зависимости, приоритет, события, хуки, возможность указать свой модуль как аналог другого модуля, базовый Dependency Injection
    • API всех компонентов доступны в Maven Central, что позволяет очень просто начать писать свои модули
    • Для критичных мест доступны JavaDoc, остальной код самодокументирован
    • Возможность писать модули как для серверной части, так и для клиентской. Удобный модуль-загрузчик клиентских модулей
    Исходники проекта(4.0.xx и выше): https://github.com/GravitLauncher/Launcher
    Актуальные релизы(5.0.8 и выше): https://gitlab.com/gravitlauncherteam/Launcher/pipelines
    Ищите нужную ветку, нажимаете на первую зеленую галочку(build: passed), нажмиаете на кнопку build, справа вы увидите раздел "Job artifacts" - нажмите на кнопку Browse

    Исходники проекта(3.17.xx и ниже): https://github.com/gravit0/Launcher
    Релизы(4.x.x и ранние 5.x.x): https://github.com/GravitLauncher/Launcher/releases/
    Ссылка на Discord канал: https://discord.gg/CBmkyqh
    Ссылка на официальную wiki: https://gravitlauncher.com

    Важное замечание - так как фитч и вариантов использования ОЧЕНЬ много большинство инструкций находится в закрепленных сообщениях на нашем Discord сервере.
     
    Последнее редактирование: 27 янв 2023
  2. Автор темы
    Gravit

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

    Баллы:
    66
    Резерв
     
  3. Santa

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

    Баллы:
    76
    Имя в Minecraft:
    Jewish_Cat
    а зачем ты избавился от jvm? -.-
     
  4. 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();
    }
    
     
  5. Автор темы
    Gravit

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

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

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

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

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

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

    Баллы:
    66
    Не вопрос
    Код:
    /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. Из за ограничения на длинну сообщения не могу вставить скрин прямо сюда
     
  8. Незнайчик

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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