Ну чтож. Почти победа.
Остались незначительные детали, но тайна второго байта разгадана.
И так. World и proxy пакеты у нас имеют вид
DD 01 XX XX
0xDD - пока я не нашёл где оно используется. Точнее пока я возился со следующим байтом на стартовых пакетах коннекта это значение никем не использовалось. Надо смотреть в исходящих пакетах кто его пишет.
01 - Частично MHard был прав. Это фрагмент опкода. Он определяет глобальный тип пакета.
0x01 - W2C пакеты
0x02 - Proxy пакеты
Дальше веселее. Значения больше означают что в пакете есть сжатие. К сожалению все вызовы виртуальные и не имея в отладке такого пакета разобраться проблематично. там вообще много мутного происходит.
Ну и дальше опкод.
Вобщем диспатчится всё тут (осторожно, код не причёсан), все совпадения считать случайными. Код из crynetwork.dll по базе 0x39501000.
.text:3952E829 CompressByteDispath proc near ; CODE XREF: ClientNub__dispath+62p
.text:3952E829 mov eax, offset sub_39548249
.text:3952E82E call set_SEH
.text:3952E833 mov eax, 50014h
.text:3952E838 call sub_39545C30
.text:3952E83D push ebx
.text:3952E83E mov ebx, [ebp+8]
.text:3952E841 push esi
.text:3952E842 push edi
.text:3952E843 mov esi, edx
.text:3952E845 mov edi, ecx
.text:3952E847 mov ecx, [esi+14h]
.text:3952E84A test ecx, ecx
.text:3952E84C jz loc_3952E96D
.text:3952E852 movzx eax, byte ptr [ebx]
.text:3952E855 mov al, ds:byte_3956A7F0[eax] ;забыл посмотреть что там за таблица...
.text:3952E85B mov [ebp+0Bh], al ;0x01 и 0x02 не меняются
.text:3952E85E lea eax, [ebp-1Ch]
.text:3952E861 call sub_3951F44A
.text:3952E866 and dword ptr [ebp-4], 0
.text:3952E86A movzx eax, byte ptr [ebp+0Bh] ;отсюда идёт набор ifов на тип пакета.
.text:3952E86E dec eax
.text:3952E86F jz worldpck
.text:3952E875 dec eax
.text:3952E876 jz proxypck
.text:3952E87C dec eax
.text:3952E87D jz short __3
.text:3952E87F dec eax
.text:3952E880 jnz __4 ; >4
.text:3952E886 mov dword ptr [ebp+8], 40000h ; ==4
.text:3952E88D cmp edi, 3
.text:3952E890 jnb short loc_3952E89A
.text:3952E892 push eax
.text:3952E893 push offset aDecompressMpSi ; "decompress-mp-size"
.text:3952E898 jmp short decompress
.text:3952E89A ; ---------------------------------------------------------------------------
.text:3952E89A
.text:3952E89A loc_3952E89A: ; CODE XREF: CompressByteDispath+67j
.text:3952E89A movzx eax, word ptr [ebx+1]
.text:3952E89E mov [ebp-10h], eax
.text:3952E8A1 lea eax, [ebp+8]
.text:3952E8A4 push eax
.text:3952E8A5 lea eax, [ebp-50020h]
.text:3952E8AB push eax
.text:3952E8AC add ebx, 3
.text:3952E8AF add edi, 0FFFFFFFDh
.text:3952E8B2 push ebx
.text:3952E8B3 call sub_3952DB09
.text:3952E8B8 add esp, 0Ch
.text:3952E8BB test al, al
.text:3952E8BD jnz short loc_3952E8C8
.text:3952E8BF push 0
.text:3952E8C1 push offset aDecompressMpBo ; "decompress-mp-body"
.text:3952E8C6 jmp short decompress
.text:3952E8C8 ; ---------------------------------------------------------------------------
.text:3952E8C8
.text:3952E8C8 loc_3952E8C8: ; CODE XREF: CompressByteDispath+94j
.text:3952E8C8 push dword ptr [ebp+8]
.text:3952E8CB mov edi, [esi+14h]
.text:3952E8CE push dword ptr [ebp-10h]
.text:3952E8D1 lea eax, [ebp-50020h]
.text:3952E8D7 call sub_3952AF74
.text:3952E8DC jmp short __4
.text:3952E8DE ; ---------------------------------------------------------------------------
.text:3952E8DE
.text:3952E8DE __3: ; CODE XREF: CompressByteDispath+54j
.text:3952E8DE mov ecx, [esi+10h]
.text:3952E8E1 lea eax, [ebp+8]
.text:3952E8E4 push eax
.text:3952E8E5 lea eax, [ebp-10020h]
.text:3952E8EB push eax
.text:3952E8EC inc ebx
.text:3952E8ED lea eax, [edi-1]
.text:3952E8F0 push ebx
.text:3952E8F1 mov dword ptr [ebp+8], 0FFFEh
.text:3952E8F8 call sub_3952DB5B
.text:3952E8FD add esp, 0Ch
.text:3952E900 test al, al
.text:3952E902 jnz short loc_3952E916
.text:3952E904 push 0
.text:3952E906 push offset aDecompressMv ; "decompress-mv"
.text:3952E90B
.text:3952E90B decompress: ; CODE XREF: CompressByteDispath+6Fj
.text:3952E90B ; CompressByteDispath+9Dj
.text:3952E90B mov eax, [esi]
.text:3952E90D push 0Dh
.text:3952E90F mov ecx, esi
.text:3952E911 call dword ptr [eax+34h]
.text:3952E914 jmp short __4
.text:3952E916 ; ---------------------------------------------------------------------------
.text:3952E916
.text:3952E916 loc_3952E916: ; CODE XREF: CompressByteDispath+D9j
.text:3952E916 mov eax, [esi+14h]
.text:3952E919 mov ecx, [eax+2Ch]
.text:3952E91C mov eax, [ecx]
.text:3952E91E call dword ptr [eax+20h]
.text:3952E921 mov edx, [ebp+8]
.text:3952E924 lea eax, [ebp-10020h]
.text:3952E92A jmp short loc_3952E953
.text:3952E92C ; ---------------------------------------------------------------------------
.text:3952E92C
.text:3952E92C proxypck: ; CODE XREF: CompressByteDispath+4Dj
.text:3952E92C push dword ptr [esi+14h]
.text:3952E92F lea ecx, [edi-1]
.text:3952E932 lea eax, [ebx+1]
.text:3952E935 call Proxy_pck_dispath ;функция диспетчеризует прокси пакеты
.text:3952E93A jmp short __4
.text:3952E93C ; ---------------------------------------------------------------------------
.text:3952E93C
.text:3952E93C worldpck: ; CODE XREF: CompressByteDispath+46j
.text:3952E93C lea eax, [ebx+1]
.text:3952E93F movzx ecx, word ptr [eax]
.text:3952E942 test ecx, ecx ;не ноль после подключения
.text:3952E944 jnz short loc_3952E950
.text:3952E946 lea ecx, [edi-1]
.text:3952E949 call EnterWorldResponeDispath ;Обработка пакета W2C 0x00;
.text:3952E94E jmp short __4
.text:3952E950 ; ---------------------------------------------------------------------------
.text:3952E950
.text:3952E950 loc_3952E950: ; CODE XREF: CompressByteDispath+11Bj
.text:3952E950 lea edx, [edi-1]
.text:3952E953
.text:3952E953 loc_3952E953: ; CODE XREF: CompressByteDispath+101j
.text:3952E953 mov esi, [esi+14h]
.text:3952E956 call DispathW2C ; диспетчеризация W2C пакетов
.text:3952E95B
.text:3952E95B __4: ; CODE XREF: CompressByteDispath+57j
.text:3952E95B ; CompressByteDispath+B3j ...
.text:3952E95B or dword ptr [ebp-4], 0FFFFFFFFh
.text:3952E95F mov eax, [ebp-1Ch]
.text:3952E962 lea ecx, [ebp-18h]
.text:3952E965 and eax, 0FFFFFFFCh
.text:3952E968 push ecx
.text:3952E969 call dword ptr [eax+4]
.text:3952E96C pop ecx
.text:3952E96D
.text:3952E96D loc_3952E96D: ; CODE XREF: CompressByteDispath+23j
.text:3952E96D mov ecx, [ebp-0Ch]
.text:3952E970 pop edi
.text:3952E971 pop esi
.text:3952E972 mov large fs:0, ecx
.text:3952E979 pop ebx
.text:3952E97A leave
.text:3952E97B retn 4
.text:3952E97B CompressByteDispath endp
Code: ASM