Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Общие знания про пакеты и их шифрацию

-

Общение и обсуждение, архив Lineage 2

- Cобытия, информация, вопросы и ответы по Lineage 2

Ответ
 
Опции темы
Старый 08.04.2012, 12:52   #1
 Разведчик
Аватар для ☻Cryker☻
 
☻Cryker☻ никому не известный тип
Регистрация: 19.02.2012
Сообщений: 0
Популярность: 14
Сказал(а) спасибо: 4
Поблагодарили 2 раз(а) в 1 сообщении
 
По умолчанию Общие знания про пакеты и их шифрацию

1. Общие сведения

1.1. Процесс входа в игру:
1) Сразу после установки соединения сервер отправляет клиенту пакет Init
2) С этого момента, все следующие пакеты для/от LS зашифрованны Blowfish'ем, ключем является: Token + символ с кодом ноль (так что длина ключа не 20, а 21!)
3) Клиент отправляет пакет RequestAuthLogin, содержащий логин и пароль
4) Если авторизация прошла успешно, сервер присылает пакет LoginOk, содержащий SessionKey1. Иначе, сервер присылает пакет LoginFail, содержащий информацию о причине неудачной авторизации.
5) Клиент запрашивает список серверов отправляя пакет RequestServerList
6) Сервер присылает пакет ServerList, в котором содержится список доступных гейм серверов, с указанием IP-адресов/портов каждого сервера, его состояния, количеством игроков и некоторой другой информацией
7) Клиент отсылает пакет RequestServerLogin
8) Сервер проверяет, можно ли подключится к выбранному GS, если да - сервер присылает пакет PlayOk, содержащий SessionKey2. Иначе, сервер присылает пакет PlayFail, содержащий информацию почему нельзя подключится.
9) Теперь мы можем попрощатся с LS и закрыть соединение с ним. (мы получили от него все необходимые данные)
10) Открываем соединение с GS. (IP-адресс и порт сервера мы получили в пакете ServerList)
11) Клиент отправляет пакет ProtocolVersion
12) Сервер присылает пакет FirstKey, содержащий первые 4 байта ключа XorKey
13) С этого момента, все следующие пакеты для/от GS зашифрованны! (о шифровании и ключе - будет чуть ниже)
14) Клиент отправляет пакет RequestAuthLogin
15) Сервер присылает CharacterSelectionInfo, содержащий список чаров
16) [тут может идти общение с сервером по управлению чарами - создание, удаление, востановление. Вдаватся не буду, ибо вам это пока не нужно. Просто пропускаем этот пункт.]
17) Клиент отправляет пакет CharacterSelected, содержащий номер чара, которым мы хотим зайти
18) Сервер присылает пакет SSQInfo, он необходим клиенту для выбора цвета неба и луны.
19) Сервер присылает пакет CharacterSelected
20) Клиент отправляет пакет RequestManorList, и сразу же за ним отправляет пакет RequestQuestList
21) Сервер присылает пакет ExSendManorList
22) Сервер присылает пакет QuestList, но обратите внимание - в данный момент нам будет сказанно что квестов/итемов - ноль, даже если это не так
23) Клиент отправляет пакет EnterWorld - Поздравляю, мы в игре!
Замечание: GS через определенные интервалы времени (~60сек), присылает пакет NetPing, из которого мы должны сохранить значение, и вставив его в одноименный пакет NetPing, отправить серверу.

Дальше могу вас обрадовать - все просто до безобразия! ^_^
Кроме ответа на NetPing мы мы не обязанны чтолибо отсылать серверу. А значит можем бесконечно долго находится в игре и просто слушать то, что нам шлет сервер. Неизвестные пакеты мы просто игнорируем!



1.1.2 Общение с сервером по управлению чарами:
Создание:
1) Когда клиент открывает окошко создания чара, серверу отправляется пакет NewCharacter
2) Сервер присылает пакет NewCharacterSuccess, содержащий статы базовых классов в игре
3) При нажатии на кнопку создать, клиент оправляет пакет CharacterCreate
4) Если чар удачно создан, сервер присылает пакет CharacterCreateSuccess, и следом за ним присылает обновленный список чаров: CharacterSelectionInfo. Если же создать чара не удалось, сервер присылает пакет CharacterCreateFail, и возвращаемся в предыдущий пункт


Удаление:
1) Клиент отправляет пакет CharacterDelete, содержащий номер чара, которого мы хотим удалить
2) Если чар удачно удален, сервер присылает пакет CharacterDeleteSuccess, если же удалить чара не удалось, сервер присылает пакет CharacterDeleteFail
3) Удалось удалить чара или нет, сервер присылает обновленный список чаров: CharacterSelectionInfo


Востановление:
1) Клиент отправляет пакет CharacterRestore, содержащий номер чара, которого мы хотим востановить
2) Если востановление было удачно, сервер присылает обновленный список чаров: CharacterSelectionInfo, если же нет, то ничего.



1.2. Шифрация пакетов GameServer'a:
Чтобы не загружать ваши и без того замученные головы, вместо алгоритмов, я дам готовые исходники (немного измененные для наглядности):

Код:
 char key_sc[8];
    char key_cs[8];

    void Encrypt(char *raw, int size) 
    { 
        int temp = 0;
        for (int i=0; i<size; i++) 
        { 
            int temp2 = raw[i] &0xff; 
            raw[i] = (char)(temp2 ^ (key_cs[i&7] &0xff) ^ temp); 
            temp = raw[i]; 
        }
        int old = key_cs[0] &0xff; 
        old |= key_cs[1] << 8 &0xff00; 
        old |= key_cs[2] << 0x10 &0xff0000; 
        old |= key_cs[3] << 0x18 &0xff000000; 
        old += size; 
        key_cs[0] = (char)(old &0xff); 
        key_cs[1] = (char)(old >> 0x08 &0xff); 
        key_cs[2] = (char)(old >> 0x10 &0xff); 
        key_cs[3] = (char)(old >> 0x18 &0xff); 
    }


    void Decode(char *input, int size)
    {
        int i = 0;
        int j = 0;
        for(int k=0; k < size; k++)
        {
            int i1 = input[k] & 0xFF;
            input[k] = (char)(i1 ^ key_sc[j++] & 0xFF ^i);
            i = i1;
            if(j>7) j=0;
        }
        long l = key_sc[0] & 0xFF;
        l |= key_sc[1] << 8 & 0xFF00;
        l |= key_sc[2] << 16 & 0xFF0000;
        l |= key_sc[3] << 24 & 0xFF000000;
        l += size;
        key_sc[0] = (char)(l & 255L);
        key_sc[1] = (char)(l >> 8 & 255L);
        key_sc[2] = (char)(l >> 16 & 255L);
        key_sc[3] = (char)(l >> 24 & 255L);
    }


    void Key(char* packet, int len)
    {
        key_sc[0] = packet[4];
        key_sc[1] = packet[5];
        key_sc[2] = packet[6];
        key_sc[3] = packet[7];
        key_sc[4] = (char)0xA1;
        key_sc[5] = (char)0x6C;
        key_sc[6] = (char)0x54;
        key_sc[7] = (char)0x87;
        for(i=0;i<8;i++) {key_cs[i]=key_sc[i];}
    }

    void add_ckecksum(unsigned char *raw, int count) //вычисляет чексумму и вставляет её в пакет
    {                                                //как пользоватся: add_ckecksum(CelyjPaket+2, DlinaPaketa-(2+4+4));
        unsigned long chksum = 0;
        unsigned long ecx;
        int i = 0;
        for(i = 0; i < count; i += 4)
        {
            ecx  = (unsigned long)raw[i];
            ecx |= (unsigned long)raw[i + 1]<<8;
            ecx |= (unsigned long)raw[i + 2]<<16;
            ecx |= (unsigned long)raw[i + 3]<<24;
            chksum ^= ecx;
        }
        memcpy(raw+count, (char *)&chksum, 4);
    }

    void RSAKeyDecode(char* RSAKey)
    {
        for (int i = 0; i < 64; i++)
        {
            RSAKey[i + 64] ^= RSAKey[i];
        }
        for (int i = 0; i < 4; i++)
        {
            RSAKey[i + 13] ^= RSAKey[i + 52];
        }
        for (int i = 0; i < 64; i++)
        {
            RSAKey[i] ^= RSAKey[i + 64];
        }
        for (int i = 0; i < 4; i++)
        {
            BYTE tmp = RSAKey[i];
            RSAKey[i] = RSAKey[i + 77];
            RSAKey[i + 77] = tmp;
        }
    }
Во первых заметьте, что после каждой шифрации или дешифрации ключ которым мы пользовались, будет изменен! И обратите особое внимание, у нас два ключа!!! Одним мы шифруем пакеты, которые мы отправляем серверу, вторым мы дешифруем пакеты которые сервер присылает нам. Процедура Key из данных пакета FirstKey устанавливает нам оба ключа (изначально ключи равны друг-другу).

Да, и забыл сказать - и Blowfish, и Xor-шифрация шифруют пакет начиная с третего байта! (т.е. первые два байта, означающие размер пакета - НЕ ШИФРУЮТСЯ НИКОГДА!!!)










2. Пакеты Client -> Login Server


00 - RequestAuthLogin
00 - RequestAuthLogin (RSA)
02 - RequestServerLogin
05 - RequestServerList
07 - RequestGGAuth


RequestAuthLogin


Формат:
32 00 // Длина
00 // Тип
XX XX XX XX XX XX XX XX XX XX XX XX XX XX // Login (учтите, эта строка - массив из 14 символов)
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX // Password (... из 16 символов ...)
08 00 00 00 00 00 00 00 00
XX XX XX XX // чексумма
00 00 00 00

Замечание: Если длина логина/пароля равна длине массива, то строка идет без ноль-терминатора!


RequestAuthLogin (RSA)


Формат:
AA 00 // Длина
00 // Тип
[начало зашифрованного блока]
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 20
00 00 XX XX XX XX XX XX XX XX XX XX XX XX XX XX // Login (учтите, эта строка - массив из 14 символов)
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX // Password (... из 16 символов ...)
[конец зашифрованного блока]
XX XX XX XX // GGAuthResponse из GGAuth
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
08 00 00 00 00 00 00 00 00
XX XX XX XX // чексумма
00 00 00 00

Замечание: Если длина логина/пароля равна длине массива, то строка идет без ноль-терминатора!


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


RequestServerLogin


Формат:
1A 00 // Длина
02 // Тип
XX XX XX XX // SessionKey1_FistPart из LoginOk
XX XX XX XX // SessionKey1_SecondPart из LoginOk
XX // ID сервера
00 00 00 00 00 00
XX XX XX XX // чексумма
00 00 00 00


RequestServerList


Формат:
1A 00 // Длина
05 // Тип
XX XX XX XX // SessionKey1_FistPart из LoginOk
XX XX XX XX // SessionKey1_SecondPart из LoginOk
04 00 00 00
00 00 00
XX XX XX XX // чексумма
00 00 00 00











3. Пакеты Login Server -> Client


00 - Init
00 - Init (RSA)
01 - LoginFail
03 - LoginOk
04 - ServerList
06 - PlayFail
07 - PlayOk
0B - GGAuth


Init


Формат:
0B 00 // Длина
00 // Тип
XX XX XX XX // ID сессии
XX XX XX XX // Ревизия протокола, на моем сервере она равна 0x785A


Init (RSA)


Формат:
9B 00 // Длина
00 // Тип
XX XX XX XX // ID сессии
XX XX XX XX // Ревизия протокола
[начало зашифрованного RSA-ключа]
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX
[конец зашифрованного RSA-ключа]
XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX XX // неизвестно для чего это (в яве тут нули)



GGAuth


Формат:
12 00 // Длина
0B // Тип
XX XX XX XX // GGAuthResponse
00 00 00 00
00 00 00
XX XX XX XX // чексумма

Замечание: пакет из С4 ява


LoginFail


Формат:
12 00 // Длина
01 // Тип
XX // причина неудачной авторизации
00 00 00
00 00 00
XX XX XX XX // чексумма
00 00 00 00

Причина: 0x03 - Password does not match this account.
0x07 - The account is already in use. Access denied.
0x12 - Your usage term has expired. Please visit the official Lineage2 website at...

Замечание: в байтах 5-10, и последних четырех - часто попадается мусор...


LoginOk


Формат:
32 00 // Длина
03 // Тип
XX XX XX XX // SessionKey1_FistPart
XX XX XX XX // SessionKey1_SecondPart
00 00 00 00
00 00 00 00
01 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00
XX XX XX XX // чексумма
00 00 00 00

Замечание: в байтах 40-42, и последних четырех - часто попадается мусор...


ServerList


Формат:
XX XX // Длина
04 // Тип
XX // Количество серверов
XX // {номер LS}
[начало повторяющегося блока]
XX // ID сервера
XX XX XX XX // IP-аддресс GS
XX XX XX XX // Port GS
XX // возрастной лимит
XX // PVP сервер: 1-да, 0 - нет
XX XX // Количество игроков онлайн
XX XX // Максимальное количество игроков
XX // Статус сервера: 1-UP, 0-DOWN
XX XX XX XX // {Статус сервера}
XX // {Статус сервера}
[конец повторяющегося блока]
00 00 00
XX XX XX XX // чексумма
00 00 00 00

Замечание: в последних 4 байтах и 2 байтах перед чексуммой - часто попадается мусор...


PlayFail


Формат:
12 00 // Длина
06 // Тип
XX // Причина
00 00 00
00 00 00
XX XX XX XX // чексумма
00 00 00 00

Причина: { 0x08 - Access failed. Please try again later... }
Замечание: в байтах 5-10, и последних четырех - часто попадается мусор...


PlayOk


Формат:
1A 00 // Длина
07 // Тип
XX XX XX XX // SessionKey2_FistPart
XX XX XX XX // SessionKey2_SecondPart
01 00 00 00
00 00 00
XX XX XX XX // чексумма
00 00 00 00

Замечание: в байтах 13-18, и последних четырех - часто попадается мусор...











4. Пакеты Client -> Game Server


01 - MoveBackwardToLocation
00 - ProtocolVersion
03 - EnterWorld
08 - RequestAuthLogin
0B - CharacterCreate
0C - CharacterDelete
0D - CharacterSelected
0E - NewCharacter
0F - RequestItemList
11 - RequestUnEquipItem
14 - UseItem
38 - Say2
48 - ValidatePosition
62 - CharacterRestore
63 - RequestQuestList
73 - RequestPrivateStoreManage
A8 - NetPing
D008 - RequestManorList


ProtocolVersion


Формат:
07 01 // Длина
00 // Тип
XX XX XX XX // ProtocolVersion
[далее идет массив-константа, который хз от чего зависит, у меня он такой:]
09 07 54 56 03 09 0B 01 07 02 54 54 56 07 00 02
55 56 00 51 00 53 57 04 07 55 08 54 01 07 01 53
00 56 55 56 01 06 05 04 51 03 08 51 08 51 56 04
54 06 55 08 02 09 51 56 01 53 06 55 04 53 00 56
56 53 01 09 02 09 01 51 54 51 09 55 56 09 03 04
07 05 55 04 06 55 04 06 09 04 51 01 08 08 06 05
52 06 04 01 07 54 03 06 52 55 06 55 55 51 01 02
04 54 03 55 54 01 57 51 55 05 52 05 54 07 51 51
55 07 02 53 53 00 52 05 52 07 01 54 00 03 05 05
08 06 05 05 06 03 00 0D 08 01 07 09 03 51 03 07
53 09 51 06 07 54 0A 50 56 02 52 04 05 55 51 02
53 00 08 54 04 52 56 06 02 09 00 08 03 53 56 01
05 00 55 06 08 56 04 0D 06 07 52 06 07 04 0A 06
01 04 54 04 00 05 02 04 54 00 09 52 53 05 04 01
04 05 05 01 52 51 52 0D 06 51 08 09 54 53 00 0D
01 02 03 54 53 01 05 03 08 56 54 07 02 54 0B 06

Др.названия: VersionCheck, SendProtocolVersion
Замечание: кто знает, от чего зависит этот "массив-константа", плз напишите мне на мыло:


RequestAuthLogin


Формат:
XX XX // Длина
08 // Тип
XX XX ... 00 00 // Login (Unicode строка)
XX XX XX XX // SessionKey2_SecondPart
XX XX XX XX // SessionKey2_FistPart
XX XX XX XX // SessionKey1_FistPart
XX XX XX XX // SessionKey1_SecondPart
01 00 00 00

Др.названия: AuthLogin


CharacterSelected


Формат:
15 00 // Длина
0D // Тип
XX XX XX XX // Номер чара
00 00 00 00
00 00 00 00
00 00 00 00
00 00


RequestManorList


Формат:
05 00 // Длина
D0 // Тип
08 00 // Подтип


RequestQuestList


Формат:
03 00 // Длина
63 // Тип


EnterWorld


Формат:
13 00 // Длина
03 // Тип
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00


NetPing


Формат:
0F 00 // Длина
A8 // Тип
XX XX XX XX // {ID пинга}, из пакета NetPing
XX XX XX XX // Пинг
00 08 00 00


NewCharacter


Формат:
03 00 // Длина
0E // Тип


CharacterCreate


Формат:
XX XX // Длина
0B // Тип
XX XX ... 00 00 // Имя создаваемого чара (Unicode строка)
XX XX XX XX // Race
XX XX XX XX // Sex
XX XX XX XX // ClassID
XX XX XX XX // INT
XX XX XX XX // STR
XX XX XX XX // CON
XX XX XX XX // MEN
XX XX XX XX // DEX
XX XX XX XX // WIT
XX XX XX XX // HairStyle
XX XX XX XX // HairColor
XX XX XX XX // Face

Замечание: STR,DEX,CON,INT,WIT,MEN - это базовые статы выбранного класса, знаем мы их из пакета NewCharacterSuccess
(но на самом деле, сервер их игнорирует!)


CharacterDelete


Формат:
07 00 // Длина
0C // Тип
XX XX XX XX // Номер чара


CharacterRestore


Формат:
07 00 // Длина
62 // Тип
XX XX XX XX // Номер чара


Say2


Формат:
XX XX // Длина
38 // Тип
XX XX ... 00 00 // Отправляемое сообщение (Unicode строка)
XX XX XX XX // Тип сообщения (аналогичен Say2)
XX XX ... 00 00 // Имя получателя (Unicode строка)

Замечание: Имя получателя - присутсвует только если "Тип сообщения" = 2 (т.е. только если это приватное сообщение!)


RequestItemList


Формат:
03 00 // Длина
0F // Тип


UseItem


Формат:
0B 00 // Длина
14 // Тип
XX XX XX XX // ObjectID
00 00 00 00


RequestUnEquipItem


Формат:
07 00 // Длина
11 // Тип
XX XX XX XX // BodyPart: 1 - Under
2 - REar
4 - LEar
8 - Neck
16 - RFinger
32 - LFinger
64 - Head
128 - RHand
256 - LHand
512 - Gloves
1024 - Chest
2048 - Legs
4096 - Feet
8192 - Back
16384- LRHand
32768- Hair


MoveBackwardToLocation


Формат:
1F 00 // Длина
01 // Тип
XX XX XX XX // DestX
XX XX XX XX // DestY
XX XX XX XX // DestZ
XX XX XX XX // CurX
XX XX XX XX // CurY
XX XX XX XX // CurZ
XX XX XX XX // Для передвижения используем клаву или мышь? (0-клава 1-мышь)


ValidatePosition


Формат:
17 00 // Длина
48 // Тип
XX XX XX XX // CurX
XX XX XX XX // CurY
XX XX XX XX // CurZ
XX XX XX XX // Heading
00 00 00 00 // ???


RequestPrivateStoreManage


Формат:
03 00 // Длина
73 // Тип

Др.названия: RequestPrivateStoreManageSell, TradeRequest











5. Пакеты Game Server -> Client


00 - FirstKey
01 - MoveToLocation
03 - CharInfo ◙
04 - UserInfo ◙
0B - SpawnItem
0C - DropItem
12 - DeleteObject
13 - CharacterSelectionInfo
15 - CharacterSelected
16 - NpcInfo ◙
17 - NewCharacterSuccess
19 - CharacterCreateSuccess
1A - CharacterCreateFail
1B - ItemList
23 - CharacterDeleteSuccess
24 - CharacterDeleteFail
27 - InventoryUpdate
4A - Say2
80 - QuestList ◙
9C - PrivateStoreMsg
B9 - PrivateStoreMsgBuy
D3 - NetPing
DB - RecipeShopMsg
F8 - SSQInfo
FE1B - ExSendManorList


FirstKey


Формат:
10 00 // Длина
00 // Тип
XX // Неизвестно
XX XX XX XX // XorKey_FistPart
01 00 00 00
01 00 00 00

Др.названия: KeyPacket, XorKey


CharacterSelectionInfo


Формат:
XX XX // Длина
13 // Тип
XX XX XX XX // количество чаров
[начало повторяющегося блока]
XX XX ... 00 00 // Name (Unicode строка)
XX XX XX XX // Char ID
XX XX ... 00 00 // Login (Unicode строка)
XX XX XX XX // Session ID
XX XX XX XX // Clan ID
00 00 00 00
XX XX XX XX // Sex
XX XX XX XX // Race
XX XX XX XX // BaseClass ID
01 00 00 00
XX XX XX XX // X
XX XX XX XX // Y
XX XX XX XX // Z
XX XX XX XX XX XX XX XX // HP (вещественный тип - Double)
XX XX XX XX XX XX XX XX // MP (вещественный тип - Double)
XX XX XX XX // SP
XX XX XX XX // EXP
XX XX XX XX // lvl
XX XX XX XX // Karma
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
XX XX XX XX // ItemObjectID Under
XX XX XX XX // ItemObjectID REar
XX XX XX XX // ItemObjectID LEar
XX XX XX XX // ItemObjectID Neck
XX XX XX XX // ItemObjectID RFinger
XX XX XX XX // ItemObjectID LFinger
XX XX XX XX // ItemObjectID Head
XX XX XX XX // ItemObjectID RHand
XX XX XX XX // ItemObjectID LHand
XX XX XX XX // ItemObjectID Gloves
XX XX XX XX // ItemObjectID Chest
XX XX XX XX // ItemObjectID Legs
XX XX XX XX // ItemObjectID Feet
XX XX XX XX // ItemObjectID Back
XX XX XX XX // ItemObjectID LRHand
XX XX XX XX // ItemObjectID Hair
XX XX XX XX // ItemID Under
XX XX XX XX // ItemID REar
XX XX XX XX // ItemID LEar
XX XX XX XX // ItemID Neck
XX XX XX XX // ItemID RFinger
XX XX XX XX // ItemID LFinger
XX XX XX XX // ItemID Head
XX XX XX XX // ItemID RHand
XX XX XX XX // ItemID LHand
XX XX XX XX // ItemID Gloves
XX XX XX XX // ItemID Chest
XX XX XX XX // ItemID Legs
XX XX XX XX // ItemID Feet
XX XX XX XX // ItemID Back
XX XX XX XX // ItemID LRHand
XX XX XX XX // ItemID Hair
XX XX XX XX // HairStyle
XX XX XX XX // HairColor
XX XX XX XX // Face
XX XX XX XX XX XX XX XX // MaxHP (вещественный тип - Double)
XX XX XX XX XX XX XX XX // MaxMP (вещественный тип - Double)
XX XX XX XX // Delete (количество секунд до удаления)
XX XX XX XX // Class ID
XX XX XX XX // Last Used? (for auto-select char)
XX // Enchant Effect (на сколько заточенна пушка)
[конец повторяющегося блока]

Др.названия: CharSelectInfo


SSQInfo


Формат:
05 00 // Длина
F8 // Тип
XX XX // кто победил в Seven Signs:
258: Dawn
257: Dusk
{ 256: None }

Др.названия: SignsSky


CharacterSelected


Формат:
XX XX // Длина
15 // Тип
XX XX ... 00 00 // CharName (Unicode строка)
XX XX XX XX // Char ID
XX XX ... 00 00 // { Title (Unicode строка) }
XX XX XX XX // Session ID
XX XX XX XX // Clan ID
00 00 00 00
XX XX XX XX // Sex
XX XX XX XX // Race
XX XX XX XX // { Class ID }
01 00 00 00
XX XX XX XX // X
XX XX XX XX // Y
XX XX XX XX // Z
XX XX XX XX XX XX XX XX // HP (вещественный тип - Double)
XX XX XX XX XX XX XX XX // MP (вещественный тип - Double)
XX XX XX XX // SP
XX XX XX XX // EXP
XX XX XX XX // lvl
XX XX XX XX // Karma
00 00 00 00
XX XX XX XX // STR
XX XX XX XX // DEX
XX XX XX XX // CON
XX XX XX XX // INT
XX XX XX XX // WIT
XX XX XX XX // MEN
[дальше идет муть какаято, в которой я так и не разобрался (зависит от ProtocolVersion)]
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00
XX XX 00 00 // { in-game time??? }
00 00 00 00
XX 00 00 00 // неизвестно
00 00 00 00
00 00 00 00
00 00 00 00
00 00 00 00

Др.названия: CharSelected


ExSendManorList


Формат:
XX XX // Длина
FE // Тип
1B 00 // Подтип
XX XX XX XX // количество территорий, где можно манорить
[начало повторяющегося блока]
XX XX XX XX // номер
XX XX ... 00 00 // имя территории (Unicode строка)
[конец повторяющегося блока]


QuestList


!!! этот пакет не доделан!!!

Формат:
XX XX // Длина
80 // Тип
XX XX // Количество незавершенных квестов
[начало повторяющегося блока 1]
XX XX XX XX // Quest ID
XX XX XX XX // Stage of quest progress
[конец повторяющегося блока 1]
XX XX // {Количество какихто итемов}
[начало повторяющегося блока 2]
XX XX XX XX // dropItemObjID
XX XX XX XX // dropItemID
XX XX XX XX // dropItemCount
XX XX XX XX // неизвестно
[конец повторяющегося блока 2]


!!! этот пакет не доделан!!!


NetPing


Формат:
07 00 // Длина
D3 // Тип
XX XX XX XX // {ID пинга}


NewCharacterSuccess


Формат:
XX XX // Длина
17 // Тип
XX XX XX XX // Количество базовых классов в игре
[начало повторяющегося блока]
XX XX XX XX // расса
XX XX XX XX // класс
46 00 00 00
XX XX XX XX // STR
0a 00 00 00
46 00 00 00
XX XX XX XX // DEX
0a 00 00 00
46 00 00 00
XX XX XX XX // CON
0a 00 00 00
46 00 00 00
XX XX XX XX // INT
0a 00 00 00
46 00 00 00
XX XX XX XX // WIT
0a 00 00 00
46 00 00 00
XX XX XX XX // MEN
0a 00 00 00
[конец повторяющегося блока]

Др.названия: CharTemplates


CharacterCreateSuccess


Формат:
07 00 // Длина
19 // Тип
01 00 00 00

Др.названия: CharCreateOk


CharacterCreateFail


Формат:
07 00 // Длина
1A // Тип
XX XX XX XX // Причина: 0x02 - Name already exists.

Др.названия: CharCreateFail


CharacterDeleteSuccess


Формат:
03 00 // Длина
23 // Тип

Др.названия: CharDeleteOk


CharacterDeleteFail


Формат:
07 00 // Длина
24 // Тип
XX XX XX XX // Причина

Др.названия: CharDeleteFail


UserInfo


!!! этот пакет не доделан!!!

Формат:
XX XX // Длина
04 // Тип
XX XX XX XX // X
XX XX XX XX // Y
XX XX XX XX // Z
00 00 00 00
XX XX XX XX // ObjectId
XX XX ... 00 00 // Name (Unicode строка)
XX XX XX XX // Race
XX XX XX XX // Sex
XX XX XX XX // ClassId
XX XX XX XX // lvl
XX XX XX XX // Exp
XX XX XX XX // STR
XX XX XX XX // DEX
XX XX XX XX // CON
XX XX XX XX // INT
XX XX XX XX // WIT
XX XX XX XX // MEN
XX XX XX XX // MaxHP
XX XX XX XX // CurrentHP
XX XX XX XX // MaxMP
XX XX XX XX // CurrentMP
XX XX XX XX // SP
XX XX XX XX // CurrentLoad
XX XX XX XX // MaxLoad
28 00 00 00
XX XX XX XX // ItemObjectID Under
XX XX XX XX // ItemObjectID REar
XX XX XX XX // ItemObjectID LEar
XX XX XX XX // ItemObjectID Neck
XX XX XX XX // ItemObjectID RFinger
XX XX XX XX // ItemObjectID LFinger
XX XX XX XX // ItemObjectID Head
XX XX XX XX // ItemObjectID RHand
XX XX XX XX // ItemObjectID LHand
XX XX XX XX // ItemObjectID Gloves
XX XX XX XX // ItemObjectID Chest
XX XX XX XX // ItemObjectID Legs
XX XX XX XX // ItemObjectID Feet
XX XX XX XX // ItemObjectID Back
XX XX XX XX // ItemObjectID LRHand
XX XX XX XX // ItemObjectID Hair
XX XX XX XX // ItemID Under
XX XX XX XX // ItemID REar
XX XX XX XX // ItemID LEar
XX XX XX XX // ItemID Neck
XX XX XX XX // ItemID RFinger
XX XX XX XX // ItemID LFinger
XX XX XX XX // ItemID Head
XX XX XX XX // ItemID RHand
XX XX XX XX // ItemID LHand
XX XX XX XX // ItemID Gloves
XX XX XX XX // ItemID Chest
XX XX XX XX // ItemID Legs
XX XX XX XX // ItemID Feet
XX XX XX XX // ItemID Back
XX XX XX XX // ItemID LRHand
XX XX XX XX // ItemID Hair
XX XX XX XX // P.Atk
XX XX XX XX // P.Atk Speed
XX XX XX XX // P.Def
XX XX XX XX // EvasionRate
XX XX XX XX // Accuracy
XX XX XX XX // CriticalHit
XX XX XX XX // M.Atk
XX XX XX XX // Casting Speed
XX XX XX XX // P.Atk Speed
XX XX XX XX // M.Def
XX XX XX XX // Чар в режиме PvP?
XX XX XX XX // Karma
[дальше идет муть, в которой я пока не разобрался]
?? ?? ... ?? ??

!!! этот пакет не доделан!!!


Say2


Формат:
XX XX // Длина
4A // Тип
XX XX XX XX // Object Id того чара, от кого это сообщение
XX XX XX XX // Тип сообщения
XX XX ... 00 00 // Имя чара, от кого это сообщение (Unicode строка)
XX XX ... 00 00 // Само сообщение (Unicode строка)

Тип сообщения: 0x00 - General
0x01 - Shout
0x02 - Whisper
0x03 - Party
0x04 - Clan
0x08 - Trade
0x09 - Alliance
0x0A - Announcement

Др.названия: CreatureSay


NpcInfo


!!! этот пакет не доделан!!!

Формат:
XX XX // Длина
16 // Тип
XX XX XX XX // Object Id
XX XX XX XX // NpcTypeId (NpcID + 1000000)
XX XX XX XX // Можно ли атаковать этого NPC?
XX XX XX XX // X
XX XX XX XX // Y
XX XX XX XX // Z
XX XX XX XX // Heading (угол относительно вида сверху, перевод_в_градусы=Heading/65536*360)
[дальше идет муть, в которой я пока не разобрался]
?? ?? ... ?? ??

!!! этот пакет не доделан!!!


MoveToLocation


Формат:
1F 00 // Длина
01 // Тип
XX XX XX XX // Object Id
XX XX XX XX // DestX
XX XX XX XX // DestY
XX XX XX XX // DestZ
XX XX XX XX // CurX
XX XX XX XX // CurY
XX XX XX XX // CurZ

Замечание: Dest - в какую точку движется объект, Cur - текущее положение объекта
Обратите внимание, что клиент сам определяет положение объекта пока тот движется между этими двумя точками.
(надеюсь все помнят: Расстояние = Скорость * Время)


CharInfo


!!! этот пакет не доделан!!!

Формат:
XX XX // Длина
03 // Тип
XX XX XX XX // X
XX XX XX XX // Y
XX XX XX XX // Z
XX XX XX XX // Heading (угол относительно вида сверху, перевод_в_градусы=Heading/65536*360)
XX XX XX XX // ObjectID
XX XX ... 00 00 // Name (Unicode строка)
XX XX XX XX // Race
XX XX XX XX // Sex
XX XX XX XX // Class ID

XX XX XX XX //
XX XX XX XX //



[дальше идет муть, в которой я пока не разобрался]
?? ?? ... ?? ??

!!! этот пакет не доделан!!!


DeleteObject


Формат:
0B 00 // Длина
12 // Тип
XX XX XX XX // Object Id
00 00 00 00


SpawnItem


Формат:
23 00 // Длина
0B // Тип
XX XX XX XX // Object ID
XX XX XX XX // Item ID
XX XX XX XX // X
XX XX XX XX // Y
XX XX XX XX // Z
XX XX XX XX // Stackable
XX XX XX XX // Count
00 00 00 00


ItemList


Формат:
XX XX // Длина
1B // Тип
XX XX // ShowWindow (Надо открыть окно инвентаря?)
XX XX // ItemCount
[начало повторяющегося блока]
XX XX // ItemType1
XX XX XX XX // ObjectID
XX XX XX XX // ItemID
XX XX XX XX // Count
XX XX // ItemType2
XX XX // ???
XX XX // isEquipped (1-да, 0-нет)
XX XX XX XX // BodyPart (параметр бесполезен - не различает положение R/L бижи)
XX XX // EnchantLevel
XX XX // ???
[конец повторяющегося блока]

ItemType1: 0-Weapon/Earring/Ring/Necklace
1-Helmet/Chest/Legs/Boots/Gloves
2-Shield
4-Item/QuestItem/Adena

ItemType2: 0-Weapon
1-Helmet/Chest/Legs/Boots/Gloves/Shield
2-Earring/Ring/Necklace
3-QuestItem
4-Adena
5-Item


DropItem


Формат:
27 00 // Длина
0C // Тип
XX XX XX XX // Object ID того, кто дропнул предмет (игрок/Npc)
XX XX XX XX // Object ID предмета
XX XX XX XX // Item ID
XX XX XX XX // X
XX XX XX XX // Y
XX XX XX XX // Z
XX XX XX XX // Stackable
XX XX XX XX // Count
00 00 00 00


PrivateStoreMsgBuy


Формат:
XX XX // Длина
B9 // Тип
XX XX XX XX // ObjectID торговца
XX XX ... 00 00 // StoreMsg (Unicode строка)

Др.названия: PrivateStoreBuyMsg


PrivateStoreMsg


Формат:
XX XX // Длина
9C // Тип
XX XX XX XX // ObjectID торговца
XX XX ... 00 00 // StoreMsg (Unicode строка)

Др.названия: PrivateStoreMsgSell


RecipeShopMsg


Формат:
XX XX // Длина
DB // Тип
XX XX XX XX // ObjectID торговца
XX XX ... 00 00 // StoreMsg (Unicode строка)


InventoryUpdate


Формат:
XX XX // Длина
27 // Тип
XX XX // ItemCount
[начало повторяющегося блока]
XX XX // Update type (1-add, 2-modify, 3-remove)
XX XX // ItemType1
XX XX XX XX // ObjectID
XX XX XX XX // ItemID
XX XX XX XX // Count
XX XX // ItemType2
XX XX // ???
XX XX // isEquipped (1-да, 0-нет)
XX XX XX XX // BodyPart (параметр бесполезен - не различает положение R/L бижи)
XX XX // EnchantLevel
XX XX // ???
[конец повторяющегося блока]

Замечание: ItemType1, ItemType2 - аналогично ItemList












Сервер, на котором проводились исследования:
1) ПТС C4 сервер
2) RSA - нету
3) GG - нету (убит)
4) антиботы - никаких
5) ProtocolVersion=656
6) данные которые идут в пакете ProtocolVersion указанны тут.
7) Protocol=30810 (в пакете Init)

Все, что находится в фигурных скобках {} - это те данные, в которых я частично или полностью не уверен! Осторожнее!


Взято тут:
[Ссылки могут видеть только зарегистрированные пользователи. ]


Спасибку, чтоль проставьте))
________________

HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH HHHHHHHHHHHHHHHH
Лайк забыл - косарь должен!

Последний раз редактировалось ☻Cryker☻; 08.04.2012 в 21:10.
  Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
magozavr (08.04.2012), VitRusPro (19.04.2012)
Старый 14.04.2012, 14:06   #2
 Разведчик
Аватар для -=Vancouver=-
 
-=Vancouver=- неизвестен в этих краях-=Vancouver=- неизвестен в этих краях-=Vancouver=- неизвестен в этих краях-=Vancouver=- неизвестен в этих краях
Регистрация: 14.04.2012
Сообщений: 0
Популярность: -315
Сказал(а) спасибо: 0
Поблагодарили 7 раз(а) в 7 сообщениях
Отправить сообщение для -=Vancouver=- с помощью Skype™
 
По умолчанию Re: Общие знания про пакеты и их шифрацию

)))
  Ответить с цитированием
Старый 05.05.2012, 04:01   #3
 Разведчик
Аватар для t3b4
 
t3b4 никому не известный тип
Регистрация: 03.05.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Общие знания про пакеты и их шифрацию

а почему когда я отправляю на сервере пакет New Character с измененными статами, у меня создается стандартный чар?
  Ответить с цитированием
Старый 02.06.2012, 12:35   #4
 Разведчик
Аватар для DrunkenMaster
 
DrunkenMaster никому не известный тип
Регистрация: 04.04.2012
Сообщений: 20
Популярность: 16
Сказал(а) спасибо: 146
Поблагодарили 30 раз(а) в 12 сообщениях
 
По умолчанию Re: Общие знания про пакеты и их шифрацию

Хочу добавить что многие сервера шифруют трафик ето можно обойти , написав под определенный сервер newxor.dll
  Ответить с цитированием
Старый 01.07.2012, 18:22   #5
 Разведчик
Аватар для ofrap
 
ofrap никому не известный тип
Регистрация: 30.06.2012
Сообщений: 0
Популярность: 10
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
 
По умолчанию Re: Общие знания про пакеты и их шифрацию

Не работает ?((
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
Цитата:
[Ссылки могут видеть только зарегистрированные пользователи. ]

  Ответить с цитированием
Ответ


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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Услуги] Я ухожу с ДО, короче передам знания по взлому игры норм. людям... qwertiop Dark Orbit 8 21.11.2011 15:08
[Статья] Как пользоватся Cheat Engine (Базовые знания) .:InSiDe:. Скрипты и прочий софт для Point Blank 0 07.04.2011 12:28

Заявление об ответственности / Список мошенников

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

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net