22.08.2010, 09:42 | #1 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Раскопки 12803
Сегодня сидел и ковырялся в клиенте 12803
и нашел вот такое: но непонятно, то для чего столько функций для считывания int8 (2 шт), int16 (2 шт), int32 (4 шт), int64 (2 шт) Код:
//----- (007CF390) -------------------------------------------------------- int __thiscall GetInt8(int this, int a2) { int v2; // esi@1 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 526, (int)"IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 1) ) *(_BYTE *)a2 = *(_BYTE *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)++); return v2; } //----- (007CF3F0) -------------------------------------------------------- int __thiscall GetInt8_2(int this, int a2) { int v2; // esi@1 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 527, "IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 1) ) *(_BYTE *)a2 = *(_BYTE *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)++); return v2; } //----- (007CF450) -------------------------------------------------------- int __thiscall GetInt16(int this, int a2) { int v2; // esi@1 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 528, "IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 2) ) { *(_WORD *)a2 = *(_WORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)); *(_DWORD *)(v2 + 20) += 2; } return v2; } //----- (007CF4B0) -------------------------------------------------------- int __thiscall GetInt16_2(int this, int a2) { int v2; // esi@1 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 529, (int)"IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 2) ) { *(_WORD *)a2 = *(_WORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)); *(_DWORD *)(v2 + 20) += 2; } return v2; } //----- (007CF510) -------------------------------------------------------- int __thiscall GetInt32(int this, int a2) { int v2; // esi@1 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 530, "IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 4) ) { *(_DWORD *)a2 = *(_DWORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)); *(_DWORD *)(v2 + 20) += 4; } return v2; } //----- (007CF570) -------------------------------------------------------- int __thiscall GetInt32_2(int this, int a2) { int v2; // esi@1 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 531, "IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 4) ) { *(_DWORD *)a2 = *(_DWORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)); *(_DWORD *)(v2 + 20) += 4; } return v2; } //----- (007CF5D0) -------------------------------------------------------- int __thiscall GetInt32_3(int this, int a2) { int v2; // esi@1 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 533, "IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 4) ) { *(_DWORD *)a2 = *(_DWORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)); *(_DWORD *)(v2 + 20) += 4; } return v2; } //----- (007CF630) -------------------------------------------------------- int __thiscall GetInt32_4(int this, int a2) { int v2; // esi@1 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 534, "IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 4) ) { *(_DWORD *)a2 = *(_DWORD *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)); *(_DWORD *)(v2 + 20) += 4; } return v2; } //----- (007CF690) -------------------------------------------------------- int __thiscall GetInt64(int this, int a2) { int v2; // esi@1 int v3; // eax@4 int v4; // ecx@4 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 536, (int)"IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 8) ) { v3 = *(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8); v4 = *(_DWORD *)(v2 + 20); *(_DWORD *)a2 = *(_DWORD *)(v3 + v4); *(_DWORD *)(a2 + 4) = *(_DWORD *)(v3 + v4 + 4); *(_DWORD *)(v2 + 20) += 8; } return v2; } //----- (007CF700) -------------------------------------------------------- int __thiscall GetInt64_2(int this, int a2) { int v2; // esi@1 int v3; // eax@4 int v4; // ecx@4 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 537, "IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 8) ) { v3 = *(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8); v4 = *(_DWORD *)(v2 + 20); *(_DWORD *)a2 = *(_DWORD *)(v3 + v4); *(_DWORD *)(a2 + 4) = *(_DWORD *)(v3 + v4 + 4); *(_DWORD *)(v2 + 20) += 8; } return v2; } //----- (007CF770) -------------------------------------------------------- int __thiscall GetFloat(int this, int a2) { int v2; // esi@1 v2 = this; if ( *(_DWORD *)(this + 20) == -1 ) sub_7E0210(0x85100000u, (int)".\\CDataStore.cpp", 538, "IsFinal()", 0, 1u, 286331153); if ( sub_7CF210((void *)v2, *(_DWORD *)(v2 + 20), 4) ) { *(float *)a2 = *(float *)(*(_DWORD *)(v2 + 4) - *(_DWORD *)(v2 + 8) + *(_DWORD *)(v2 + 20)); *(_DWORD *)(v2 + 20) += 4; } return v2; } |
22.08.2010, 10:16 | #2 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
В Release Assertion Enabled билдах у них всегда больше чем 1 функция.
Из сорцов не особо понятно почему компилятор генерирует несколько методов, Возможно близард используют модифицированный код... datastore.cpp datastore.h Последний раз редактировалось TOM_RUS; 22.08.2010 в 17:40. |
Пользователь сказал cпасибо: | Konctantin (22.08.2010) |
22.08.2010, 10:46 | #3 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Темплейты?
|
22.08.2010, 13:00 | #4 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Вот это близы наворотили:
6 текстовых полей, но по снифам, я пока ничего не встречал, максимум 2 поля, или это на будущее... Код:
//----- (0055D000) -------------------------------------------------------- signed int __stdcall READ_SMSG_QUESTGIVER_OFFER_REWARD(int a1) { int v1; // ebx@1 int v2; // edi@1 unsigned int v3; // esi@1 int v4; // eax@5 int v5; // eax@7 int v6; // eax@9 double v7; // st7@9 char v9; // [sp+0h] [bp-18FCh]@1 char v10; // [sp+Ch] [bp-18F0h]@1 char v11; // [sp+BC4h] [bp-D38h]@1 char v12; // [sp+FC4h] [bp-938h]@1 char v13; // [sp+13C4h] [bp-538h]@1 char v14; // [sp+15C4h] [bp-338h]@11 char v15; // [sp+16D0h] [bp-22Ch]@1 char v16; // [sp+17D0h] [bp-12Ch]@1 int v17; // [sp+18D0h] [bp-2Ch]@1 int v18; // [sp+18D4h] [bp-28h]@1 int v19; // [sp+18D8h] [bp-24h]@1 int v20; // [sp+18DCh] [bp-20h]@1 int v21; // [sp+18E0h] [bp-1Ch]@1 __int64 v22; // [sp+18E4h] [bp-18h]@1 int v23; // [sp+18ECh] [bp-10h]@1 unsigned int v24; // [sp+18F0h] [bp-Ch]@1 char *v25; // [sp+18F4h] [bp-8h]@1 int v26; // [sp+18F8h] [bp-4h]@1 v2 = a1; GetInt64_2(&v22); GetInt32(&v17); GetString(v2, (int)&v13, 0x200u); GetString(v2, (int)&v10, 0xBB8u); GetString(v2, (int)&v12, 0x400u); GetString(v2, (int)&v15, 0x100u); GetString(v2, (int)&v11, 0x400u); GetString(v2, (int)&v16, 0x100u); GetInt32(&v20); GetInt32(&v21); GetInt8_2((char *)&a1 + 3); GetInt32(&v18); GetInt32(&v19); GetInt32(&v26); v1 = v26; _alloca_probe_16(v9); v3 = 0; v23 = v1; v25 = &v9; v24 = v1; if ( v1 > 0 ) { while ( 1 ) { if ( v3 >= v1 ) { v4 = sub_40EEE3(&off_C0463C); sub_7DE6E0(-2062548864, v4, -2, 1, 1, "index (0x%08X), array size (0x%08X)", v3); } GetInt32_2(&v25[8 * v3]); if ( v3 >= v24 ) { v5 = sub_40EEE3(&off_C0463C); sub_7DE6E0(-2062548864, v5, -2, 1, 1, "index (0x%08X), array size (0x%08X)", v3); } GetInt32(&v25[8 * v3++ + 4]); if ( (signed int)v3 >= v26 ) break; v1 = v24; } } v7 = sub_4964F0(v22, 8, (unsigned int)".\\Player_C.cpp"); if ( v6 ) PlayEmotes(v6, (int)&v23); ReadArrayBlock_QOR((int)&v14, v2); sub_8AD740(v22, 0i64, 3, &v10, v17, 0, 0, 0); // unk sub_8AF820(v7, (int)&v13, (int)&v14, BYTE3(a1), v19, v18); // unk sub_8AC950(v20, (int)&v12, (int)&v15, v21, (int)&v11, (int)&v16);//unk sub_7A5110(304, 0);// unk return 1; } void __usercall GetBloc_001(int a1<eax>, int a2<edi>) { int v2; // esi@1 v2 = a1; GetInt32(a1); GetIntArray(a2, v2 + 4, 6); GetIntArray(a2, v2 + 28, 6); GetIntArray(a2, v2 + 52, 6); GetInt32(v2 + 76); GetIntArray(a2, v2 + 80, 4); GetIntArray(a2, v2 + 96, 4); GetIntArray(a2, v2 + 112, 4); GetInt32(v2 + 128); GetInt32(v2 + 132); GetInt32(v2 + 136); GetInt32_2(a2, v2 + 140); GetFloat(a2, v2 + 144); GetInt32(v2 + 148); GetInt32(v2 + 152); GetInt32(v2 + 156); GetIntArray(a2, v2 + 160, 5); GetIntArray(a2, v2 + 180, 5); GetIntArray(a2, v2 + 200, 5); GetInt32(v2 + 220); GetInt32(v2 + 224); GetIntArray(a2, v2 + 228, 4); GetIntArray(a2, v2 + 244, 4); GetInt32(v2 + 260); GetInt32(v2 + 264); } |
22.08.2010, 13:30 | #5 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
имена функций и переменных это откуда ?
в бета-версиях клиента включена отладочная информация в exe? |
22.08.2010, 13:42 | #6 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Вычислял опытним путем.
Смотрел на базу, что выкладывал TOM_RUS http://ru-mangos.ru/showthread.php?t=1473 искал совпадения и потихоньку (потратил на это пару часов сегодня) Нашел с десяток обработчиков пакетов, теперь пишу для них парсеры. ЗЫ. Но вот обработчик А9 не могу найти.. ЗЫЫ. Вот если интересно, то структура пакета SMSG_QUESTGIVER_REQUEST_ITEMS Код:
RequestItem ri = new RequestItem(); ri.NpcGuid = gr.ReadGuid(); ri.QuestEntry = gr.ReadUInt32(); ri.Title = gr.ReadCString(); ri.TextRequestItem = gr.ReadCString(); ri.unk1 = gr.ReadUInt32(); ri.Emote = gr.ReadUInt32(); ri.Autofinish = gr.ReadUInt32(); ri.QuestFlag = gr.ReadUInt32(); ri.unk2 = gr.ReadUInt32(); ri.RewOrReqMoney = gr.ReadUInt32(); ri.ReqItemsCount = gr.ReadUInt32(); ri.reqItemList = new RequestItem.ReqItemOR[6]; for (int i = 0; i < ri.ReqItemsCount; ++i) { ri.reqItemList[i].ReqItemId = gr.ReadUInt32(); ri.reqItemList[i].ReqItemCount = gr.ReadUInt32(); ri.reqItemList[i].DisplayInfoID = gr.ReadUInt32(); } ri.UnkFieldCount = gr.ReadUInt32(); ri.unkFieldList = new RequestItem.UnkField[4]; for (int i = 0; i < ri.UnkFieldCount; ++i) { ri.unkFieldList[i].unkField1 = gr.ReadUInt32(); ri.unkFieldList[i].unkField2 = gr.ReadUInt32(); } ri.unk3 = gr.ReadUInt32(); ri.unk4 = gr.ReadUInt32(); ri.unk5 = gr.ReadUInt32(); ri.unk6 = gr.ReadUInt32(); ri.unk7 = gr.ReadUInt32(); Последний раз редактировалось Konctantin; 22.08.2010 в 14:20. |
23.08.2010, 18:11 | #7 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Код:
.text:00499857 mov dword ptr [ecx+1AD4h], offset Handle_SMSG_UPDATE_OBJECT .text:00499861 mov dword ptr [ecx+3AD4h], 0 .text:0049986B mov eax, [eax+0E0h] .text:00499871 mov dword ptr [eax+1D10h], offset Handle_SMSG_DESTROY_OBJECT .text:0049987B mov dword ptr [eax+3D10h], 0 |
Пользователь сказал cпасибо: | Konctantin (23.08.2010) |
23.08.2010, 18:27 | #8 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Спасибо...
И еще есть вопрос... При дизасамблировании нового бинарника, все наработки теряются, есть ли какой способ переносить имена переменных и функций? |
24.08.2010, 09:56 | #9 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
я помню давно был такой плагин к иде который как раз предназначался для того что бы переносить в новые билды екзешника все нарытое в предыдущих версиях. Его разрабатывал какой-то пользователь иды, и обсуждение шло на форуме самой датарескью. Не помню как он назывался, так же не в курсе какова его судьба сейчас.
|
25.08.2010, 12:29 | #10 |
MaNGOS Dev
Регистрация: 08.03.2010
Адрес: Ханты-Мансийск
Сообщений: 28
Сказал(а) спасибо: 27
Поблагодарили 13 раз(а) в 8 сообщениях
|
patchdiff2 поищите
но бывают неточности и в ручную приходиться править http://cgi.tenablesecurity.com/tenable/patchdiff.php Последний раз редактировалось Dereka; 25.08.2010 в 12:33. |
Пользователь сказал cпасибо: | Konctantin (25.08.2010) |
26.08.2010, 21:11 | #11 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
тут новее нашел http://code.google.com/p/patchdiff2/
|
29.08.2010, 22:42 | #12 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Еще есть вопрос:
В этой функции должен быть участок, где формируется пакет CMSG_AUTH_SESSION (2593) Код:
//----- (0062E160) -------------------------------------------------------- signed int __thiscall NetClient__SendAuthSession(int this, int a2) { int v2; // ecx@1 int v3; // esi@1 int v4; // edi@3 int v5; // edx@3 int v6; // ecx@3 unsigned int v7; // eax@3 int v8; // ecx@3 char v9; // dl@3 char *v10; // eax@5 signed int v11; // ebx@5 char v12; // cl@6 int v13; // edx@11 int v14; // eax@11 int v15; // edx@11 int v16; // eax@11 int v17; // eax@13 char v18; // cl@14 char v20; // [sp+Ch] [bp-5DCh]@3 char v21; // [sp+1Ch] [bp-5CCh]@15 __int16 v22; // [sp+30h] [bp-5B8h]@3 int v23; // [sp+34h] [bp-5B4h]@11 int v24; // [sp+38h] [bp-5B0h]@3 int v25; // [sp+3Ch] [bp-5ACh]@3 char v26; // [sp+40h] [bp-5A8h]@5 char v27; // [sp+540h] [bp-A8h]@3 int v28; // [sp+544h] [bp-A4h]@11 int v29; // [sp+548h] [bp-A0h]@11 int v30; // [sp+54Ch] [bp-9Ch]@11 int v31; // [sp+550h] [bp-98h]@11 int v32; // [sp+554h] [bp-94h]@15 char v33; // [sp+57Ch] [bp-6Ch]@11 char v34; // [sp+5D8h] [bp-10h]@3 int v35; // [sp+5E0h] [bp-8h]@3 int v36; // [sp+5E4h] [bp-4h]@11 v3 = this; v2 = *(_DWORD *)(this + 18000); if ( v2 ) (*(void (__stdcall **)(int, _DWORD, _DWORD, _DWORD))(*(_DWORD *)v2 + 24))(v3, "SMSG_AUTH_CHALLENGE", 0, 0); *(_BYTE *)(v3 + 18060) = 0; SecureRandom__Seed((int)&v34, 0); sub_7D5A00(v6, v5); SecureRandom__Seed((int)&v34, v7); sub_979310(&v20); v8 = *(_DWORD *)(v3 + 1284); v9 = *(_BYTE *)(v3 + 1328); v22 = 12803; v25 = v8; v27 = v9; v4 = v3 + 4; v24 = sub_4B9D60((int)&v34); v35 = v24; if ( v3 == -4 ) sub_7E0210( 0x85100000u, (int)"d:\\buildserver\\wow\\6\\work\\wow-code\\trunk\\storm\\h\\SStr.inl", 111, (int)"source", v4, 1u, 286331153); v10 = &v26; v11 = 1279; while ( 1 ) { v12 = v10[v4 - (_DWORD)&v26]; *v10++ = v12; if ( !v12 ) break; --v11; if ( !v11 ) goto LABEL_10; } if ( v11 ) goto LABEL_11; LABEL_10: *v10 = 0; LABEL_11: v13 = *(_DWORD *)(v3 + 18084); v14 = *(_DWORD *)(v3 + 18088); v28 = *(_DWORD *)(v3 + 18092); v23 = v13; v15 = *(_DWORD *)(a2 + 8); v29 = v14; v16 = *(_DWORD *)(a2 + 12); v36 = 0; v30 = v15; v31 = v16; sub_64EC00((int)&v33); if ( v3 == -4 ) sub_7E0210( 0x85100000u, (int)"d:\\buildserver\\wow\\6\\work\\wow-code\\trunk\\storm\\h\\SStr.inl", 178, (int)"string", 0, 1u, 286331153); v17 = v3 + 4; do v18 = *(_BYTE *)v17++; while ( v18 ); SHA1__Update((int)&v33, v3 + 4, v17 - (v3 + 5)); SHA1__Update((int)&v33, (int)&v36, 4u); SHA1__Update((int)&v33, (int)&v35, 4u); SHA1__Update((int)&v33, a2, 4u); SHA1__Update((int)&v33, v3 + 1288, 0x28u); sub_64ED00((int)&v21, (int)&v33); sub_4667B0((int)&v32); (*(void (__thiscall **)(int *))(v32 + 28))(&v32); sub_493750((void *)v3, (int)&v20); sub_9792C0((int)&v20); return 1; } Прошелся по функциям, но и там не нашел участка, который формирует пакет. Не слабо близы по передвигали все. Код:
Packet C->S, CMSG_AUTH_SESSION (2593), len 316, Flags: None |---------------------------------------------------------------------------| | OFFSET | 0 1 2 3 4 5 6 7 8 9 A B C D E F |0123456789ABCDEF| |----------------------------------------------------------|----------------| |00000000| 00 00 00 00 09 00 00 00 15 00 00 00 41 A5 A5 88 |............A...| |00000010| 16 08 11 E4 21 19 F7 F0 D2 98 B7 A7 A1 E4 DE 51 |....!..........Q| |00000020| 03 32 62 00 00 00 00 00 00 00 00 00 00 00 B1 AB |.2b.............| |00000030| A6 0C 01 31 35 35 37 37 36 35 23 32 00 FB 00 00 |...1557765#2....| |00000040| 00 58 03 00 00 78 9C 75 D2 31 6E C3 30 0C 05 50 |.X...x.u.1n.0..P| |00000050| 5F A4 87 A9 1D C4 30 5A 2F 8D 32 17 B4 C4 C8 84 |_.....0Z/.2.....| |00000060| 25 D2 A0 E5 A0 C9 41 7A DE 36 1D 82 0E 94 D6 47 |%.....Az.6.....G| |00000070| 10 1F 9F 7A 69 9A A6 4D 74 BF 83 86 CF 23 62 98 |...zi..Mt....#b.| |00000080| C0 2F E7 A1 79 BE 27 BE FA 99 F0 8A 19 B9 D8 AE |./..y.'.........| |00000090| 7E 06 94 24 F1 56 71 64 B0 65 F7 85 84 4D 6B 41 |~..$.Vqd.e...MkA| |000000A0| 27 D4 6D 96 B5 C2 A5 24 BC 10 A6 30 12 53 86 D5 |'.m....$...0.S..| |000000B0| 1A 22 0E C4 D1 5C D0 41 42 0E A0 16 49 9E A0 BC |."...\.AB...I...| |000000C0| 4B AC 9A C3 AF 62 E3 0A BE 7C 00 85 A3 42 C6 CD |K....b...|...B..| |000000D0| 98 39 E0 B4 47 27 92 2C EC D3 6D 9D CD B8 FD D8 |.9..G'.,..m.....| |000000E0| CD 60 F7 DF 8F A7 5D AF 68 97 DF EF 94 42 0B 6C |.`....].h....B.l| |000000F0| 9F F6 4F 3B E1 A2 92 EA 03 A6 0C BC AD E8 ED 44 |..O;...........D| |00000100| 43 C1 7C 12 BF 60 A9 B5 3F 82 57 31 E5 51 9E 0D |C.|..`..?.W1.Q..| |00000110| 78 11 8D B5 85 EE 71 4E 3B 8D A3 8C 23 30 44 B4 |x.....qN;...#0D.| |00000120| 8E ED 64 41 FB 07 3A 85 80 A7 85 92 5D CD 2F 13 |..dA..:.....]./.| |00000130| A3 FE B7 F4 7D 78 FB 01 45 49 DC 3C -- -- -- -- |....}x..EI.<....| |----------------------------------------------------------|----------------| 31 35 35 37 37 36 35 23 32 00 - аккаунт Если не сложно, подскажите, где обработчик, а то сел править парсеры пакетов, и вот застрял на этом. |
29.08.2010, 23:04 | #13 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Код:
void *__thiscall sub_979040(void *this, CDataStore *a2) { int v2; // esi@1 void *v3; // esi@1 v3 = this; CDataStore__PutInt32_2(a2, 0xA21u); CDataStore__PutInt32(a2, *((_DWORD *)v3 + 12)); CDataStore__PutInt32_3(a2, *((_DWORD *)v3 + 334)); CDataStore__PutInt32_3(a2, *((_DWORD *)v3 + 335)); CDataStore__PutArray(a2, (int)((char *)v3 + 16), 20); CDataStore__PutInt16((int)a2, *((_WORD *)v3 + 18));// build CDataStore__PutInt32_3(a2, *((_DWORD *)v3 + 10)); CDataStore__PutInt64(a2, *((_DWORD *)v3 + 336), *((_DWORD *)v3 + 337));// unk4 CDataStore__PutInt32_3(a2, *((_DWORD *)v3 + 11)); CDataStore__PutInt8_2((int)a2, *((_BYTE *)v3 + 1332));// unk5 CDataStore__PutCString((int)a2, (int)((char *)v3 + 52));// account CDataStore__PutInt32_3(a2, *((_DWORD *)v3 + 342)); v2 = (int)((char *)v3 + 1352); if ( *(_DWORD *)(v2 + 20) == -1 ) BlizzAssert( 0x85100000u, (int)"d:\\buildserver\\wow\\6\\work\\wow-code\\trunk\\engine\\source\\base\\CDataStore.h", 504, (int)"IsFinal()", 0, 1u, 286331153); *(_DWORD *)(v2 + 20) = 0; return sub_5ED960(a2, v2); } Код:
.rdata:00B87798 off_B87798 dd offset Send_CMSG_PING .rdata:00B877A0 off_B877A0 dd offset Send_CMSG_REDIRECTION_AUTH_PROOF .rdata:00B877A8 off_B877A8 dd offset Send_CMSG_UNKNOWN_1296 .rdata:00B877B0 off_B877B0 dd offset Send_CMSG_AUTH_SESSION .rdata:00B877B8 off_B877B8 dd offset Send_CMSG_MESSAGECHAT_CHANNEL .rdata:00B877C0 off_B877C0 dd offset Send_CMSG_CHANNEL_SILENCE_VOICE Последний раз редактировалось TOM_RUS; 29.08.2010 в 23:22. |
Пользователь сказал cпасибо: | Konctantin (29.08.2010) |
29.08.2010, 23:21 | #15 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Она вызывается через указатель на указатель
Код:
.text:00979040 Send_CMSG_AUTH_SESSION proc near ; DATA XREF: .rdata:off_B877B0 Код:
.rdata:00B877B0 off_B877B0 dd offset Send_CMSG_AUTH_SESSION Код:
.text:009792C8 mov dword ptr [ecx], offset off_B877B0 .text:00979324 mov dword ptr [esi], offset off_B877B0 Последний раз редактировалось TOM_RUS; 29.08.2010 в 23:25. |
Пользователь сказал cпасибо: | Konctantin (30.08.2010) |