Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
ArcheAge Опкоды
#11
MadHacker Написал:Пока не знаю. Я ещё не смотрел трафик. Я лазию по коду клиента и на глаза попались хендлеры пакетов.
Они хендлятся по списку. ID идут по порядку от нуля до количества пакетов в каждом из трёх хендлеров.
Три типа пакета. Пакеты авторизации 14 штук, пакеты UCC (эмблемы на плащах и подобные) 16 штук, пакеты игрового сервера 502 штуки.
Соответственно ID от 0 до 0x01F5. Остальные байты что-то другое. Тут уже зависит от того, сколько соединений держит клиент. Если одно, то скорее всего один из этих байтов это тип пакета.
Я пока не могу посмотреть разбор самого пакета, надо отлаживать, а под восьмёркой обходчик темиды не работает. Обновил называется комп на свою голову Smile

в пакетах Client <-> LS 2 байта опкод
в пакетах Client <-> GS 4 байта опкод
Ответ
#12
С темидой я разобрался, надо было просто драйвер idastealth пересобрать под восьмёрку, так что скоро разберусь.

AuthToClient

StreamToClient

ServerToClient

С обратными пакетами та же история, не считая того, что их надо собирать по всему коду. Тип пакетов это действительно int, но не используется значение крупнее двух байт. Более того в хендлерах стоят проверки на превышение значения.
Но я ещё не добрался до уровня который поближе к сети. Возможно там эти два байта дополнительно кодируются или добиваются чем то до 4. Посмотрю.
Ответ
#13
В списке:
0x039 CharacterListPacket

Отправляю:
0x003901DD

Т. е. 01DD - это какое-то дополнение. Вроде бы все серверные пакеты начинаются на DD. Но вместо 01 где-то встречается 02.
hLaPEx, Evermore, hAuthD, L2on, ...
Ответ
#14
01 и 02 это типы пакетов скорее всего. Чуть позже выложу список. DD пока не представляю что такое. Не встречал.

Добавлено через 21 минуту
Собственно вот. Типы пакетов:
0x00 X2ClientToWorld
0x01 ClientToAuth
0x02 X2WorldToClient
0x09 AuthToClient
0x15 ClientToStream
0x16 StreamToClient
Ответ
#15
MadHacker Написал:01 и 02 это типы пакетов скорее всего. Чуть позже выложу список. DD пока не представляю что такое. Не встречал.

Добавлено через 21 минуту
Собственно вот. Типы пакетов:
0x00 X2ClientToWorld
0x01 ClientToAuth
0x02 X2WorldToClient
0x09 AuthToClient
0x15 ClientToStream
0x16 StreamToClient

Я тебя хочу.
Ответ
#16
MadHacker Написал:01 и 02 это типы пакетов скорее всего. Чуть позже выложу список. DD пока не представляю что такое. Не встречал.

Добавлено через 21 минуту
Собственно вот. Типы пакетов:
0x00 X2ClientToWorld
0x01 ClientToAuth
0x02 X2WorldToClient
0x09 AuthToClient
0x15 ClientToStream
0x16 StreamToClient

Оч интересно но пока неукладывается.

Пример

DD 01 XX XX
DD 02 XX XX

Оба пакета идут от gs к client

Судя по вашей таблице
01 от client к auth серверу
02 от gs к client
Ответ
#17
Я посмотрел код. Предположение было неверным.
Опкод это ровно 2 байта. Дальше данные пакета. Класс пакета - 3 виртуальных метода. Из нулевого я достал подтипы, но так и не увидел чтоб они использовались. Скорее всего для какой то внутренней организации по очередям или может приоритеты. Первый метод у всех пакетов одинаковый. Запись двух байтов опкода.
Второй метод идёт сразу за первым - данные пакета.
Например 0x116 CSRestrictCheck при входе в мир.
Пишет в первом метода 2 байта опкода. Затем во втором методе пишет сразу 4 байта, помеченые как ни странно тоже как "type". После чего пишет 1 байт "restrictCode".
Код:
Stack[00001544]:0017E052 db  16h
Stack[00001544]:0017E053 db    1
Stack[00001544]:0017E054 db    1
Stack[00001544]:0017E055 db    0
Stack[00001544]:0017E056 db    0
Stack[00001544]:0017E057 db    0
Stack[00001544]:0017E058 db    1

Вызовы идут просто подряд. Неоткуда там ещё двум байтам опкода взяться.
Код:
crynetwork.dll:063EB10D lea     ecx, [ebp-10h]
crynetwork.dll:063EB110 push    ecx
crynetwork.dll:063EB111 mov     ecx, esi
crynetwork.dll:063EB113 call    dword ptr [eax+4] ;первый виртуальный метод - запись опкода
crynetwork.dll:063EB116 mov     eax, [esi]
crynetwork.dll:063EB118 lea     ecx, [ebp-10h]
crynetwork.dll:063EB11B push    ecx
crynetwork.dll:063EB11C mov     ecx, esi
crynetwork.dll:063EB11E call    dword ptr [eax+8] ;второй виртуальный метод - запись данных пакета.

Перед этим пакетом пролетают пару игровых пакетов с пустым вторым методом. Так что разница во втором и третьем байте должна встречаться достаточно часто. По крайней мере для C2S пакетов.
Но я не думаю что S2C пакеты сделаны по другому принципу. Потому что вот так хендлятся клиенские пакеты:
Код:
.text:391B071C cmp     esi, 1F6h             ;Проверка опкода на верхний диапазон
.text:391B0722 jge     short loc_391B0785
.text:391B0724 mov     ecx, [edi+esi*4+4] ;Вытаскивает пакет из таблицы
.text:391B0728 test    ecx, ecx                ;Проверяет на существование (в таблице встречаются нули)
.text:391B072A jz      short loc_391B0785
Фрагмент таблицы:
Код:
.rdata:397D7630 off_397D7630 dd offset const PacketHandler<ClientPlayer,ServerToClientPacketType,502>::`vftable'
.rdata:397D7634 off_397D7634 dd 0        ;Ссылки на функторы
.rdata:397D7638 dd offset off_39840968
.rdata:397D763C dd offset off_39841928
.rdata:397D7640 dd offset off_398428E8
.rdata:397D7644 dd offset off_398438A8
.rdata:397D7648 dd offset off_39844868
.rdata:397D764C dd offset off_39845828
.rdata:397D7650 dd offset off_39850518
.rdata:397D7654 dd 0
.rdata:397D7658 dd offset off_398467F8
.rdata:397D765C dd offset off_398477B8
Код:
.rdata:39840968 off_39840968 dd offset const PacketFunctor<ClientPlayer,ServerToClientPacketType,SCReconnectAuthPacket>::`vftable'
.rdata:3984096C off_3984096C dd offset sub_3915B450     ; вот это хз что за метод.
За каждым функтором закреплён метод в таблице, но что делает непонятно и вроде мы в него вообще не попадаем. Разбор пакетов в виртуальных методах функтора.
Вобщем не знаю. Надо трафик посмотреть. Но не похоже, чтоб что-то сильно менялось в дальнейших вызовах.

UPD... Сейчас смотрю на порядок байт на стеке. Физически в сетевом пакете неизвестные байты до опкода или после? То, что я запостил выше это уже сырой байтовый буфер. По идее при отправке его в сеть байты уже не должны меняться местами... Тогда получается, что что-то пишется до опкода и это уже интереснее.
Ответ
#18
ок. привожу пример 3 разных Серверных пакета :

XX XX DD 01 00 00 ............................

XX XX DD 02 00 00 ............................

XX XX DD 01 EC 01 ............................

где XX XX = длинна пакета
....... полезные данные


теперь отбрось анализ в отладчике, и положись на логику где здесь опкод ?
Ответ
#19
Я до этого разбирал протокол PerfectWorld. Могу точно сказать одно - логике здесь не место.
Эти байты могут оказаться чем угодно. ID сервера. Подтип пакета. Приоритет. Мусор. Ключ сессии. Маркер сжатия...
Возможно для разработки сервера вам достаточно считать это опкодом. Но я занимаюсь клиентской частью и от этих мелочей зависит на сколько быстро мой софт прихлопнет протектор. По этому буду разбираться дальше.

Добавлено через 1 час 28 минут
Чем дальше в код... Ещё пачка пакетов
0x10 X2:TongueroxyPacket
Не делятся по направлениям на клиентские и серверные.
Код:
0x000    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::ChangeStatePacket>
0x001     NoPck
0x002    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::FlushMsgsPacket>
0x003     NoPck
0x004    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::UpdatePhysicsTimePacket>
0x005    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::BeginUpdateObjPacket>
0x006    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::EndUpdateObjPacket>
0x007    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::BeginBindObjPacket>
0x008    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::EndBindObjPacket>
0x009    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::UnbindPredictedObjPacket>
0x00A    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::RemoveStaticObjPacket>
0x00B    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::VoiceDataPacket>
0x00C    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::UpdateAspectPacket>
0x00D    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::SetAspectProfilePacket>
0x00E    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::PartialAspectPacket>
0x00F    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::SetGameTypePacket>
0x010    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::ChangeCVarPacket>
0x011    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::EntityClassRegistrationPacket>
0x012    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::PingPacket>
0x013    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::PongPacket>
0x014    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::PacketSeqChange>
0x015     NoPck
0x016    PacketFunctor<NetConnection,enum  X2::ProxyPacketType,X2::FastPongPacket>
Ответ
#20
что вы тут изобретаете велосипед ) оп код 2 байта имеет.
0x000002 где 02 означает тип пакета это x2 тип пакета
0x000201 где 01 тип пакета не пакованый серверный
если в конце 03 или выше это значит пакованый и там еще 1 байт ид сессий паходу.
это только для гс.
Для стрим или логин протокола там сразу 2 байта и нету разделение и нету сессий если я не ошибаюсь.
Ответ


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Исследование базы ArcheAge MadHacker 138 78,015 11-09-2023, 05:17 PM
Последний пост: ShannonAAEMU
  Archeage client 24.04.13 DancerS 6 5,921 07-03-2022, 08:08 AM
Последний пост: anthemis
  Эмулятор ArcheAge kronk 1 3,016 06-04-2021, 07:35 PM
Последний пост: anthemis
  Archeage 1.2 РУ клиент anthemis 1 2,712 04-29-2021, 08:52 PM
Последний пост: anthemis
  Собираю команду для создания сервера Archeage HaMeRoN 60 37,662 03-21-2021, 10:05 AM
Последний пост: anthemis
  Будем заниматься ArcheAge? Smiler 105 40,034 02-15-2021, 06:08 AM
Последний пост: anthemis
  [WTB] Archeage gamigo server files Sparkle 0 2,854 08-20-2020, 10:20 AM
Последний пост: Sparkle
  ArcheAge Pack Tool danonpw 9 19,743 09-11-2019, 09:56 AM
Последний пост: nikes
  archeage emu files Yanlongli 4 6,279 08-21-2018, 01:21 AM
Последний пост: JeyFrey
  Площадка продажи покупки игровых ценностей ArcheAge nbgr 0 3,091 08-18-2018, 10:35 PM
Последний пост: nbgr

Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)