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

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

Лаунчер GravitLauncher v5.1

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

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

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

    Баллы:
    66
    Не работал с BungeeCord и нет настроеного тестовго окружения под него.
    Если возникнут проблемы - обращайтесь, постараемся решить
     
  2. GamePander

    GamePander Активный участник

    Баллы:
    61
    Имя в Minecraft:
    GamePander
    Снимок.PNG
    Как можно исправить или как правильно вставить параметр использования Whitelist?
     
  3. Автор темы
    Gravit

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

    Баллы:
    66
    useWhitelist: false;
    Whitelist: [];
     
  4. GamePander

    GamePander Активный участник

    Баллы:
    61
    Имя в Minecraft:
    GamePander
    Снимок.PNG
    Добрый вечер ещё-раз, уже замучил себя полностью, но всё равно не могу понять, почему LaunchServer всегда останавливается, связана ли это проблема с тем, что он не может подключится к VDS серверу?
     
  5. Автор темы
    Gravit

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

    Баллы:
    66
    Не вижу никакого смысла в этом вопросе
    Сообщение об остановке может выводиться, но самой остановки при этом не происходит
     
  6. GamePander

    GamePander Активный участник

    Баллы:
    61
    Имя в Minecraft:
    GamePander

    Снимок.PNG
    Тогда я даже не знаю, как можно подружить лаунчер с vds сервером. Постоянно эти ошибки, хоть подключу профили, запущу сервер с настроенным ServerWrapper, абсолютно ничего не помогает...
     
  7. zaxar163

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

    Баллы:
    66
    В группе Discord ошибку с логами напишите.
     
  8. zaxar163

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

    Баллы:
    66
  9. D1Xer

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

    Баллы:
    76
    Имя в Minecraft:
    TheTarasik
  10. Manindro

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

    Баллы:
    61
    Skype:
    mitis-2
    Имя в Minecraft:
    Manindro
    Объясните идиоту (мне) настроил сам сервер перелопатил код, подчинил что надо было, настроил всё, но когда дело дошло до запуска сервера (ну проблема была изначально в моей тупости) голова у меня взорвалась.
    И так предисловие закончилось, суть вопроса:
    Сам я не шарю но вроде как бы когда то там давно когда я был студентом мы изучали основы программирования, ну как бы могу методом "тыка" и интуитивно понятными переменными понять что, куда тыкать и писать - могу.
    Код:
    java -cp ServerWrapper.jar:{ClassPath вашего сервера} ru.gravit.launcher.server.ServerWrapper {ваш mainclass}
    {ClassPath вашего сервера} - что вставить сюда не понимаю, пробовал: sh скрипт, ядро сервера, просто название и ещё пару файлов вставить он меня отсылает к предкам на родину, подскажите пожалуйста нормальным человеческим языком что тут писать.
    {ваш mainclass} - это вообще не понимаю зачем тут нужно и что тут ставить...

    Это был 1 вопрос, приступаю сразу ко 2:

    Если я всё понимаю правильно то серверу не обязательно лежать чуть ли ни в 1 папке с клиентом, соответственно сервер может быть на 1 хостинге (аккаунте) а клиент на другом хостинге (аккаунте), соответственно я могу разделять северную и клиентскую часть в пределах 1 сервера по разным аккаунтам или всё же их надо засунуть в 1 папку чтобы они там совместно поддавались всяким непристойностям и утехам?

    На данный момент вопросы кончились, надеюсь на вашу помощь, заранее спасибо.
     
  11. Автор темы
    Gravit

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

    Баллы:
    66
    ClassPath - прописываются все jar файлы ядра сервера, разделяемые : в линуксе и ; в винде. Для Thermos достаточно Thermos.jar .
    Main-Class - "точка входа", для каждого ядра она своя. Можно подсмотреть в скриптах старта у Сашка.
    Сервер/лаунчсервер/бд могут находиться на разных хостингах. Засовывать в одну папку лаунчсервер и сервер плохая идея.
    Если вы про специальный аккаунт для авторизации сервера - рекомендуется создавать для каждого сервера отдельный аккаунт.
     
  12. Manindro

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

    Баллы:
    61
    Skype:
    mitis-2
    Имя в Minecraft:
    Manindro
    поправьте если я не прав, то есть код запуска будет выглядеть следующим образом:
    Код:
     java -cp ServerWrapper.jar:Thermos.jarcpw.mods.fml.relauncher.ServerLaunchWrapper
    
    или всё таки
    Код:
    java -cp ServerWrapper.jar:Thermos.jar  ru.gravit.launcher.server.ServerWrapper cpw.mods.fml.relauncher.ServerLaunchWrapper
    
    под 1 кодом сервер стартует, но я не уверен в том что он стартует под лаунчером, под 2 кодом он выдаёт ошибку.
     
  13. Автор темы
    Gravit

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

    Баллы:
    66
    Второй вариант верный. Ошибку в Discord на канал #support
     
  14. zaxar163

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

    Баллы:
    66
    Вышла стабильная версия 4.2.1
    Спустя долгое время разработки была выпущена stable ветка 4.2
    Ветка 4.2 является логическим развитием ветки 4.1, поэтому 4.1 stable не выйдет. Всем пользователям 4.1 рекомендуется перейти на 4.2.
    Ссылка: https://github.com/GravitLauncher/Launcher/releases/tag/v4.2.1-stable
    Основные изменения по сравнению с 4.0
    • Вырезана нативная защита Avanguard. Если вы хотите использовать Avanguard для своего проекта - вам необходимо будет настроить скачивание своей Java
    • Экспериментальный античит от @Zaxar163 (настраивается отдельно и только с загрузкой своей Java)
    • Использование OSHI для получения HWID
    • Обновлены версии библиотек
    • Переработана система сборки лаунчера. Теперь каталог build используется для временных файлов в процессе сборки. Библиотеки лаунчера хранятся в отдельной папке launcher-libraries, что позволяет легко их заменять при необходимости
    • Переведены все конфигурационные файлы на Json
    • Настройка опциональных модов прямо в профиле. Полноценный граф зависимостей, с возможностью указания зависимых и конфликтных модов
    • Настройка описания сервера прямо в профиле
    • Введение permissionsHandler
    • Введение SocketHookManager, что дало возможность написания Anti-DDoS module
    • Введение git-flow в репозитории разработки
    • Введены интерфейсы Reloadable, Reconfigurable, что позволяет перезагружать некоторые конфиги и выполнять специальные действия без перезапуска лаунчсервера. Команды reconfig/reconfigHelp/reconfigList/reload/reloadList.
    • Введены команды dumpSessions, dumpEntryCache, позволяющие посмотреть содержимое сессий и кеша authHandler соответственно. dumpSessions позволяет не терять авторизацию при презапуске лаунчсервера
    • Введена команда serverStatus, позволяющая узнать техническую информацию о работе сервера, его аптайм, количество занятой/свободной памяти, размер кешей.
    • Введение интерфейса удаленного выполнения комманд - RemoteCommandExec. Опция выключена по умолчанию(enableRcon в конфиге) и требует пермишена canAdmin для своей работы.
    • Введение возможности сделать опциональными аргументы JVM, аргументы клиента и classpath
    • Введение окружения лаунчера, что позволяет включать дебаг без указания опций, или вообще запретить его использование
    • Введение хуков на авторизацию, checkServer, joinServer.
    Важные замечания по переходу
    • Вырезана поддержка FileAuthHandler. Если вы используете FileAuthHandler пожалуйста напишите в Discord, постараюсь сделать конвертер
    • Все конфиги необходимо будет перевести на Json. Автоконвертера нет.
    • В 4.2 по умолчанию отсутствует защита от инжектов читов. Если она вам нужна - используйте скачивание своей JVM и установите или авангард(вызывает проблемы) или античит Zaxar163(не вызывает проблем, но нет готовой сборки)
      Посмотреть описание конфигов можно на неофициальной вики: http://ru.gravitlauncher.wikia.com/wiki/GravitLauncher_вики
     
    Последнее редактирование: 15 янв 2019
  15. jayse

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

    Баллы:
    88
    Skype:
    wilmankiller
    Имя в Minecraft:
    MrJayse
    Думаю заменить оригинального сашка на этот лаунчер. Что за защита от Zaxar163?
     
  16. Andrey113

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

    Баллы:
    61
    https://github.com/GravitLauncher/GravitGuard
     
  17. Peppa

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

    Баллы:
    66
    Имя в Minecraft:
    Kenny
    Вроде годный Лаунчер, раз shadowcraft начал ставить его.. :)
     
  18. Linkinkov

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

    Баллы:
    173
    Skype:
    linkinkov1
    Имя в Minecraft:
    linkinkov
    Мы вообще не показатель качества в последнее время. Но на тестовой нагрузке в 100 ботов, при скачке, обновлениях и т.д., он хорошо себя показал
     
  19. HoShiMin

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

    Баллы:
    173
    [​IMG]

    На коленке собранный обход - снимает перехват любой функции:

    Код:
    #include <Windows.h>
    #include <TlHelp32.h>
    #include <cstdio>
    
    // Получает адрес модуля в контексте другого процесса:
    PVOID GetModuleBase(ULONG ProcessId, LPCWSTR ModuleName)
    {
        PVOID Address = NULL;
        HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, ProcessId);
        MODULEENTRY32 Module = {};
        Module.dwSize = sizeof(Module);
        if (Module32First(hSnapshot, &Module)) do {
            if (wcsstr(Module.szModule, ModuleName)) {
                Address = Module.modBaseAddr;
                break;
            }
        } while (Module32Next(hSnapshot, &Module));
    
        CloseHandle(hSnapshot);
        return Address;
    }
    
    int main()
    {
        LPCWSTR TargetLibName = L"jvm.dll";
        LPCWSTR LibPath = L"X:\\Folder\\jvm.dll";
        LPCSTR FuncName = "JNI_GetCreatedJavaVMs";
        const ULONG ProcessId = 1234;
    
        // Получаем адрес либы в контексте игры:
        PVOID TargetModuleBase = GetModuleBase(ProcessId, TargetLibName);
        if (!TargetModuleBase) {
            printf("Unable to obtain base address of the '%ws' in the process %i\r\n", TargetLibName, ProcessId);
            return 0;
        }
    
        // Грузим эту либу в свой процесс:
        HMODULE hLib = LoadLibrary(LibPath);
        if (!hLib) {
            printf("Unable to load library: %ws\r\n", LibPath);
            return 0;
        }
    
        // Получаем адрес функции в нашем процессе:
        PVOID OriginalFunc = GetProcAddress(hLib, FuncName);
        if (!OriginalFunc) {
            printf("Unable to obtain address of %s\r\n", FuncName);
            return 0;
        }
    
        // Получаем адрес функции в контексте целевого процесса:
        SIZE_T Offset = (SIZE_T)OriginalFunc - (SIZE_T)hLib;
        PVOID TargetAddr = (PVOID)((SIZE_T)TargetModuleBase + Offset);
    
        // Открываем процесс с правами на запись:
        HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessId);
        if (!hProcess) {
            printf("Unable to open process %i\r\n", ProcessId);
            CloseHandle(hProcess);
            return 0;
        }
    
        // Размер трамплина - 5 байт (может варьироваться, можно взять с запасом):
        const ULONG TrampolineSize = 5; // 5 bytes = E9 NN NN NN NN : jmp 0xNNNNNNNN
    
        // Делаем память "сломанной" функции записываемой:
        DWORD OldProtect = 0;
        VirtualProtectEx(hProcess, TargetAddr, TrampolineSize, PAGE_EXECUTE_READWRITE, &OldProtect);
    
        // Восстанавливаем оригинальные байты функции:
        SIZE_T Written = 0;
        BOOL Status = WriteProcessMemory(hProcess, TargetAddr, OriginalFunc, TrampolineSize, &Written);
        printf("Write status: %i\r\n", Status);
    
        // Возвращаем обратно права памяти:
        VirtualProtectEx(hProcess, TargetAddr, TrampolineSize, OldProtect, &OldProtect);
    
        CloseHandle(hProcess);
        return 0;
    }
    

    И небольшой бонус.
    В эфире рубрика "Мнение эксперта" и у нас в студии @Nan0Nik:
    Чтобы подгрузить чит, не углубляясь в дебри реверсинга, можно пойти двумя простыми путями:
    1. Инжектим дллку, которая перехватит любую функцию из JVM, в которую передаётся JNIEnv (например, jvm.dll!JVM_DefineClassWithSource). Внутри хука вызываем env->GetJavaVM и получаем структуру JavaVM, котрую получили бы через JNI_GetCreatedJavaVMs.
    2. Смотрим, что внутри JNI_GetCreatedJavaVMs и видим, что она просто возвращает адрес глобальной структуры:
    [​IMG]
    Этот адрес мы можем прочитать вручную.
     
    Последнее редактирование: 21 янв 2019
  20. SergK35

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

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    Тык возьмись за правки своего антиинжекта
     

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