PDA

Просмотр полной версии : Вопрос про ООГ


Skuka.95
16.04.2012, 20:22
Подключаюсь через сокеты к серверу, и получаю Y2Y (заместо Y кракозябра)
и вот собственно вопрос как из Этого получить пакет типо этого01 32 10 6A 00 00 D0 00 00 00 00 64 28 C0 26 68 2F 8D FA 00 01 04 04 00 1A 33 30 30 30 30 30 33 63 35 64 34 66 35 64 37 37 34 66 34 65 32 39 31 64 65 32 00

п.с. пишу на делфи.

Kitsune
16.04.2012, 20:55
Читать не строку, а байты...

Skuka.95
17.04.2012, 14:27
получил 01 32 10 62
какой то короткий пакет получается... что я делаю не так ?)

Kitsune
17.04.2012, 14:47
что я делаю не так ?)
Или вы переводите в байты полученную строку (что не верно) или не целиком пакет вычитываете из потока.

Skuka.95
17.04.2012, 14:49
(что не верно)
тогда я незнаю как надо(

Kitsune
17.04.2012, 14:50
тогда я незнаю как надо(
Ничем не могу помочь вам с делфи.

Skuka.95
17.04.2012, 14:52
Ничем не могу помочь вам с делфи.
ну зато можно теорией на словах помоч

Kitsune
17.04.2012, 14:54
ну зато можно теорией на словах помоч
Читайте байты из потока.

Skuka.95
18.04.2012, 13:58
получил такой пакет
01 32 10 5B 00 00 D0 00 00 00 00 CE 6D 07 DC E5 8D E9 48 00 01 04 04 00 1A 33 30 30 30 30 30 33 63 35 64 34 66 35 64 37 37 34 66 34 65 32 39 31 64 65 32 00 5A
я всё правельно сделал ?)
зел это версия игры
10 - размер ключа
а оранж тогда сам ключ ?

Kitsune
18.04.2012, 15:03
01 - CUInt, тип/опкод пакета
32 - CUInt, размер пакета
10 - CUInt, размер ключ авторизации
5B 00 00 D0 00 00 00 00 CE 6D 07 DC E5 8D E9 48 - Bytes, ключ
00 01 04 04 - Bytes, версия
00 - Byte, тип авторизации (MD5)
1A - CUInt, размер CRC
33 30 30 30 30 30 33 63 35 64 34 66 35 64 37 37 34 66 34 65 32 39 31 64 65 32 - Bytes, CRC
00 - Byte, модификатор

Skuka.95
18.04.2012, 15:33
значит я правельно сделал)
5B 00 00 D0 00 00 00 00 CE 6D 07 DC E5 8D E9 48 - Bytes, ключ
как я понял размер ключа 10 потому что "00" не учитывается а то меня это слека напрягает

Kitsune
18.04.2012, 15:40
потому что "00" не учитывается а то меня это слека напрягает
О каком 0 речь идет?

Skuka.95
18.04.2012, 15:43
5B 00 00 D0 00 00 00 00 CE 6D 07 DC E5 8D E9 48 - Bytes, ключ
ну вот
размел ключа 10 - это получается если не считать "00"

Kitsune
18.04.2012, 15:52
это получается если не считать "00"
Да какой 00 не считать? /dgs
Тип авторизации?

Skuka.95
18.04.2012, 16:18
Да какой 00 не считать?
издеваешься ? я про нули в общем, потому что если их считать то размер ключа 16

Kitsune
18.04.2012, 16:49
издеваешься ? я про нули в общем, потому что если их считать то размер ключа 16
Так длина ключа и есть 16... Не чуби...
0х10 = 16

Skuka.95
18.04.2012, 16:56
Так длина ключа и есть 16... Не чуби...
0х10 = 16
ааа =(

Добавлено через 3 часа 8 минут
значит теперь надо послать пакет 0x3
такого вида
Opcode Byte // 0x03
PacketLen Byte //Длина пакета начиная со следущего байта
LoginLength Byte //Длина логина
Login Byte[LoginLength] //Логин
HashLen Byte //Длина хэши
Hash Byte[HashLen] //Хэш
MD5 Authorize:
Hash = HMAC_MD5(MD5(Login+Password),Key1); //Ключ из пакета SM_SERVERINFO
и в ответ получим 0x2
а дальше что ?

п.с. ненадо меня посылать на пв лаб
и да я знаю что чубарый)

TeedI
18.04.2012, 20:24
ааа =(

Добавлено через 3 часа 8 минут
значит теперь надо послать пакет 0x3
такого вида


и в ответ получим 0x2
а дальше что ?

п.с. ненадо меня посылать на пв лаб
и да я знаю что чубарый)

А дальше из пакете 0x02 извлекаем данные, генерируем ключ, шифруем клиентский трафик :)

Kitsune
19.04.2012, 10:54
S> 0x01
C> 0x03
S> 0x02 или 0x05 или (не помню опкод пакета бана)
C> 0x02 (этот пакет и все последующие идут зашифрованными)
S> 0x04 (этот пакет и все последующие идут сжатыми и зашифрованными)
C> 0x52
S> 0x53
... продолжаем запрос персонажей, пока они есть

А вообще, берете и снифаете нужный вам кусок и разбираете последовательность обмена пакетами.

Morkanus
21.06.2013, 23:45
а есть пример формирования пакета 0х03 на Delphi, на C# нашел но я там не разобрался

FreePVP)))
22.06.2013, 17:25
а есть пример формирования пакета 0х03 на Delphi, на C# нашел но я там не разобрался
Не разобрались - значит рано еще, попробуйте вернуться к ООГ позже

Morkanus
22.06.2013, 18:33
Не разобрались - значит рано еще, попробуйте вернуться к ООГ позже
ну я просто в С# не очень, ну так ладно буду разбираться=)

Добавлено через 2 часа 39 минут
Hash = HMAC_MD5(MD5(Login+Password),Key1); //Ключ из пакета SM_SERVERINFO

не подскажите как реализовать на Delphi. или хотя бы какие библиотеки подключить.

И ещё вопрос Login+Password это типо если Хэш логина= 063A82F190580EA90D482DE92E8369FF
Хэш пароля = F190CE9AC8445D249747CAB7BE43F7D5
то Login+Password имеется ввиду = 063A82F190580EA90D482DE92E8369FFF190CE9AC8445D2497 47CAB7BE43F7D5
для уточнения=)

FreePVP)))
22.06.2013, 21:35
ну я просто в С# не очень, ну так ладно буду разбираться=)

Добавлено через 2 часа 39 минут
Hash = HMAC_MD5(MD5(Login+Password),Key1); //Ключ из пакета SM_SERVERINFO

не подскажите как реализовать на Delphi. или хотя бы какие библиотеки подключить.

И ещё вопрос Login+Password это типо если Хэш логина= 063A82F190580EA90D482DE92E8369FF
Хэш пароля = F190CE9AC8445D249747CAB7BE43F7D5
то Login+Password имеется ввиду = 063A82F190580EA90D482DE92E8369FFF190CE9AC8445D2497 47CAB7BE43F7D5
для уточнения=)
Структура пакета C03 описана в:

Моем брутфорсе
Теме про авторизацию в пв
Статье про протокол игры
В декларации пандоры
В разделе "общение разработчиков"(надо поискать)
Гугле

Генерация хеша и ключей тоже описывалась множество раз

Hash = HMAC_MD5(MD5(Login+Password),Key1);
Интересный факт: скобки указывают последовательность выполняемых операций

semoder
24.06.2013, 05:44
а есть пример формирования пакета 0х03 на Delphi, на C# нашел но я там не разобрался

Подключай библиотеку synacode, можно нагуглить)


l := Bytes.Create;
l.Init(Packet[0], length(Packet));
l.ReadCUint;
l.ReadByte;
l.ReadByte;
ServerKey :=l.ReadBytes(16);
hash := StringToBytes(HMAC_MD5(BytesToString(ServerKey), MD5(Login + Password)));
l.Free;

b := Bytes.Create;
b.WriteAnsiString(Login);
b.WriteByte(16);
b.WriteBytes(hash);
b.WriteByte(0);
b.WriteByte(4);
for i:=0 to 3 do
b.WriteByte($FF);
Send($03, b.Packet);
b.Free;


Может можно сделать и проще, но это мой вариант)

VeTaL_UA
24.06.2013, 13:54
Подключай библиотеку synacode
Библиотека называется synaps ;) synacode - это её модуль :)