Сервер
Код:
package com.lameguard.crypt.impl;
import com.lameguard.crypt.LameCrypt;
public class L2S
implements LameCrypt
{
public L2S()
{
key = new byte[16];
}
public void setup(byte key[], byte iv[])
{
System.arraycopy(key, 0, this.key, 0, 16);
}
public void crypt(byte raw[], int offset, int size)
{
int temp = 0;
for(int i = 0; i < size; i++)
{
int temp2 = raw[offset + i] & 0xff;
temp = temp2 ^ key[i & 0xf] ^ temp;
raw[offset + i] = (byte)temp;
}
int old = key[8] & 0xff;
old |= key[9] << 8 & 0xff00;
old |= key[10] << 16 & 0xff0000;
old |= key[11] << 24 & 0xff000000;
old += size;
key[8] = (byte)(old & 0xff);
key[9] = (byte)(old >> 8 & 0xff);
key[10] = (byte)(old >> 16 & 0xff);
key[11] = (byte)(old >> 24 & 0xff);
}
private byte key[];
}
Ключи задаются отдельно для Сервера и Клиента;
После этого числовые ключи помещаются в байт массив, которые "расширяются функцией LameCrypt.expandKey.
Дальше затрудняюсь описать так как плохо понимаю яву но предполагаю следующее.
c.setup(ключ.Начальный,Расширенная версия) - клиент
s.setup(ключ.Начальный,Расширенная версия) - сервер
Расшифровка пакетов от клиента выполняется функцией из VMPC()
Код:
public void crypt(byte raw[], int offset, int size)
{
for(int i = 0; i < size; i++)
{
s = P[s + P[n & 0xff] & 0xff];
byte z = P[P[P[s & 0xff] & 0xff] + 1 & 0xff];
byte temp = P[n & 0xff];
P[n & 0xff] = P[s & 0xff];
P[s & 0xff] = temp;
n = (byte)(n + 1 & 0xff);
raw[offset + i] = (byte)(raw[offset + i] ^ z);
}
}
В которой задается размер, смещение....
Пока все может будут новые мысли.Буду писать сюда.(и вам рекомендую)
Как определить что сервер под защитой LameGuard
l2.bin как процесс клиента
папки на сайте с апдейтером(lame/updater.exe например)
нестандартные порты(хотя тут могут быть варианты)
Каждый пакет отличается от предидущего чуть больше чем полностью.(хотя тут тоже могут быть варианты)
В общем товарищи развиваем
Если вы решили что я написал херню(я яву плохо знаю о чем писал выше) уважайте чувства автора бишь меня, "помягше" как говорил Аркадий Райкин.