Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
  • Данный раздел создан исключительно для релизов! Вопросы по лаунчеру или обвязке задавайте ТОЛЬКО в соответсвующей теме автора. Любые другие темы будут удалены, а авторы понесут наказание.

Лаунчер GravitLauncher v5.1

Gravit

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

Основные изменения​
[+] Поддержка нативной библиотеки защиты 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 сервере.
 
Последнее редактирование:
а зачем ты избавился от jvm? -.-
 
а зачем ты избавился от jvm? -.-
Оно околобесполезное. Ибо только жаба вайнворлда спасает от Универсалок. Но она робит исключительно через jni.
C++:
#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();
}
 
а зачем ты избавился от jvm? -.-
1. Время и место на диске
Скачивание JVM занимает время, которое новичок может потратить на игру(привет деревня и 3G с потерями пакетов)
2. Обновления безопастности
Администраторы не будут обновлять JVM регулярно, а в обновлениях содержатся обновления безопастности и исправление ошибок.
3. Не очень хорошо таскать с собой то, что уже есть у клиента
4. Лишаем пользователя выбора, например между OpenJDK и Oracle
 
1. Время и место на диске
Скачивание JVM занимает время, которое новичок может потратить на игру(привет деревня и 3G с потерями пакетов)
2. Обновления безопастности
Администраторы не будут обновлять JVM регулярно, а в обновлениях содержатся обновления безопастности и исправление ошибок.
3. Не очень хорошо таскать с собой то, что уже есть у клиента
4. Лишаем пользователя выбора, например между OpenJDK и Oracle
1. Чумовая логика, скачивать ассесты гигами через 3g мы можем, а скачать стабилити джаву - нет.
Играть на сервере через 3g можем, а скачать джаву - нет.
Скачать скины игроков через 3g можем, а джаву - нет.
2. Например? Что такого опасного может произойти с джавой, которая запускается для клиента? Т.е. ставить моды разных не проверенных людей это безопасно?
3. Ничерта у него нет, ну будет у него седьмая джава и все, даже лончер не запустится, стартер надо пилить.
4. Лол, запускать маин на openjdk, еще сервер на нем запустите.

Джарник лаунчера в этой версии хранится в трижды упакованном виде в сервере?
upload_2018-8-9_16-54-51.png
 
Последнее редактирование:
Лол, запускать маин на openjdk, еще сервер на нем запустите.
Не вопрос
Код:
/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. Из за ограничения на длинну сообщения не могу вставить скрин прямо сюда
 
По PHP напишу одно - код не комильфо.
Создаешь новые переменные и по факту дублируешь данные.
Бессмысленное использование *_once, подключение других скриптов. Ты не в цикле интерпретируешь подключаемое содержимое.
http://php.net/manual/ru/function.require-once.php
 
Непонятное разделение лаунчера на сам лаунчер и либу для авторизации. Идее есть место быть, но она бессмысленна.
 
По PHP напишу одно - код не комильфо.
PHP код привязок пока не трогал, он был написан sashok724's
Мой скрипт привязки к Yii2
Непонятное разделение лаунчера на сам лаунчер и либу для авторизации. Идее есть место быть, но она бессмысленна.
Sashok724's сделал так, что authlib использует классы Launcher, что довольно бессмысленно, надо избавиться от этой зависимости и тогда модули будут разделены правильно
Модуль Launcher содержит всё, что нужно для запуска клиента и работы с JavaFX
Модуль LauncherAuthlib содержит классы для авторизации, ему не нужно знать как запускать клиент и как работать с JavaFX
Модуль libLauncher содержит общие классы, необходимые всем другим модулям. В идеале - каждый модуль зависит только от libLauncher и своих библиотек
Модуль LaunchServer содержит только те классы, которые необходимы серверу авторизации, он не должен знать ни о authlib, ни о JavaFX

P.S. Avanguard надо будет подключить сюда
 
P.s Столько бесполезной работы провел. А то что всем нужно не сделал. Прикрутить BCrypt для юзеров dle.Чтоб зря не костылять через запрос к сайту.
 
P.s Столько бесполезной работы провел. А то что всем нужно не сделал. Прикрутить BCrypt для юзеров dle.Чтоб зря не костылять через запрос к сайту.
Алгоритм хеширования может меняться от версии к версии PHP. Могут использоватся различные соли/алгоритмы генерации солей, что бы еще больше усилить безопастность. От версии к версии могут меняться поля базы данных, их тип и всё что угодно.
Кроме того, в скрипт привязки можно добавить свой собственный код для учета статистики или бана никнейма прямо в момент авторизации.
Единственное, что мне совсем не нравится в скриптах привязки - формат ответа. Для приличия нужен хотя бы json(JsonAuthProvider уже есть, нужно только переписать скрипты привязки на него)
 
Алгоритм хеширования может меняться от версии к версии PHP. Могут использоватся различные соли/алгоритмы генерации солей, что бы еще больше усилить безопастность. От версии к версии могут меняться поля базы данных, их тип и всё что угодно.
Кроме того, в скрипт привязки можно добавить свой собственный код для учета статистики или бана никнейма прямо в момент авторизации.
Единственное, что мне совсем не нравится в скриптах привязки - формат ответа. Для приличия нужен хотя бы json(JsonAuthProvider уже есть, нужно только переписать скрипты привязки на него)
Сказал бы прямо==лень. В старом сашке я давно сделал.
 
Сказал бы прямо==лень.
Если возьмется кто нибудь - приму Pull Request, без проблем

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

Если и использовать Avanguard, то только с минимальным функционалом
 
Могут использоватся различные соли/алгоритмы генерации солей,
Смотрю многие любят создавать велосипеды. Однако 3 декабря 2015 года толковые программисты больше не используют соли и делают ставки на самое высокопроизводительное хеширование Argon2
 
Поддержка Avanguard​
С помощью @Zaxar163 прикрепил поддержку Avanguard. Используется собственный форк авангарда от Zaxar163
Все beta/experimental фитчи не включались в сборку Avanguard
Сделал защиту от выгрузки модуля Avanguard

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

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

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

Назад
Верх