Вот теперь наткнулся на проблему с шифрацией, в общем как всегда перед приятным процессом, мучался 3 или 4 дня и тут уже дошел до отправки первого пакета, тут проблема:
с двумя непонятными последними байтами, так вот вопрос откуда они берутся? откуда их брать? я так понимаю это шифрация каких то символов размер чего то там...
тему что я давал читал ? там на яве есть все что нужно.
а вообще берешь клиентом со снифером заходишь на нужный сервер и пытаешься повторить пакеты.
Да конечно! я по ней только и делал! Но вот говорю все пакеты которые расшифруються клиентом, у меня правильные, каждый пакет, но вот под конец там где идёт BlowFish.Encode уже проблема! что делать не знаю, все функции переписаны, но вот почему то не то...
Вот пакеты которые идут
Код:
START
BA 00 D3 1F 34 69 FA BB 98 91 FB D2 78 94 40 AF
25 BA BC 31 AD C4 A8 5F 5F 08 DD D4 7B 44 17 A7
1E 2D DC C6 DA B6 05 78 2E 7C 6B 7C A1 2A 60 70
42 D4 CC 51 CF F9 19 8D 40 1D 32 F6 0D B9 60 A3
A4 AC 33 F5 A2 3D 18 88 0C 78 53 6E 46 56 7A 7D
7E 99 2C ED FC 53 58 F1 DF F4 28 0C 79 51 B7 54
0F 7B A3 5B A0 30 26 82 6C B8 5B 8E A7 3C 22 42
A5 77 F3 35 81 28 5B 0D 7C 26 C5 11 93 2D 72 84
D1 17 CB 2A 87 1E D5 F3 B7 8E 4C FD 84 B2 C0 55
BD 23 4B E7 19 B2 48 D6 3B BB 82 2F 24 C8 9A FC
84 83 63 8B BF 5F 93 5E E7 F4 4C CD 23 5E 35 3F
5C AF F7 D6 FB F4 ED 49 60 EF
TEMP
D3 1F 34 69 FA BB 98 91 FB D2 78 94 40 AF 25 BA
BC 31 AD C4 A8 5F 5F 08 DD D4 7B 44 17 A7 1E 2D
DC C6 DA B6 05 78 2E 7C 6B 7C A1 2A 60 70 42 D4
CC 51 CF F9 19 8D 40 1D 32 F6 0D B9 60 A3 A4 AC
33 F5 A2 3D 18 88 0C 78 53 6E 46 56 7A 7D 7E 99 2C
ED FC 53 58 F1 DF F4 28 0C 79 51 B7 54 0F 7B A3 5B
A0 30 26 82 6C B8 5B 8E A7 3C 22 42 A5 77 F3 35 81
28 5B 0D 7C 26 C5 11 93 2D 72 84 D1 17 CB 2A 87 1E
D5 F3 B7 8E 4C FD 84 B2 C0 55 BD 23 4B E7 19 B2 48
D6 3B BB 82 2F 24 C8 9A FC 84 83 63 8B BF 5F 93 5E
E7 F4 4C CD 23 5E 35 3F 5C AF F7 D6 FB F4 ED 49 60
EF 00 00
Decode
00 85 1D 5E A2 B8 CE 44 CF E9 18 C4 51 5A 6D 13 92
B8 A0 B0 0E 5A 5C 68 70 BC B1 2D 6D 22 F8 ED 85 92
A5 4C 5D 24 EC 04 C9 85 BF B9 F9 4A 58 E9 A2 EB CC
0D 81 61 A5 52 3C AB 2B F6 39 E7 04 70 D6 84 39 D8
DC 77 D5 29 69 C6 BC 1F 8A 1F 4A 21 54 D2 3E 5D 0A
58 B1 12 24 AA CF 17 FA 86 BA E4 85 A7 61 CB 8D 04
39 FD 7E B9 5B C6 F1 E0 8E 45 B7 79 C9 7D E8 24 D3
B9 D1 78 0E 7C CD 28 E0 3D DD 77 9A 20 52 71 60 81
41 4D 52 43 D9 03 FF A1 10 00 AC BD 69 E0 1B 70 02
E8 0D D2 07 89 77 87 3A 73 12 D3 9B 68 BD BE 5E 61
23 7B 2D A3 B6 CC 6D 86 07 29 CB 2B AE 04 00 00
AntiXor
BA 00 00 85 1D 5E 6D 21 C6 00 00 3C 4A C9 C3 C2 0D
63 60 11 63 E7 BE D9 ED 8B ED 5D 06 77 E8 B0 A5 59
50 49 36 4F E4 A6 BC 73 8E B3 77 61 5B 1E 6C 1C DD
4B 6E DC 8D F6 81 C4 1B 8A D7 39 8B 63 1C D8 1A 88
14 3F 8B 35 7E 37 1F C2 8A C0 DE AD AB 63 A2 95 6F
AF 2E 0E 74 1C D2 2F B5 4C 87 18 E5 DD F6 5C 89 49
AF 7D 6E 3F AF 26 26 03 98 A6 49 50 EF 9D 07 34 59
E3 22 3A 94 5F 2E 7F F6 42 7A DD F3 86 45 A0 13 C4
51 40 86 4E 95 DD 29 FC 9C C3 77 20 B6 AD 97 F7 E0
BD 07 6F 59 AB F1 A5 99 57 A3 2B 97 85 21 08 5C B4
73 00 75 38 40 25 B1 E5 6D 86 07 29 CB 2B AE 04
RSA Key changed : 61 3C 4A C9 C3 C2 0D 63 60 11 63
E7 BE D9 ED 8B ED 5D 06 77 E8 B0 A5 59 50 49 36 4F
E4 A6 BC 73 8E B3 77 61 5B 1E 6C 1C DD 4B 6E DC 8D
F6 81 C4 1B 8A D7 39 8B 63 1C D8 1A 88 14 3F 8B 35
7E 37 1F C2 8A C0 DE AD AB 63 A2 95 6F AF 2E 0E 74
1C D2 2F B5 4C 87 18 E5 DD F6 5C 89 49 AF 7D 6E 3F
AF 26 26 03 98 A6 49 50 EF 9D 07 34 59 E3 22 3A 94
5F 2E 7F F6 42 7A DD F3 86 45 A0 13 C4 51 40
BlowFish key changed :
00 6F 59 AB F1 A5 99 57 A3 2B 97 85 21 08 5C B4
SendPkt :
2A 00 07 85 1D 5E 6D 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 6A 85 1D 5E 00 00
00 00 00 00 00 00 00 00 1C FC
что идёт после неё
//Запись в банк всеми символами их всего 42
Array.Copy(send_buff, 0, temp_buff, 0, Len);
//Декорируем
BlowFish.Encode(temp_buff,Len);
//И записываем где было со второго символа и без последних 2-х...
как в la2_client_emu
Array.Copy(temp_buff, 0, send_buff, 2, Len-2);
//В итоге получаем бред какото...
SEND PTK ENDEND :
2A 00 75 4A FA C4 BA B7 E4 D9 DA 8E BD 99 7A
09 C0 2A DA 8E BD 99 7A 09 C0 2A 04 C7 91 9B
62 11 E6 1A DA 8E BD 99 7A 09 C0 2A
Люди добрые че делать)
Добавлено через 4 минуты
Заметил одну такую хрень, что там добавляеться ещё 4 Символа, а по 4 символа ходят только в AddCheckSumme
Тоесть сам банк с данными приходит с этими уже байтами
вот они
Код HTML:
1C FC 0C 00 BA 00
больше нету
Код:
public static byte[] AddCheckSumm(byte[] Data, int len) {
if(Data.Length < len + 4){
return null;
}
byte[] t = new byte[4];
int chksum = 0;
int ecx = 0;
//string ecx = ";
int i = 0;
while (i < len){
t[0] = Data[i];
t[1] = Data[i+1];
t[2] = Data[i+2];
t[3] = Data[i+3];
try {
Debug.Log("ACS " + BitConverter.ToString(t));
ecx = BitConverter.ToInt32(t,0) ;
chksum ^= ecx;
i += 4;
} catch (Exception ex) {
Debug.Log("Error " + ex.Message);
}
}
Array.Copy(BitConverter.GetBytes(chksum), 0, t, 0, 4);
//Возвращаем
Data[len+1] = t[0];
Data[len+2] = t[1];
Data[len+3] = t[2];
Data[len+4] = t[3];
return Data ;
}
Посмотрите функция правильная? мне только возвращается мои символы, до 40, а дальше пусто, этот код на C#
Последний раз редактировалось zAvaTARz, 31.12.2012 в 16:38.
Причина: Добавлено сообщение
//Запись в банк всеми символами их всего 42
Array.Copy(send_buff, 0, temp_buff, 0, Len);
//Декорируем
BlowFish.Encode(temp_buff,Len);
//И записываем где было со второго символа и без последних 2-х...
первые 2 байта это размер пакета они не шифруются именно поэтому Array.Copy(temp_buff, 0, send_buff, 2, Len-2); //пропускаем 2 байта и длинну уменьшаем -2
БФ он блочный поэтому если шифровать "не с того" символа получится не то что надо...
Последний раз редактировалось lamo386, 31.12.2012 в 19:23.
первые 2 байта это размер пакета они не шифруются именно поэтому Array.Copy(temp_buff, 0, send_buff, 2, Len-2); //пропускаем 2 байта и длинну уменьшаем -2
БФ он блочный поэтому если шифровать "не с того" символа получится не то что надо...
И весь остальной код, неправельный это из за того что последних 2 символа не те?
Добавлено через 6 минут
так в том то и дело что те символы я отправляю
Добавлено через 17 минут
В чем вопрос откуда берутся этих 2 последних символа?
И откуда их брать мне, потому что сейчас тут уже B8 00
Последний раз редактировалось zAvaTARz, 31.12.2012 в 20:51.
Причина: Добавлено сообщение
этот пакет ты взял из Пх ? так вот это расшифрованный пакет.
из сылки которую постил ты же
Цитата:
RequestGGAuth
Формат:
22 00 // Длина
07 // Тип
XX XX XX XX // ID сессии
23 92 90 4d
18 30 b5 7c
96 61 41 47
05 07 96 fb
00 00 00
f2 12 ba a9 // чексумма
00 00 00 00
если по русски то пакет(42байта) состоит из 2 байта размер, 36 байт дата (1 байт ид пакета, 4 байта сесион ид, 3 по 4 байта это для ГГ, 4 байта ноль), 4байта чек сумма.
сначало собирается пакет потом этот пакет без размера (помни длинна пакета -2) отдается блоуфишу.
этот пакет ты взял из Пх ? так вот это расшифрованный пакет.
из сылки которую постил ты же
если по русски то пакет(42байта) состоит из 2 байта размер, 36 байт дата (1 байт ид пакета, 4 байта сесион ид, 3 по 4 байта это для ГГ, 4 байта ноль), 4байта чек сумма.
сначало собирается пакет потом этот пакет без размера (помни длинна пакета -2) отдается блоуфишу.
Этот пакет который должен быть , а это пакет который я собрал
вся проблема в том что я не знаю где брать последние 2 байта у меня 00 00 а должно быть 1C FC но оно почему то постоянно меняется, я не знаю почему, и откуда брать эти 2 последних байта...
Ты меня не совсем понимаешь) я делаю перевожу с la2_client_emu (Исходник авторизации на Delphi) вся проблема в том что там откуда не возьмись берутся нужные байты...
Во вторых я посылаю на функцию Encode
Вот скрипт функции
Код:
public static byte[] Encode(byte[] data, int _len)
{
int i, len;
byte[] DBuff = new byte[8];
len = _len ;
for (i = 0; i < len / 8; i++)
{
Array.Copy(data, i * 8, DBuff, 0, 8);
DBuff = EncodeBlock(DBuff);
//Debug.Log("Encode : " + BitConverter.ToString(DBuff).Replace("-"," ")) ;
Array.Copy(DBuff, 0, data, i * 8, 8);
}
return data;
}
мож я чот не понял, но так он ж написал - чек сумма размер и чек сумма это несколько разные вещи. размер - по сути длинна, а чек сумма это что-то типа срс у файла. она нужна на случай повреждения информации. типа пакет пришел, размер совпадает те-же 5 символов к примеру, но к примеру четвертый символ пришел не верный - пришла двойка вместо тройки из-за глюка где-то в сети. вот чек сумма и должна этот момент проверить, типа на случай если пакет битый - то попросить прислать этот пакет еще раз.
//Стартовый ключ инцилизации
bf_key = HexToStr("6B60CB5B82CE90B1CC2B6C556C6C6C6C");
//Инцилизируем ключ
BlowFish.Init(bf_key) ;
//Хекс преобразуем в байты, а байты это строки
public string HexToStr (string s) {
int i;
result = "" ;
Debug.Log("hex " + s + " " + s.Length) ;
//for i:=1 to (Length(s) div 2) do begin
for (i=0; i < (s.Length/2); i++) {
//Преобразуем символы
result = result + Convert.ToChar(Convert.ToInt32("" + s[i*2] + s[(i*2)+1],16)) ;
}
//Debug.Log("MyFunc : " + result);
i = 0 ;
return result;
}
Код:
public static void Init(string Key1)
{
long i, j;
long data, datal, datar;
long Size;
byte[] Key = new byte[Key1.Length];
//Key = BitConverter.GetBytes(Key1);//(byte[])Funcs.DeepClone(Key1);
//for i:=0 to Size-1 do key[i]:=Ord(key1[i+1]);
Size = Key1.Length;
for (int _i = 0; _i < Size; _i++)
{
Key[_i] = Convert.ToByte(Key1[_i]) ;
}
for (i = 0; i < 18; i++)
PArray[i] = BlowFishConsts.bf_P[i];
for (i = 0; i < 4; i++)
{
for (j = 0; j < 256; j++)
{
SBoxes[i, j] = BlowFishConsts.bf_S[i, j];
}
}
j = 0;
for (i = 0; i < 18; i++)
{
data = ((Key[j] & 0xFF) << 24) | ((Key[(j+1) % Size] & 0xFF) << 16) | ((Key[(j+2) % Size] & 0xFF) << 8) | (Key[(j+3) % Size] & 0xFF);
PArray[i] = PArray[i] ^ data;
j = (j + 4) % Size;
}
datal = 0;
datar = 0;
for (i = 0; i < 9; i++)
{
Blowfish_encipher(ref datal, ref datar);
PArray[i*2] = datal;
PArray[i*2 + 1] = datar;
}
for (i = 0; i < 4; i++)
for (j = 0; j < 128; j++)
{
Blowfish_encipher(ref datal, ref datar);
SBoxes[i, j*2] = datal;
SBoxes[i, j*2 + 1] = datar;
}
}
Не знаю что может такое и быть, не знал что с конечной шифрайцией будут такие проблемы...
Пакет верный, почему не шифрует так как надо, есть у кого скрипты на C#?