Пользователь
Регистрация: 05.03.2010
Сообщений: 46
Сказал Спасибо: 0
Имеет 14 спасибок в 9 сообщенях
|
интересно но не очень конечно могли бы и по солидней сделать) даже огг подцепил(на логин серве там есть шифрация причем не хилая с использованием сторонней программы(shild.bin) вот исходники с шарпа кто захочет тоже написать уже все разжовано)
Код:
foreach (string s in "47 78 E1 77 51 36 FB 68 03 E1 EA 2C CF E6 98 0C 4D AD C6 34 11 A4 2B 0F CA 86 A7 30 86 42 CA 7B 77 2A 41 66 3C D9 60 02 F9 76 75 AD 41 AD EE 2C 13 28 2D E8 14 BC F2 2C 1F 34 4C 25 51 DE EB 51 D0 BE C9 63 62 99 03 14 F5 B5 DB F2 61 81 C7 C7 63 07 58 76 15 47 1E F4 08 7B 23 7A 12 59 3E 3A 19 33 C3 CC E9 3C DD E7 56 B7 1C 41 9D 60 70 34 83 B9 39 4B 03 B8 8A 04 EB 67 4E 0D 77 E1 73 58 15 6A C7 24 8A E5 B8 72 88 7A 7B 07 E7 A7 FD 6D C0 98 08 03 53 EF E4 9E 39 E9 3A DB B7 0F 05 81 99 33 AF 1B 79 2B 1E 4A 00 E2 8A DA C0 28 53 14 70 E4 41 5A 04 31 9A B2 67 DE 91 14 99 DE 38 29 7D 3D 9F 7F 7E 03 63 B0 36 C2 1E 7A 2C 12 17 72 F1 C4 B0 3D 9C 29 E6 D5 F7 06 56 06 5E B9 14 6D A2 29 03 55 DC CF A5 90 AF CB 53 CC B2 02 B3 81 A7 4B 65 BA 2A EB CA 47 6D 0A C4 2E DB 6C 6F 1B".Split(' '))
{
Keycli[index] = Convert.ToByte(s, 16);
index++;
}
byte[] keys = { 0x58, 0xF0, 0xDD, 0xBF, 0x6E, 0x39, 0x86, 0xCC, 0xC8, 0x27, 0x93, 0x01, 0xA1, 0x6C, 0x31, 0x97 };
byte[] keyc = { 0x58, 0xF0, 0xDD, 0xBF, 0x6E, 0x39, 0x86, 0xCC, 0xC8, 0x27, 0x93, 0x01, 0xA1, 0x6C, 0x31, 0x97 };
byte[] keycc = { 0x58, 0xF0, 0xDD, 0xBF, 0x6E, 0x39, 0x86, 0xCC, 0xC8, 0x27, 0x93, 0x01, 0xA1, 0x6C, 0x31, 0x97 };
byte[] keyds = {0xC8, 0x27, 0x93, 0x01, 0xA1, 0x6C, 0x31, 0x97 };
byte[] keydc = {0xC8, 0x27, 0x93, 0x01, 0xA1, 0x6C, 0x31, 0x97 };
byte[] keydcc = { 0xC8, 0x27, 0x93, 0x01, 0xA1, 0x6C, 0x31, 0x97 };
int size;
int numpcksr = 0;
int numpckcl = 0;
int lensum = 0;
byte[] dsend = new byte[4];
Console.WriteLine("Все компоненты инициализированы запуск скрипта");
while (true)
{
while (nsgsin.DataAvailable)
{
nsgsin.Read(buf, 0, 2);
temp = (buf[0] + buf[1] * 256);
size = 0;
while (size != temp - 2) { size += nsgsin.Read(buf, size + 2, temp - size - 2); }
if (numpckcl == 0)
{
Console.WriteLine(BitConverter.ToString(buf, 2, temp - 2).Replace('-', ' '));
nsgsout.Write(buf, 0, temp);
numpckcl++;
continue;
}
BitConverter.GetBytes((UInt16)(temp + 4)).CopyTo(buf, 0);
/* for (int i = 2; i < temp; ++i)
{
buf[i] = Convert.ToByte(buf[i] ^ Keycli[((numpckcl % 8 * 32) + ((i - 2) % 32))]);
}*/
byte temp1 = 0;
for (int i = 2; i < temp; i++)
{
byte temp2 = buf[i];
buf[i] = Convert.ToByte((temp2 ^ (keycc[(i - 2) % 16]) ^ temp1));
temp1 = temp2;
}
Console.WriteLine(numpckcl);
if (buf[0] == 0xF)
{
buf[2] = 0x5; buf[3] = 0x3; buf[4] = 0; buf[5] = 0; buf[6] = 0; buf[7] = 0; buf[8] = 0;
buf[9] = 0; buf[10] = 0;
}
temp += 4;
Crypt_Lineage.CryptEnd(ref buf, temp - 6, numpckcl, ref lensum, dsend);
log.WriteLine();
log.WriteLine(numpckcl+"client");
log.WriteLine();
for (int i = 0; i < temp; i++)
{
log.Write(buf[i].ToString("x") + " ");
}
log.WriteLine();
log.WriteLine();
/*Console.WriteLine(BitConverter.ToString(buf, 2, temp - 2).Replace('-', ' '));*/
/*Console.WriteLine(BitConverter.ToString(keyc, 0, 16).Replace('-', ' '));*/
Console.WriteLine();
temp1 = 0;
for (int i = 2; i < temp; i++)
{
byte temp2 = buf[i];
buf[i] = Convert.ToByte((buf[i] ^ (keyc[(i - 2) % 16]) ^ temp1));
temp1 = buf[i];
}
for (int i = 2; i < temp; ++i)
{
buf[i] = Convert.ToByte(buf[i] ^ Keycli[((numpckcl % 8 * 32) + ((i - 2) % 32))]);
}
keydc = BitConverter.GetBytes(BitConverter.ToInt64(keydc, 0) + temp-2);
keydcc = BitConverter.GetBytes(BitConverter.ToInt64(keydcc, 0) + temp-6);
keydcc.CopyTo(keycc, 8);
keydc.CopyTo(keyc, 8);
nsgsout.Write(buf, 0, temp);
numpckcl++;
}
/////////////////////////////////////////////////////////////////////////////
Thread.Sleep(10);
while (nsgsout.DataAvailable)// отправка на клиент
{
size = nsgsout.Read(buf, 0, 2);
temp = (buf[0] + buf[1] * 256);
size = 0;
while (size != temp-2){size += nsgsout.Read(buf, size + 2, temp - size-2);}
if (numpcksr == 0)
{
for (int i = 4; i < 12; i++)
{
keys[i - 4] = buf[i];
}
nsgsin.Write(buf, 0, temp);
keys.CopyTo(keyc,0);
keys.CopyTo(keycc, 0);
numpcksr++;
continue;
}
byte temp1 = 0;
for (int i = 2; i < temp; i++)
{
byte temp2 = buf[i];
buf[i] = Convert.ToByte((temp2 ^ (keys[(i - 2) % 16]) ^ temp1));
temp1 = temp2;
}
///////////////////////////////////////////////
////////////////////////////////////////////////
/* log.WriteLine();
log.WriteLine(numpcksr);
for (int i = 0; i < temp; i++)
{
log.Write(buf[i].ToString("x") + " ");
}
log.WriteLine();
log.WriteLine();*/
// if (buf[2] == 0x7f) buf[2]=0x00;
Console.WriteLine("SRV PCK <<"+numpcksr);
Console.WriteLine(BitConverter.ToString(buf,2,temp-2).Replace('-', ' '));
Console.WriteLine();
temp1 = 0;
for (int i = 2; i < temp; i++)
{
byte temp2 = buf[i];
buf[i] = Convert.ToByte((buf[i] ^ (keys[(i - 2) % 16]) ^ temp1));
temp1 = buf[i];
}
keyds=BitConverter.GetBytes(BitConverter.ToInt64(keyds, 0) + temp-2);
keyds.CopyTo(keys, 8);
nsgsin.Write(buf, 0, temp);
numpcksr++;
}
}
и еще на окончание(типо хеш функции к каждому пакету дописывается)
Код:
lensum++;
uint sumbyte;
if (lensum % 2 == 1) sumbyte = 0x98786756; else sumbyte = 0x13243546;
for (int i = 0; i < len; i++) sumbyte += data[i+2];
/*Console.WriteLine(BitConverter.ToString(BitConverter.GetBytes(sumbyte)).Replace('-', ' '));*/
/*Console.WriteLine(BitConverter.ToString(BitConverter.GetBytes(sumbyte)).Replace('-', ' '));*/
dsend = BitConverter.GetBytes(sumbyte);
/* Console.WriteLine("lensum: " + BitConverter.ToString(BitConverter.GetBytes(lensum)).Replace('-', ' '));*/
for (int i = 0; i < 4; i++)
{
dsend[i] += (byte)(0x4b);
/* Console.Write("dsend[i] += (0x4b): {0:X}", dsend[i]);*/
dsend[i] *= (byte)(len + lensum + i);
/* Console.WriteLine(" dsend[i] *= (byte)(len + lensum + i) {0:X} = {1:X}", len + lensum + i, dsend[i]);*/
}
/* Console.WriteLine("lensum+len "+BitConverter.ToString(BitConverter.GetBytes(lensum + len)).Replace('-', ' '));*/
sumbyte = BitConverter.ToUInt32(dsend, 0) + (uint)(lensum + len);
lensum += len;
BitConverter.GetBytes(sumbyte).CopyTo(data, len + 2);
Console.WriteLine(BitConverter.ToString(data, 2, len+4).Replace('-', ' '));
Console.WriteLine("dsend " + BitConverter.ToString(BitConverter.GetBytes(sumbyte)).Replace('-', ' '));
/* Console.WriteLine(BitConverter.ToString(data, 2, len + 4).Replace('-', ' '));*/
кому надо сделают думаю
|