L2Net (Packet Sniffer & Automation Suite)
Исторический скриптовый пакетный бот, работающий через перехват трафика сетевой карты (WinPcap) или OOG (Out of Game) клиент.
1. Вектор Угрозы и Принцип Работы
L2Net применяет перехват сетевых пакетов через драйвер WinPcap/Npcap (уровень NDIS) или прямое подключение сокета OOG (Out of Game). Позволяет скриптовать перемещение, таргет, прокачку и спойл без непосредственного взаимодействия пользователя с UI клиента.
L2Net расшифровывает клиент-серверный обмен с помощью подмены Blowfish ключа или инъекции в процесс L2.exe. Обладает встроенным виртуальным движком исполнения скриптов на C# / L2Net Scripting language.
2. Анализ Сетевого Протокола
В режиме перехвата L2Net использует подмену публичного RSA-ключа при инициализации сессии на стадии Auth/LoginServer, что позволяет расшифровать Blowfish ключ сессии игрового сервера. После этого трафик GameServer транслируется в открытом виде через локальный proxy-loopback (127.0.0.1:7777).
Идентифицированные Пакетные Сигнатуры:
| Опкод | Имя Пакета | Описание Поведения | HEX-Дамп Сигнатуры |
|---|---|---|---|
| 0x01 | MoveBackwardToLocation | Перемещение персонажа в координаты XYZ с целевыми координатами источника. | 01 34 12 00 00 56 34 00 00 78 56 00 00 12 00 00 00 |
| 0x1F | Action / RequestTarget | Выбор цели (Monster/NPC/Player) и подтверждение действия атаки/разговора. | 1F E4 21 00 00 00 00 00 00 00 00 00 00 00 |
| 0x48 | ValidatePosition | Коррекция клиентской позиции по тикам таймера. У L2Net дельта времени между пакетами строго фиксирована до миллисекунды. | 48 34 12 00 00 56 34 00 00 78 56 00 00 00 00 |
3. Исследование Хуков Памяти (Memory Hooks)
В OOG-режиме память игрового клиента не затрагивается. В IG-режиме (In-Game) L2Net внедряет вспомогательную библиотеку l2net.dll, перехватывающую Winsock-функции send(), recv(), WSASend() и WSARecv() в модуле WS2_32.dll для подмены опкодов на лету.
- Анализ дельты времени отправки пакетов ValidatePosition и MoveBackwardToLocation
- Проверка эхо-запросов пинга и флагов фокуса оконного режима User32
- Выявление отсутствия пакетов перемещения мыши и нажатий клавиш клавиатуры
- Динамическая рандомизация опкодов пакетов при рукопожатии
- Серверные проверки скорости передвижения и трассировки лучей через геодату
- Серверные капчи (Interactive verification dialogs) при цикличных фарм-шаблонах
4. Серверные Стратегии Митигации (Реализация)
Пример реализации серверного фильтра валидации для интеграции в ядро игрового сервера (L2J / Java Core):
// GameServer Anti-Packet Spoofing Validator
public final class PacketTimingGuard {
private static final long MIN_VALIDATE_DELTA_MS = 250L;
private static final double MAX_TOLERATED_SPEED_RATIO = 1.15;
public static boolean verifyMovementPacket(L2Player player, int targetX, int targetY, int targetZ) {
long now = System.currentTimeMillis();
long lastMoveTime = player.getLastMovePacketTimestamp();
// Анализ неестественной регулярности пакетов L2Net скрипта
long delta = now - lastMoveTime;
if (delta < MIN_VALIDATE_DELTA_MS && !player.isTeleporting()) {
player.incrementSuspiciousPacketCount();
return false; // Отклонение пакета
}
// Валидация траектории через геодату
if (!GeoEngine.canMoveToCoord(player.getX(), player.getY(), player.getZ(), targetX, targetY, targetZ)) {
player.sendPacket(new ValidatePosition(player));
return false;
}
player.setLastMovePacketTimestamp(now);
return true;
}
}