Показать сообщение отдельно
Старый 31.12.2012, 22:34   #27
Новичок
 
Аватар для zAvaTARz
 
Регистрация: 06.02.2011
Сообщений: 17
Сказал Спасибо: 2
Имеет 7 спасибок в 7 сообщенях
zAvaTARz пока неопределено
По умолчанию

Цитата:
Сообщение от lamo386 Посмотреть сообщение
этот пакет ты взял из Пх ? так вот это расшифрованный пакет.

из сылки которую постил ты же


если по русски то пакет(42байта) состоит из 2 байта размер, 36 байт дата (1 байт ид пакета, 4 байта сесион ид, 3 по 4 байта это для ГГ, 4 байта ноль), 4байта чек сумма.
сначало собирается пакет потом этот пакет без размера (помни длинна пакета -2) отдается блоуфишу.
Этот пакет который должен быть , а это пакет который я собрал

Код:
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 00 00
вся проблема в том что я не знаю где брать последние 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;
        }
Код:
        private static byte[] EncodeBlock(byte[] __data)
        {
            long xrd, xld;

            xld = BitConverter.ToInt32(__data, 0);
            xrd = BitConverter.ToInt32(__data, 4);

			//Debug.Log("xld "+BitConverter.ToString(BitConverter.GetBytes(xld)) + " xrd" + BitConverter.ToString(BitConverter.GetBytes(xrd))) ;
			
            Blowfish_encipher(ref xld, ref xrd);

            Array.Copy(BitConverter.GetBytes((Int32)xld), 0, __data, 0, 4);
            Array.Copy(BitConverter.GetBytes((Int32)xrd), 0, __data, 4, 4);
			

            return __data;
        }
Код:
Код:
        public static void Blowfish_encipher(ref long xl, ref long xr)
        {
            long xl2, xr2;

            xl2 = xl;
            xr2 = xr;
            xl2 = (xl2 ^ PArray[0]);

            RoundMy(ref xr2, ref xl2, 1); RoundMy(ref xl2, ref xr2, 2);
            RoundMy(ref xr2, ref xl2, 3); RoundMy(ref xl2, ref xr2, 4);
            RoundMy(ref xr2, ref xl2, 5); RoundMy(ref xl2, ref xr2, 6);
            RoundMy(ref xr2, ref xl2, 7); RoundMy(ref xl2, ref xr2, 8);
            RoundMy(ref xr2, ref xl2, 9); RoundMy(ref xl2, ref xr2, 10);
            RoundMy(ref xr2, ref xl2, 11); RoundMy(ref xl2, ref xr2, 12);
            RoundMy(ref xr2, ref xl2, 13); RoundMy(ref xl2, ref xr2, 14);
            RoundMy(ref xr2, ref xl2, 15); RoundMy(ref xl2, ref xr2, 16);

            xr2 = (xr2 ^ PArray[17]);
            xr = xl2;
            xl = xr2;
        }
Вот какое данные отправляю туда данные

1 - й этой мой пакетик готовый

Не трогаем - 2A 00

0x0000| 2A 00 07 93 55 3A 08 00 00 00 00 00 00 00 00 00
0x0010| 00 00 00 00 00 00 00 00 00 00 0F 93 55 3A 00 00
0x0020| 00 00 00 00 00 00 00 00 00 00

что делается дальше

Функция
Move(buff[0],send_buff[2],Len-2);

Как видно что уже на конце опять же B8 00 откуда оно вылезло

07 93 это размер он дается в начале...

Client MSG, Length: 42 (0x2A)
-------------------------------------------------------
0x0000| 07 93 55 3A 08 00 00 00 00 00 00 00 00 00 00 00
0x0010| 00 00 00 00 00 00 00 00 0F 93 55 3A 00 00 00 00
0x0020| 00 00 00 00 00 00 00 00 B8 00

и вот это уже отправляется на расшифрацию.

Ведь это все правильно да?

Далее посылаю в блоуфиш, функцию которую я описал ввыше

Вот ответ

с функцией
Код:
Move(temp_buff[0],send_buff[2],Len-2);
Код:
2A 00 85 DE 5B 3B 36 8F FF EA 1A 02 A4 D3 50 64 C8 50 1A 02 A4 D3 50 64 C8 50 DB 7F 8C 39 34 3D 06 12 1A 02 A4 D3 50 64 C8 50
Он вообще не соответствует тому что я записываю, и вывожу через la2_client_emu

Может быть я ошибаюсь и этот пакет верный я не знаю, но вот я показал что отправляется и что я получаю...

Вся проблема в 2-х последних байтах и наверно не правильном ответе, при дешировке Блоуфиша Encode

Надеюсь я понятно описал))

Добавлено через 7 минут
Сори вот ещё забыл, вот какой должен быть правильный ответ

тут тоже использовалась функция
Код:
Move(temp_buff[0],send_buff[2],Len-2);
Но это не сильно важно, даже если и использовать её, много не измениться...


Код:
0x0000| 07 93 9B 70 C3 4F B1 0B FC 51 68 D0 7E 60 DA E2 
0x0010| 6F B6 68 D0 7E 60 DA E2 6F B6 2D 29 A9 9F 3F A2 
0x0020| A9 31 68 D0 7E 60 DA E2 6F B6

Последний раз редактировалось zAvaTARz, 31.12.2012 в 22:36. Причина: Добавлено сообщение
zAvaTARz вне форума   Ответить с цитированием