Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 31.12.2012, 21:46   #1
Местный
 
Регистрация: 08.03.2011
Сообщений: 236
Сказал Спасибо: 31
Имеет 73 спасибок в 30 сообщенях
lamo386 пока неопределено
По умолчанию

Цитата:
Сообщение от zAvaTARz Посмотреть сообщение

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
этот пакет ты взял из Пх ? так вот это расшифрованный пакет.

из сылки которую постил ты же
Цитата:
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) отдается блоуфишу.
lamo386 вне форума   Ответить с цитированием
Старый 31.12.2012, 22:34   #2
Новичок
 
Аватар для 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 вне форума   Ответить с цитированием
Старый 31.12.2012, 19:16   #3
Местный
 
Регистрация: 08.03.2011
Сообщений: 236
Сказал Спасибо: 31
Имеет 73 спасибок в 30 сообщенях
lamo386 пока неопределено
По умолчанию

Цитата:
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-х...
первые 2 байта это размер пакета они не шифруются именно поэтому Array.Copy(temp_buff, 0, send_buff, 2, Len-2); //пропускаем 2 байта и длинну уменьшаем -2
БФ он блочный поэтому если шифровать "не с того" символа получится не то что надо...

Последний раз редактировалось lamo386, 31.12.2012 в 19:23.
lamo386 вне форума   Ответить с цитированием
Старый 31.12.2012, 20:51   #4
Новичок
 
Аватар для zAvaTARz
 
Регистрация: 06.02.2011
Сообщений: 17
Сказал Спасибо: 2
Имеет 7 спасибок в 7 сообщенях
zAvaTARz пока неопределено
По умолчанию

Цитата:
Сообщение от lamo386 Посмотреть сообщение
это я так полнимаю ты соснифал у клиента ?

первые 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. Причина: Добавлено сообщение
zAvaTARz вне форума   Ответить с цитированием
Старый 01.01.2013, 01:11   #5
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,229
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

мож я чот не понял, но так он ж написал - чек сумма размер и чек сумма это несколько разные вещи. размер - по сути длинна, а чек сумма это что-то типа срс у файла. она нужна на случай повреждения информации. типа пакет пришел, размер совпадает те-же 5 символов к примеру, но к примеру четвертый символ пришел не верный - пришла двойка вместо тройки из-за глюка где-то в сети. вот чек сумма и должна этот момент проверить, типа на случай если пакет битый - то попросить прислать этот пакет еще раз.
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
Старый 01.01.2013, 01:22   #6
Новичок
 
Аватар для zAvaTARz
 
Регистрация: 06.02.2011
Сообщений: 17
Сказал Спасибо: 2
Имеет 7 спасибок в 7 сообщенях
zAvaTARz пока неопределено
По умолчанию

Может это из-за инцилизации неверной?

Вот скрипт
Код:
		//Стартовый ключ инцилизации
		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#?
zAvaTARz вне форума   Ответить с цитированием
Старый 01.01.2013, 02:07   #7
Местный
 
Регистрация: 08.03.2011
Сообщений: 236
Сказал Спасибо: 31
Имеет 73 спасибок в 30 сообщенях
lamo386 пока неопределено
По умолчанию

ни яву ни с шарп не знаю =) разбиратся сейчас лень, но пакет 36 байт дата + 4 байта чек сумма первые 2 байта 2A 00 и не как иначе
lamo386 вне форума   Ответить с цитированием
Старый 01.01.2013, 13:50   #8
Рыцарь
 
Аватар для alexteam
 
Регистрация: 07.03.2009
Сообщений: 9,139
Сказал Спасибо: 70
Имеет 2,820 спасибок в 1,735 сообщенях
alexteam на пути к лучшему
По умолчанию

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

Client MSG, Length: 42 (0x2A)
эээ...
__________________
L2Ext - project closed.
alexteam вне форума   Ответить с цитированием
За это сообщение alexteam нажился спасибкой от:
Старый 01.01.2013, 16:45   #9
Новичок
 
Аватар для zAvaTARz
 
Регистрация: 06.02.2011
Сообщений: 17
Сказал Спасибо: 2
Имеет 7 спасибок в 7 сообщенях
zAvaTARz пока неопределено
По умолчанию

Цитата:
Сообщение от alexteam Посмотреть сообщение
эээ...
Сори не так описал...

2A 00 07 7B D1 70 78 00 00
00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 7F 7B D1 70 00
00 00 00 00 00 00 00 00 00 00 00

2A 00 - Это до

Вот этот пакет, а вот этот я отправляю на Encode

Код:
07 7B D1 70 78 00 00 00 00  
00 00 00 00 00 00 00 00 00 
00 00 00 00 00 00 7F 7B D1 
70 00 00 00 00 00 00 00 00 
00 00 00 00 00 00
Добавлено через 1 час 51 минуту
Да нашёл, скорее всего проблема с инцилизацией, 2-й

[CODEif Len>=171 then begin
SetLength(bf_key,16);
Move(buff[155],bf_key[1],16);
bf.Init(bf_key);[/code]

не знаю как получить ключ, можно пример ключа в Строчке (string)

Какие данные туда отправлять? У меня такой пакет

Код:
58 62 97 00 08 64 97 00 57 17 E5 3B 00 00 00 00
57 17 E5 3B - Ид сессии

Вот мой пакет, то что стоит до этого я не знаю что это, что я делаю дальше, перевожу 16 байтов в Строчку выходит

58629700086497005717E53B00000000

этот код перевожу через функцию HexToStr

и вот с этими данными я пихаю в BlowFish.Init(bf_key) ;, этот код правельный? или я не так вообще делаю

Просто у меня со старта вот такая инцилизация

Код:
		//Стартовый ключ инцилизации
		bf_key = HexToStr("6B60CB5B82CE90B1CC2B6C556C6C6C6C");
		//Инцилизируем ключ
		BlowFish.Init(bf_key) ;
И она правельная

Последний раз редактировалось zAvaTARz, 01.01.2013 в 18:39. Причина: Добавлено сообщение
zAvaTARz вне форума   Ответить с цитированием
За это сообщение zAvaTARz нажился спасибкой от:
Старый 02.01.2013, 18:49   #10
Новичок
 
Аватар для zAvaTARz
 
Регистрация: 06.02.2011
Сообщений: 17
Сказал Спасибо: 2
Имеет 7 спасибок в 7 сообщенях
zAvaTARz пока неопределено
По умолчанию

Фу блин вроде разобрался, теперь посылаю на сервер, а сервер вроде молчит, не отключается нечего тупо молчит...

Вот байты которые пришли в самом начале
New packed bytes 186
PHP код:
BA 00 00 B9 36 36 31 21 
C6 00 00 36 B4 AB E8 12 
A4 99 0F 3A 94 52 65 93 
E7 56 85 DD E7 2A C8 36 
5A AF D3 3D 8C DE 4D 0E 
19 A6 D7 B2 7D 0A F2 E8 
13 2C 55 BD 49 52 88 9C 
E2 86 C0 29 28 82 F2 CF 
A8 FA 4C 37 DA 5D 83 B1 
9D 78 47 38 CC F0 40 F9 
37 38 7D 58 3A C7 AE C9 
73 E0 C2 90 5B 71 82 E4 
C7 9F E6 F0 99 67 EE 50 
35 33 63 D5 88 70 21 1C 
3D 13 F2 E9 28 B5 80 E8 
E9 6C 91 ED 25 6D 17 57 
12 50 82 3C 0B 44 C4 86 
30 09 6E 4E 95 DD 29 FC 
9C C3 77 20 B6 AD 97 F7 
E0 BD 07 82 CE 9C D8 FC 
A1 AA CD 33 C3 F2 35 0C 
D2 A2 E8 00 D6 AB F6 14 
E2 85 4F 8D 54 2F 2E EB 
58 67 
А это байты которые я отправляю

Send server bytes, All bytes 42

PHP код:
07 B9 87 FC 56 46 8C 7E 
23 70 18 AE 83 8E 5E 22 
7F 17 18 AE 83 8E 5E 22 
7F 17 28 2E 1F B4 E3 46 
CD 73 18 AE 83 8E 5E 22 
7F 17 
Проверьте пожалста, у себя в декодерах, верно ли я расшифровал мб из за этого...

Или кто может просто проверьте первые байты, потом выложите , а я походу сравню все свои и ваши байты...

Добавлено через 4 минуты
PHP код:
        public void SendData byte[] write_dataint len ) {

            
//client.GetStream().Write(data,0,1) ;
            //writer = new StreamWriter(client.GetStream());
            
client.GetStream().Write(write_data,0,len);
            
client.GetStream().Flush();
    
        } 
Да вот ещё команда которой я посылаю байты она на C#

Последний раз редактировалось zAvaTARz, 02.01.2013 в 18:49. Причина: Добавлено сообщение
zAvaTARz вне форума   Ответить с цитированием
За это сообщение zAvaTARz нажился спасибкой от:
Ответ

  CoderX :: Forums > Основные форумы > Программинг


Опции темы
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Часовой пояс GMT +4, время: 10:18.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!