Система HWID-защиты для приватных серверов Lineage 2 на базе L2J
Собирает HWID компьютера и отправляет на сервер защиты по TCP:46500
Проверяет HWID в базе данных MySQL и решает — разрешить или заблокировать
Загружается в JVM через LD_PRELOAD и связывается с lin2guard по UDP:46540
Lin2Guard-V1/ ├── clientside/ │ └── system/ │ └── l2.exe ← раздать игрокам └── serverside/ ├── guard/ │ ├── lin2guard_linux_amd64 ← бинарник сервера защиты (Linux x86_64) │ ├── config.xml ← конфигурация │ ├── start.sh ← запуск с авторестартом │ ├── startscreen.sh ← запуск в фоне через screen │ └── getscreen.sh ← подключиться к логам └── gameserver/ ├── guard.so ← LD_PRELOAD хук для L2J Java-сервера └── run.sh ← пример запуска gameserver с хуком
В папке клиента у игрока лежит оригинальный файл system/l2.exe. Нужно заменить его нашим.
system/l2.exe игрока → system/l2.binclientside/system/l2.exe в папку system/ клиентаl2.exe игрокам — защита работает автоматически при запуске игры
serverside/guard/ на Linux хостинг целиком
CREATE DATABASE lin2guard;
config.xml — укажи адрес, порты и доступ к БД (подробнее — в разделе «Настройка» ниже)
cd /путь/до/папки/guard/ chmod +x lin2guard_linux_amd64 start.sh startscreen.sh ./startscreen.sh
./getscreen.sh
Выйти без остановки: Ctrl+A, затем D
serverside/gameserver/guard.so в папку твоего игрового сервера
GameServer_loop.sh или похожий)
LD_PRELOAD — смотри пример ниже:
# Хроника сервера (salvation, interlude и т.д.) export CHRONICLE=salvation # UDP-порт хука (должен совпадать с hook_addr в config.xml) export INTPTR=46540 # ID игрового сервера export GSID=2 # IP сервера защиты (127.0.0.1 если guard на той же машине) export INTIPADDR=127.0.0.1 # Логи: 0 = минимум (прод), 1 = подробные (дев) export L2G_DEBUG=0 # Для теста: раскомментируй, чтобы временно отключить проверку авторизации #export NOCHECK=1 HOOK_SO="guard.so" # Запуск Java с хуком (остальные параметры оставь из своего скрипта): LD_PRELOAD="$HOOK_SO" java ... -cp config:./../libs/* l2e.gameserver.GameServer
LD_PRELOAD="guard.so". Все остальные параметры java оставь как есть в твоём скрипте.<config> <!-- Порт для подключения клиентов (l2.exe). Открыть в файрволе. --> <listen_addr>0.0.0.0:46500</listen_addr> <!-- Порт для связи с guard.so. Оставь 127.0.0.1 если на одной машине. --> <!-- Чтобы отключить хук — удали эту строку или оставь пустой. --> <hook_addr>127.0.0.1:46540</hook_addr> <!-- Максимальное количество окон игры с одного HWID --> <max_windows>2</max_windows> <!-- Таймаут переподключения клиента в мс (45000 = 45 сек) --> <ping_timeout_ms>45000</ping_timeout_ms> <!-- false = только важные события (прод), true = подробные логи (дев) --> <debug>false</debug> <!-- Данные для подключения к базе данных lin2guard --> <db> <host>127.0.0.1</host> <port>3306</port> <user>root</user> <pass>ТВОЙ_ПАРОЛЬ</pass> <name>lin2guard</name> </db> <!-- Опционально: синхронизация HWID с игровой БД (поле characters.hwid) --> <!-- Раскомментируй блок <gamedb> и укажи данные игровой БД. --> <!-- <gamedb> ... </gamedb> --> </config>
| Порт | Назначение | Доступ снаружи | Примечание |
|---|---|---|---|
| 46500 / TCP | Подключения клиентов (l2.exe) | ✓ Открыть | Открыть в файрволе для внешних подключений |
| 46540 / UDP | Хук guard.so ↔ lin2guard | ✗ Закрыть | Только localhost — снаружи не нужен |
| 3306 / TCP | MySQL | ✗ Закрыть | Только localhost, наружу не открывать |
guard.so должен лежать рядом с run.sh в папке gameserver/. Путь в скрипте указывается относительно директории запуска.
Проверь, что порт 46500/TCP открыт в файрволе. Убедись что lin2guard запущен:
ps aux | grep lin2guard
Проверь связность guard.so с lin2guard — порт 46540/UDP должен быть доступен. Для теста временно раскомментируй NOCHECK=1 в run.sh.
Проверь данные подключения в config.xml → блок <db>. База lin2guard должна существовать до запуска guard:
CREATE DATABASE lin2guard;