Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
L2 xor
#1
Прив всем. Пишу снифер для l2 от нечено делать (скрин тут
[Изображение: 37168856.image])
но застрял на шифровании пакетов .
Если я правильно понял пакеты XOR`ятся ключем, который приходит в KeyInit (16 байт).
Пытаюсь декодировать пакет ф-цией с л2 сервера (передаю массив байт - 2 байта размера пакета)
PHP код:
<?php 
public byte[] decrypt(byte[] raw, final int offset, final int size)
{
if(!
_isEnabled) {
return
null;
}
int temp = 0;

for(
int i = 0; i < size; i++)
{
int temp2 = raw[offset + i] & 0xFF;
raw[offset + i] = (byte) (temp2 ^ _inKey[i & 15] ^ temp);
temp = temp2;
}

int old = _inKey[8] & 0xff;
old |= _inKey[9] << 8 & 0xff00;
old |= _inKey[10] << 0x10 & 0xff0000;
old |= _inKey[11] << 0x18 & 0xff000000;
old += size;
_inKey[8] = (byte) (old & 0xff);
_inKey[9] = (byte) (old >> 0x08 & 0xff);
_inKey[10] = (byte) (old >> 0x10 & 0xff);
_inKey[11] = (byte) (old >> 0x18 & 0xff);
return
raw;
}
но правильно декодируются только первые 8 байт.
Может кто подскажет что не так делаю ?
Вызов метода
PHP код:
<?php 
ByteBuffer buffer
= ByteBuffer.allocate(65 * 1024).order(ByteOrder.LITTLE_ENDIAN);
buffer.put(tcp.getPayload());
byte[] decrypt = crypt.decrypt(buffer.array(),buffer.position(),size);
Следующий пакет из phx (RequestAuthLogin) - 2B 66 00 72 00 6F 00 6D 00 73 00 6B 00 79 00 6C 00 6C 00 0...
Мой после ксора - 8e 66 0 72 0 6f 0 6d c9 54 93 6a b1 15 31 fb 0 6c 0 0 0 ca..

Добавлено через 14 часов 17 минут
Проблему решил вроде. Последние 8 байт ключа подставляются как константа (подглядел с сервера)
PHP код:
<?php 
key
[8] = (byte)0xc8;
key[9] = (byte)0x27;
key[10] = (byte)0x93;
key[11] = (byte)0x01;
key[12] = (byte)0xa1;
key[13] = (byte)0x6c;
key[14] = (byte)0x31;
key[15] = (byte)0x97;
Может кто-то не наступит на теже грабли )
Ответ
#2
есть исхды l2ph глянь что и как там
Ответ
#3
Разобрался уже да и код на делфи очень плохо читаю
Ответ
#4
PHP код:
<?php 
ByteBuffer buffer
= ByteBuffer.allocate(65 * 1024).order(ByteOrder.LITTLE_ENDIAN);
buffer.put(tcp.getPayload());
byte[] decrypt = crypt.decrypt(buffer.array(),buffer.position(),size);

очень большая жесть. Вы создаете масив 65к + размером, в теле метода
consulo.io - Consulo - multi-language IDE
Ответ
#5
а если хочеш ЛГ и ССР обойти то хукай длл))))
Ответ
#6
VISTALL Написал:
PHP код:
<?php 
ByteBuffer buffer
= ByteBuffer.allocate(65 * 1024).order(ByteOrder.LITTLE_ENDIAN);
buffer.put(tcp.getPayload());
byte[] decrypt = crypt.decrypt(buffer.array(),buffer.position(),size);

очень большая жесть. Вы создаете масив 65к + размером, в теле методаПисалось на скорую руку ) исправил уже

ade0t Написал:а если хочеш ЛГ и ССР обойти то хукай длл))))
Не дорос еще до всяких хуков и т.д.
Ответ
#7
Сори, подниму старую темку. Помогите плиз разобраться с одной проблемой - как-то криво декодируются опкоды клиентских пакетов. Например начиная уже с 3го вместо 0х2B у меня 0х15. В остальном же все точно совпадает с phx (все байты, опкоды сервер пакетов и кол-во пакетов точно совпадает). В чем может быть ошибка ? Если надо будет выложу куски исходника
Ответ
#8
Big Grin вопрос а снифаеш локально? или Евро ?
consulo.io - Consulo - multi-language IDE
Ответ
#9
Евро (библиотека для снифа jnetpcap если важно)

Открыл дамп с localhost, тоже самое. EnterWorld - phx
11 61 00 64 00 6D 00 69 00 6E 00 00 00 0F 8E AF 8A 06 6F 89
53 53 CB 63 0E F0 C2 E3 1E 08 00 00 00 03 04 00 00 00 00 00 00 00
00 00 00
у меня
2b 61 00 64 00 6d 00 69 00 6e 00 00 00 0f 8e af 8a 06 6f 89
53 53 cb 63 0e f0 c2 e3 1e 08 00 00 00 03 04 00 00 00 00 00
00 00 00 00 00
Ответ
#10
2b - это он у вас не опкод пишет, а размер пакета - 2)))
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 3 Гость(ей)