Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд LoliLand Reverse PT.2

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
15 Окт 2021
Сообщения
210
Реакции
26
LoliLand Reversing
Это новая часть реверса, старая есть тут
Ещё можете посмотреть
Пожалуйста, авторизуйтесь для просмотра ссылки.

Содержание:
  • 1. Введение
  • 2. Структура проекта (папки)
  • 3. Разбор лаунчера
    • 3.1 Технический разбор (Jetty, Nuxt, JCEF)
    • 3.1.2 Процесс запуска клиента
    • 3.2 Шпионский модуль (OSHI, HWID, SystemData)
    • 3.3 Локальная инфраструктура (API эндпоинты)
    • 3.4 Реверс интерфейса (Eruda injection)
  • 4. Разбор клиента
    • 4.1 LoliMod (Ядро защиты и логики)
    • 4.1.2 Логика античита
    • 4.2 LoliHooks (Байт-код хуки)
    • 4.3 MSW (Multi Server Worlds)
    • 4.4 LoliDimensions (Миры, Пакеты)
  • 5. Разбор инфраструктуры
    • 5.1 Домены и API (ru/pro/io)
1. Введение
В этом репозитории будут результаты реверса LoliLand.

2. Структура проекта (папки)
  • %appdata%\.loliland - папка с данными проекта, там хранятся джарка лаунчера, папки с клиентами и рантаймом
  • .loliland\game-resources\clients - папка с клиентами, там лежат моды, джарки клиентов (кастомные) и т.д
  • .loliland\game-resources\runtimes - папка с рантаймами, там лежит оригинальная java-1.8.0_144
  • .loliland\java\ - джава которая используется лаунчером (JBR-17.0.11+1-1312.2-jcef)
  • .loliland\launcher-cef - папка с CEF (Chromium Embedded Framework), который используется лаунчером для отображения интерфейса
  • .loliland\launcher-data - папка с настройками лаунчера
  • .loliland\launcher-natives - папка с .dll файлами, щас есть только две NvAPI_SettingsEditor_x64 и NvAPI_SettingsEditor_x32, как я понял для настройки графы для слабых пк
  • .loliland\launcher-logs - папка с логами
  • .loliland\launcher.jar - сама джарка лаунчера

3. Разбор лаунчера
На удивление лаунчер использует CEF для отображения интерфейса (Nuxt), а не JavaFX как ранее
Это позволяет нам более легко реверсить интерфейс, так как он написан на HTML/CSS/JS

3.1. Разбор лаунчера (технический)
Лаунчер написан на Kotlin, использует CEF для отображения интерфейса.
Использует обфускацию, основные классы логики спрятаны в пакетах по типу loliland.launcher.app.obf.

Структура кода:
  • loliland.launcher.app.Main - мейн класс, инициализация JCEF и локального Jetty-сервера.
  • loliland.launcher.app.data.SystemData - сборщик HWID.
  • loliland.launcher.app.services.LaunchService - запуск клиента.

3.1.2. Процесс запуска клиента

За запуск отвечает LaunchService. Основные этапы:

  1. Подготовка рантайма:
    • Лаунчер ищет javaw.exe вruntime/bin на Windows или java на других платформах.
    • На Linux/macOS/других платформах он пытается сделать файл исполняемым через setExecutable(true) при включенных флагах O1il1llOLANd() или lil0liLand().
  2. Настройка графики (GPU Force):
    • Nvidia: через NativeHandler.doEditNvidiaProfile создается профиль LoliLand-game-java для исполняемого java.
    • DirectX: пишется запись в реестр HKCU\Software\Microsoft\DirectX\UserGpuPreferences с параметром GpuPreference=2; для пути к исполняемому файлу.
  3. Сбор параметров запуска:
    • Генерируется список JVM-параметров и аргументов запуска.
    • Включаются данные клиента: -Dloliland.client.uuid, -Dloliland.client.systemName, -Dloliland.client.displayName.
    • Включаются данные авторизации: -Dloliland.auth.uuid, -Dloliland.auth.token, а также -Dloliland.token из свойства auth.password.
    • При необходимости добавляется -Dloliland.auth.poolType=dg.
    • Если среда не Environment.PROD, добавляется -Dloliland.dev=true.
    • Всегда устанавливается -Dloliland.servers=127.0.0.1:25565.
    • При наличииnatives в updateVerify прописываются пути-Djava.library.path, -Dorg.lwjgl.librarypath и -Dnet.java.games.input.librarypath.
    • Добавляются флаги -Djava.net.preferIPv4Stack=true, -XX:HeapDumpPath=... и, при необходимости, подмена ОС на Windows 10 (-Dos.name=Windows 10, -Dos.version=10.0).
    • Для macOS добавляются -Xdock:name=..., -XstartOnFirstThread и-Djava.awt.headless=true.
    • Память задается через -Xmx<значение>m из системного конфигуратора.
    • Игровой класс-путь строится рекурсивно из ClientLaunchConfig.getClassPath(): файлы и папки обходятся, а для директорий используется шаблон *.
  4. Формирование аргументов игры:
    • Используется шаблон OfflinePlayer:<playerName> для генерации офлайн-UUID.
    • Аргументы из ClientLaunchConfig.getGameArguments()разбиваются по пробелам и проходят подстановку:
      • ${auth_player_name} → имя игрока.
      • ${auth_uuid} → офлайн-UUID.
      • ${auth_session}-.
      • ${gameDir} → папка клиента.
      • ${assetsDir} → папка ассетов.
      • 00000000-0000-0000-0000-000000000000 заменяется на офлайн-UUID.
  5. Запуск процесса:
    • Создается ProcessBuilder с рабочей директорией clientFolder.
    • Если лаунчер в режиме отображения логов/консоли, он перенаправляет поток ошибок в стандартный поток и оставляет себя живым, сохраняя ссылку на процесс.
    • В противном случае стандартный вывод и ошибки отбрасываются, и лаунчер вызывает System.exit(0) сразу после старта игры.
    • В любом случае процесс получает callback на onExit(), который очищает ссылку на процесс и возвращает видимость лаунчера.
  6. Завершение работы лаунчера:
    • В статическом блоке класса добавлен shutdown-хук, который вызывает terminateGame(), чтобы принудительно убить игровой процесс при выходе лаунчера.

3.2. Шпионский модуль
За сбор всей информации отвечает пакет oshi и класс loliland.launcher.app.data.SystemData. Они знают больше, чем ты самЧто именно отсылается:
  • Материнка: baseboardSerial (серийник - основной таргет для HWID банов), производитель и модель.
  • Проц: processorId (уникальный степпинг), количество физических и логических ядер, частота.
  • ОЗУ: Общий объем +серийные номера каждой плашки.
  • Видеокарты: Полный список активных ГПУ.
  • Мониторы: Список всех подключенных дисплеев (модели, разрешения).
  • Периферия: Серийники USB-устройств (флешки, мышки, клавы).
  • Система: hardwareUUID (GUID винды/биоса), разрядность, точная версия ОС.

Реализация:
  • Библиотека: Юзают OSHI (Operating System and Hardware Information). Она обходит стандартные ограничения Java и лезет напрямую в WMI (Win32_BaseBoard, Win32_Processor) и системный реестр.
  • HWID: Генерируется как hashCode() от всей структуры SystemData. Любое изменение (высунул оперативку, поменял моник) меняет твой хэш, но серийник материнки остается константой для их базы банов.
Локальная инфраструктура (API):
Лаунчер поднимает локальный сервер для взаимодействия фронтенда с бэкендом:

  • Порт 14463: Основной прокси. Перенаправляет запросы с префиксом /apiv2/ на launcher-dg.loliland.pro
  • Порт 12450: Системное API лаунчера. Используется для управления клиентом и получения дэбаг информации
Список локальных эндпоинтов (Порт 12450):
ЭндпоинтМетодОписание
/api-system/storage/auth.access_tokenGETТокен текущей сессии
/api-system/storage/auth.access_idGETID текущей сессии.
/api-launcher/bootstrapGETПолная конфигурация проекта, права пользователя и список серверов.
/api-launcher/bootstrap/retryGETРасширенный конфиг: роли, время в игре, настройки темы.
/api-system/launchPOSTКоманда на запуск игрового клиента (передает UUID сборки).
/api-launcher/last-clientGETИнформация о последнем запущенном сервере.

Реверс-инженеринг интерфейса:
Инъекция DevTools (Eruda):
Так как лаунчер использует JCEF, мы можем внедрить Eruda напрямую в launcher.jar.
  1. Распаковать launcher.jar.
  2. В файле loliland/application/public/index.html в тег <head> вставить:
Код:
Expand Collapse Copy
<script src="https://cdn.jsdelivr.net/npm/eruda"></script>

<script>
    eruda.init();
</script>
  • После этого в углу лаунчер появится иконка для открытия консоли, инспектора сети и ресурсов.

Иерархия ролей:
Системное имяОтображаемое имяУровень (Level)
godFounder1000.0
chief_curatorProject Curator203.0
developerDeveloper202.0
art_directorArt Director201.0
adminAdmin107.0
legendaryLegend60.0
ultraUltra50.0
defaultPlayer10.0

4. Разбор клиента
В целом клиент оригинальный, но есть некоторые изменения в загрузке модов, они валидируются по хэшу

Эта логика уже была раньше, можете почитать про неё в старом реверсе тут

Каждый мод содержит файл META-INF\mc_class_data_hash.bin с HEX байтами (SHA-256), для декодирования используется библиотека com.google.common.hash, и метод HashCode.fromBytes(byte[])

При загрузки клиента, лаунчер проверяет все моды, и если хэш не совпадает, то выдаёт ошибку, и не запускает клиент

4.1. Разбор LoliMod (сердце всех клиентов)
LoliMod - есть в каждом клиенте, там находиться ВСЯ логика проекта, магазин, загрузки модов, валидации, проверки, "античит" и т.д

На данный момент, античит и скриншоты экрана были убраны.

Интересные факты:
  • Гейб в коде: В моде захардкожена ссылка на видео (Gabe Newell - This isn't working), походу это пасхалка при ошибках.
  • CubixWorld: В коде (например, в lO01liI0LAnD.java) до сих пор висят ссылки на
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    (noad). Похоже, проекты либо имеют общие корни, либо просто спастили часть системы банов.
  • Скрытый бэкенд: Помимо публичных доменов, используется
    Пожалуйста, авторизуйтесь для просмотра ссылки.
    для внутренних нужд

4.1.2. Логика античита
Технический разбор системы защиты, которая глубоко интегрирована в LoliMod и LoliHooks.

1. Hardware ID (HWID) Fingerprinting
  • Сбор данных: Происходит в XForge.onConstruction при запуске клиента.
  • Что собирают:
    • CPU: Имя, ID, количество ядер, частота.
    • Материнка: Производитель, модель, серийный номер.
    • GPU: Список всех адаптеров, их названия и объем видеопамяти.
    • RAM: Общий объем и серийные номера каждой плашки.
    • Система: Hardware UUID, точная версия ОС, список мониторов.
  • Передача: HWID сериализуется в JSON и вшивается в пакет авторизации C00PacketLoginStart через ASM-хук в HooksClient. Сервер получает твой "цифровой отпечаток" еще до того, как ты заспавнился.
2. Мониторинг процессов (Windows)
  • Ядро: Класс iI11I1lllaNd (на базе JNA).
  • Привилегии: Пытается получитьSeDebugPrivilege, чтобы иметь возможность читать память и пути к EXE-файлам любых процессов в системе.
  • Сканирование:
    • ИспользуетWTSEnumerateProcessesEx и CreateToolhelp32Snapshot.
    • Для каждого процесса собирает: полный путь к файлу, имя пользователя (владельца), и аргументы командной строки (через WMI).
    • Это позволяет детектить читы, даже если они переименованы (например,cheat.exe -> chrome.exe).
  • Службы: Проверяет список запущенных системных служб Windows на наличие подозрительных драйверов.

3. Мониторинг процессов (Linux)
  • Метод: КлассlliOlOLanD.
  • Сканер /proc: Анализирует дерево процессов в Linux.
  • LSOF: Использует команду lsof -nl для получения списка всех открытых файлов в системе. Это помогает найти скрытые модули читов, которые подгружаются в память.

5. Сетевой уровень и Телеметрия
  • Канал ModFix: Кастомный канал Forge для скрытой передачи данных античита.
  • Краш-репорты: Хук вHooksClient автоматически перехватывает любой вылет игры и мгновенно отправляет отчет (с ником и состоянием системы) на api.loliland.pro.
  • Хэширование: Класс IIilILAnD считает SHA-1 хэши файлов. Сервер может прислать команду на проверку хэша конкретного файла в папке с игрой.

4.2. Разбор LoliHooks
LoliHooks (loliland.forge.hookslib) - это мод который используется для изменения кода игры "на лету" через ASM.
Он позволяет изменять байт-код классов игры, добавлять свои методы, менять логику и т.д

4.3. Разбор MSW (Multi Server Worlds)
MSW (Multi Server Worlds) - это мод, который связывает клиентское меню, реальные миры и серверную синхронизацию.
  • основной мод net.loliland.msw.MultiServerWorlds стартует в preInit, загружает конфиг и подключаетRealms
  • на сервере MSW инициализирует web-сервис, сетевые хендлеры и sync/хранилище
  • на клиенте MSW хукает GUI и заменяет главное меню/паузу/экран отключения своей гуишкой
  • мод регистрирует лобби-измерение WorldProviderLobby на ID 5 черезWorldUtils
  • у MSW есть свой сетевой слой (SimpleNetwork) и системы ServersSync / ServersStorage

Интересные факты:
  • MSW имеет в себе ассеты музыки для главного меню, и используются при отображении главного меню игры, вот их список:
    • LoliWorlds - Lost in Stasis [Menu Song]
    • LoliWorlds - Sapphire Woods[Moon Forest]
    • LoliWorlds - Bluish [Moon plains]
    • LoliWorlds - I Will Find You Again [Amber Forest]
  • Название файла мода имеет в себе git бренч и коммит, например:msw-main-606d1a78.jar

4.4. Разбор LoliDimensions - глобальный мод, отвечающий за новые миры, измерения и механику боссов.

Технические особенности:
  • Генерация: Полностью переработанные Край и Ад (net.loliland.lolidimensions.newend и newhell) с использованием кастомных биомов и структур.
  • Сетевой слой: Использует собственную систему пакетов в net.loliland.lolidimensions.packets. Переписана синхронизация позиций игроков (UpdateOtherPlayerPositionPacket) для плавности отображения кастомных анимаций.
  • Визуал: Своя система анимаций на JSON (net.loliland.lolidimensions.animation) и множество уникальных мобов со сложным ИИ.
5. Разбор инфраструктуры
5.1 Разбор доменов

Сервера (.ru):
доменописание
api.loliland.ruГлавная API
devlauncher.loliland.ruДевелоперская версия API лаунчера
klauncher.loliland.ru???, как я понял это партнёрка
launcher-s1.loliland.ruS3 хранилище для лаунчера, через него админы заливают файлы
launcher.loliland.ruАссеты для лаунчера, библиотеки
loliland.ruОсновной сайт
s-holly.loliland.ru???, сервер от хостинга "Selectel"
static.loliland.ruСтатика, картинки, скрипты и т.д
status.loliland.ruСтатус серверов, Web, API и Launcher API

Сервера (.pro / .io):
доменописание
api.loliland.proОсновная API
core.loliland.ioВнутреннее API ядра (Hidden)
devlauncher.loliland.proДевелоперская API
klauncher.loliland.proПартнерка
launcher-cf.loliland.proЛаунчер через CF
launcher-dg.loliland.proЗащита от DDoS (DDOS-GUARD)
launcher-msk-1.loliland.proМосковский узел (TimeWeb)
launcher-new.loliland.proНовый API лаунчера
launcher-s1.loliland.proS3 хранилище (Selectel)
launcher-spb-1.loliland.proПитерский узел (TimeWeb)
launcher.loliland.proОсновной лаунчер
loliland.proОсновной домен
static.loliland.proСтатика
Пожалуйста, авторизуйтесь для просмотра ссылки.
Прокси сайта

Сервера (.net):
доменописание
loliland.netОсновной домен
email.loliland.net???, HTTP, IP: 34.111.99.212
discord.loliland.netDiscord перенаправление
vk.loliland.netVK перенаправление
tg.loliland.netTelegram перенаправление
Пожалуйста, авторизуйтесь для просмотра ссылки.
Веб-сайт
static.loliland.netСтатика
status.loliland.netСтатус сервисов
 
Последнее редактирование:
Назад
Сверху Снизу