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

Лаунчер Модификация sashok724's Launcher v3 от Gravit

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

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

    Gravit Новичок Пользователь

    Баллы:
    16
    Представляю Вашему вниманию свою модификацию sashok724's Launcher v3, которую я делал для себя, так как многое не устраивало.
    Основные изменения
    [+] Поддержка нативной библиотеки защиты Avanguard
    [+] Сборка Gradle
    [+] Код избавлен от множества грязных "хаков", зависящих от реализации и недокументированных особенностей конкретной JVM
    [+] Вырезана установка своей JVM
    [+] Защита от брута пароля

    [+] Лаунчер комплируется и запускается с JDK 10
    [+] Патч launchwrapper с поддержкой Java 10
    [+] JsonAuthProvider и PHP скрипт для работы с Yii2
    [+] ClassPath не виден в строке запуска
    [+] Полностью разрешены симлинки без ограничений
    [+] Вырезана недокументированная возможность использования JavaScript плагинов на стороне сервера
    [+] Различные исправления и доработки
    [+] Разбиение на 4 модуля вместо двух
    [+] Старые обходы не работают

    [+] Частично изменена структура классов
    [+] Исправления багов из основной ветки лаунчера

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

    Обновление с основной ветки sashok724's Launcher
    1. Сделайте бекап всех файлов, что собираетесь изменять
    2. Замените старый LaunchServer и папку libraries новыми
    3. Удалите из updates папки с JVM
    4. Если у вас стандартный, не измененный runtime(JavaScript и дизайн), то просто заменяем его на папку из архива, не забыв изменить config.js на свой
    5. Если же нет, то смотрим на этот комммит и изменяем так же
    6. Скачиваем файлы Avanguard32.dll и Avanguard64.dll и копируем их в каждый <папка клиента>/native
    7. Добавляем в LauncherServer.cfg строчки
      Код:
      #Сколько попыток авторизации можно сделать, 0 - без ограничений
      authRateLimit: 2;
      #За какое время(в миллисекундах)
      authRateLimitMilis: 3000;
    8. Запустите LaunchServer и выполните build
    9. Проверяем, всё ли работает правильно
    10. Возникли какие то проблемы? Пишите, помогу по мере возможности
    Планы
    • Использование ProtoBuf вместо самописного протокола(шифрование RSA останется)
    • Пометка клиента как доступного только для администраторов/тестеров
    • Использование Javaagent для продвинутой защиты
    • Полноценные модули на Java
    Исходники проекта: https://github.com/gravit0/Launcher
    Сборка на момент коммита 6f2809adf673 от 15 Августа 2018: https://github.com/gravit0/Launcher/releases/tag/v15.3-dev

    Сборка на момент коммита 8691af81d6a7 от 12 Августа 2018: https://github.com/gravit0/Launcher/releases/tag/v15.2-dev
    Сборка на момент коммита 8e3b59697bef от 9 Августа 2018: https://github.com/gravit0/Launcher/releases/tag/v15.1-dev
    Ссылка на Discord канал: https://discord.gg/aJK6nMN
    Тему буду дополнять
     
    Последнее редактирование: 15 авг 2018 в 14:15
  2. Mr Hosting
  3. Автор темы
    Gravit

    Gravit Новичок Пользователь

    Баллы:
    16
    Резерв
     
  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 Новичок Пользователь

    Баллы:
    16
    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 Новичок Пользователь

    Баллы:
    16
    Не вопрос
    Код:
    /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 Новичок Пользователь

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

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

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

    Gravit Новичок Пользователь

    Баллы:
    16
    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 Новичок Пользователь

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

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

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

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

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

    Gravit Новичок Пользователь

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

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

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

    Akame Новичок Пользователь

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

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

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

    Gravit Новичок Пользователь

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

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

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

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