Просмотр полной версии : пакеты от клиента к серверу
как можно узнать структуру пакета идущего от клиента к серверу?
Например:
клиент посылает при сборе лута опкод "CMSG_ITEM_QUERY_SINGLE" хотя при снифах на оффе данный опкод я не обнаружил.
через IDA нашел данный участок кода
int __thiscall sub_422380(void *this, int a2)
{
void *v3; // esi@1
v3 = this;
sub_7D1480(a2, 384);
sub_7D14E0(a2, *((_DWORD *)v3 + 6), *((_DWORD *)v3 + 7));
sub_7D1480(a2, *((_DWORD *)v3 + 5));
return sub_7D1480(a2, *((_DWORD *)v3 + 4));
}
как я понял
sub_7D1480(a2, 384);
отправка
CMSG_ITEM_QUERY_SINGLE = 0x00180
Но что отвечает за структуру пакета ?
Konctantin
02.01.2011, 11:35
Сейчас, данные о предметах содержатся в клиенте.
Так же эти данные приходят в пакете 0x08C8 и 0x0828.
Вот ваша же структура, но с переименованными функциями, спасибо TOM_RUS, за базу ИДА
int __thiscall sub_422380(void *this, int a2)
{
void *v3; // esi@1
v3 = this;
CDataStore__PutInt32(a2, 384); // opcode
CDataStore__PutInt64(*((_DWORD *)v3 + 6), *((_DWORD *)v3 + 7)); // guid
CDataStore__PutInt32(a2, *((_DWORD *)v3 + 5));
return CDataStore__PutInt32(a2, *((_DWORD *)v3 + 4));
}
хм
CDataStore__PutInt64(*((_DWORD *)v3 + 6), *((_DWORD *)v3 + 7)); // guid
тут вроде раньше id вещи был
как я понял 0x0828 это ответ сервера на CMSG_ITEM_QUERY_SINGLE
uint64 item,
recv_data >>item;
sLog.outDetail("STORAGE:i Item Query = %u", item);
c такой структурой севрер ругается
2011-01-02 13:34:14 ERROR: SESSION: opcode CMSG_ITEM_QUERY_SINGLE (0x0180) have unprocessed tail data (read stop at 8 from 16)
в чем подвох ?
Konctantin
02.01.2011, 13:20
там все не так, посылается запрос, с номером предмета 6A 32 00 00
Packet C->S, CMSG_DB2_DATA2 (384, 0x0180, cond 16), 16 bytes, 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 00 00 00 00 6A 32 00 00 C2 8E 23 50 |........j2....#P|
|----------------------------------------------------------|----------------|
и в ответ приходит:
Packet S->C, SMSG_DB2_DATA2 (2088, 0x0828, spec 5), 48 bytes, Flags: None
|---------------------------------------------------------------------------|
| OFFSET | 0 1 2 3 4 5 6 7 8 9 A B C D E F |0123456789ABCDEF|
|----------------------------------------------------------|----------------|
|00000000| 6A 32 00 00 46 63 F3 AD C2 8E 23 50 20 00 00 00 |j2..Fc....#P ...|
|00000010| 6A 32 00 00 0C 00 00 00 00 00 00 00 FF FF FF FF |j2..............|
|00000020| FF FF FF FF 35 09 00 00 00 00 00 00 00 00 00 00 |....5...........|
|----------------------------------------------------------|----------------|
а потом, после 16 байт идут данные о предмете:
Packet S->C, SMSG_DB2_DATA2 (2088, 0x0828, spec 5), 593 bytes, Flags: Trailing
|---------------------------------------------------------------------------|
| OFFSET | 0 1 2 3 4 5 6 7 8 9 A B C D E F |0123456789ABCDEF|
|----------------------------------------------------------|----------------|
|00000000| 6A 32 00 00 5C 0B 6E 41 4E E5 9B 91 41 02 00 00 |j2..\.nAN...A...|
|00000010| 6A 32 00 00 01 00 00 00 40 00 00 00 00 20 00 00 |j2......@.... ..|
|00000020| 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF FF |................|
|00000030| FF FF FF FF 01 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000040| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000050| 00 00 00 00 00 00 00 00 01 00 00 00 01 00 00 00 |................|
|00000060| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000070| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000080| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000090| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000A0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000B0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000C0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000D0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000E0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000000F0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000100| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000110| 00 00 00 00 03 43 00 00 00 00 00 00 00 00 00 00 |.....C..........|
|00000120| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000130| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000140| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000150| FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF |................|
|00000160| FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000170| 00 00 00 00 00 00 00 00 FF FF FF FF FF FF FF FF |................|
|00000180| FF FF FF FF FF FF FF FF FF FF FF FF 04 00 00 00 |................|
|00000190| 3E 00 D0 9E D1 87 D0 B8 D1 89 D0 B5 D0 BD D0 BD |>...............|
|000001A0| D0 B0 D1 8F 20 D0 B2 D0 BE D0 B4 D0 B0 20 D0 B8 |.... ........ ..|
|000001B0| D0 B7 20 D0 9B D1 83 D0 BD D0 BD D0 BE D0 B3 D0 |.. .............|
|000001C0| BE 20 D0 BA D0 BE D0 BB D0 BE D0 B4 D1 86 D0 B0 |. ..............|
|000001D0| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|000001E0| 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF FF |................|
|000001F0| FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000200| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000210| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000220| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000230| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000240| 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
|00000250| 00 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- |................|
|----------------------------------------------------------|----------------|
Структура пакета как я понял такая:
recv_data >>guid >> item >>item2;
от клиента приходят такие значения
2011-01-02 23:53:46 STORAGE:64 Item Query = 0
2011-01-02 23:53:46 STORAGE:32 Item Query = 1344507586
2011-01-02 23:53:46 STORAGE:i32 Item Query = 16777240
как из них можно вычислить id предмета
Konctantin
03.01.2011, 00:00
нет
WowGuid guid
uint entry
uint unixTime
как из них можно вычислить id предмета
Я же написал:
с номером предмета 6A 32 00 00
ещё назрел такой вопрос
в каком месте происходит обработка опкода 0x0545D в клиенте
я подозреваю что это
signed int __thiscall CGPlayer_C__OnLootResponse(void *this, int a2, unsigned int a3)
Но с моей расшифровкой от сервера приходит такой пакет
|-------------------------------------------------|---------------------------------|
| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | 0 1 2 3 4 5 6 7 8 9 A B C D E F |
|-------------------------------------------------|---------------------------------|
| 8A D7 00 0C 3C 00 30 F1 01 00 00 00 00 01 00 4C | . . . . < . 0 . . . . . . . . L |
| 51 00 00 02 00 00 00 C6 81 00 00 00 00 00 00 00 | Q . . . . . . . . . . . . . . . |
| 00 00 00 00 | . . . . |
|-------------------------------------------------|---------------------------------|
И в окне лута выводятся совершенно посторонние вещи
подскажите в каком направлении копать ?
немного разобрался
Но
вот структура пакета со стороны сервака
data << uint64(guid);
data << uint8(loot_type);
data << LootView(*loot, this, permission);
обработчик в клиенте
signed int __thiscall CGPlayer_C__OnLootResponse(void *this, int a2, unsigned int a3)
{
int v3; // eax@1
int v4; // ecx@1
unsigned int v5; // edi@1
void *v6; // esi@1
char v7; // zf@4
char v8; // al@4
signed int result; // eax@23
void *v10; // eax@32
void *v11; // edi@32
int v12; // ecx@40
int v13; // eax@40
unsigned int v14; // ST0C_4@40
signed int v15; // [sp-4h] [bp-34h]@18
signed int v16; // [sp-4h] [bp-34h]@34
int v17; // [sp+Ch] [bp-24h]@13
int v18; // [sp+10h] [bp-20h]@13
int v19; // [sp+14h] [bp-1Ch]@13
int v20; // [sp+18h] [bp-18h]@13
int v21; // [sp+1Ch] [bp-14h]@13
int v22; // [sp+20h] [bp-10h]@13
WGUID guid; // [sp+24h] [bp-Ch]@1
unsigned __int8 v24; // [sp+2Fh] [bp-1h]@1
v5 = a3;
v6 = this;
CDataStore__GetInt64(&guid);
CDataStore__GetInt8(&v24);
v3 = *((_DWORD *)v6 + 2216);
v4 = *((_DWORD *)v6 + 2217);
if ( *((_QWORD *)v6 + 1108) && v3 == guid.low && v4 == guid.high )
{
v8 = v24;
}
else
{
v7 = (v4 | v3) == 0;
v8 = v24;
if ( !v7 || v24 != 2 && v24 != 3 && v24 != 4 && v24 != 6 && v24 != 7 && v24 != 8 && v24 != 9 )
{
if ( v24 )
{
v17 = (int)off_AAECB8;
v18 = 0;
v19 = 0;
v20 = 0;
v21 = 0;
CDataStore__PutInt32(38015);
CDataStore__PutInt64(guid.low, guid.high);
v22 = 0;
ClientServices__SendPacket_0(&v17);
v17 = (int)off_AAECB8;
if ( v20 != -1 )
off_AAECBC(&v17, &v18, &v19, &v20);
}
else
{
if ( *(_DWORD *)(v5 + 16) != *(_DWORD *)(v5 + 20) )
{
CDataStore__GetInt8((char *)&a3 + 3);
if ( BYTE3(a3) == 15 )
CGGameUI__DisplayError(615);
}
}
*((_DWORD *)v6 + 2216) = 0;
*((_DWORD *)v6 + 2217) = 0;
CGUnit_C__sub_5E0720(0, -1);
sub_6023C0(0);
CGGameUI__UnlockItem(guid);
*(_DWORD *)(v5 + 20) = *(_DWORD *)(v5 + 16);
return 1;
}
}
if ( v8 )
{
v10 = ClntObjMgrGetObjectPtr(guid, TYPEMASK_OBJECT, ".\\Player_C.cpp", 12016);
v11 = v10;
if ( v10 )
{
if ( ((unsigned int)*(_WORD *)(*((_DWORD *)v10 + 2) + 8) >> 1) & 1 )
sub_821BC0(guid);
v12 = v24;
v13 = guid.high;
*((_DWORD *)v6 + 2216) = guid.low;
v14 = a3;
*((_DWORD *)v6 + 2217) = v13;
sub_8A70F0(v11, v14, v12);
if ( (unsigned int)&unk_C000FF & *(_DWORD *)(*((_DWORD *)v6 + 64) + 68) )
{
CloseLoot(1, 1, 0);
return 1;
}
}
else
{
if ( (guid.high & 0xF0000000) == 1073741824 )
v16 = 150;
else
v16 = 144;
CGGameUI__DisplayError(v16);
v17 = (int)off_AAECB8;
v18 = 0;
v19 = 0;
v20 = 0;
v21 = 0;
CDataStore__PutInt32(38015);
CDataStore__PutInt64(guid.low, guid.high);
v22 = 0;
ClientServices__SendPacket_0(&v17);
v17 = (int)off_AAECB8;
if ( v20 != -1 )
{
off_AAECBC(&v17, &v18, &v19, &v20);
return 1;
}
}
return 1;
}
CDataStore__GetInt8((char *)&a3 + 3);
switch ( BYTE3(a3) )
{
case 6u:
v15 = 142;
goto LABEL_31;
case 4u:
v15 = 143;
goto LABEL_31;
case 5u:
v15 = 145;
goto LABEL_31;
case 8u:
v15 = 146;
goto LABEL_31;
case 9u:
v15 = 147;
goto LABEL_31;
case 0xAu:
CGGameUI__DisplayError(456);
return 1;
case 0xBu:
v15 = 501;
goto LABEL_31;
case 0xCu:
CGGameUI__DisplayError(520);
result = 1;
break;
case 0xDu:
CGGameUI__DisplayError(521);
result = 1;
break;
case 0xEu:
CGGameUI__DisplayError(522);
result = 1;
break;
case 0x10u:
CGGameUI__DisplayError(461);
result = 1;
break;
case 0x11u:
CGGameUI__DisplayError(150);
result = 1;
break;
default:
v15 = 144;
LABEL_31:
CGGameUI__DisplayError(v15);
*((_DWORD *)v6 + 2216) = 0;
*((_DWORD *)v6 + 2217) = 0;
CGUnit_C__sub_5E0720(0, -1);
sub_6023C0(0);
CGGameUI__UnlockItem(guid);
CGUnit_C__sub_5E0720(0, -1);
result = 1;
break;
}
return result;
}
data << uint64(guid);
data << uint8(loot_type);
понятно где обрабатываются это
CDataStore__GetInt64(&guid);
CDataStore__GetInt8(&v24);
а вот что отвечает за обработку
data << LootView(*loot, this, permission); понять не могу
Konctantin
04.01.2011, 17:52
в самом низу функции, смотрите:
CDataStore__GetInt8((char *)&a3 + 3);
switch ( BYTE3(a3) )
{
case 6u:
v15 = 142;
goto LABEL_31;
case 4u:
v15 = 143;
goto LABEL_31;
case 5u:
v15 = 145;
goto LABEL_31;
case 8u:
v15 = 146;
goto LABEL_31;
case 9u:
v15 = 147;
goto LABEL_31;
case 0xAu:
CGGameUI__DisplayError(456);
return 1;
case 0xBu:
v15 = 501;
goto LABEL_31;
case 0xCu:
CGGameUI__DisplayError(520);
result = 1;
break;
case 0xDu:
CGGameUI__DisplayError(521);
result = 1;
break;
case 0xEu:
CGGameUI__DisplayError(522);
result = 1;
break;
case 0x10u:
CGGameUI__DisplayError(461);
result = 1;
break;
case 0x11u:
CGGameUI__DisplayError(150);
result = 1;
break;
default:
v15 = 144;
LABEL_31:
CGGameUI__DisplayError(v15);
*((_DWORD *)v6 + 2216) = 0;
*((_DWORD *)v6 + 2217) = 0;
CGUnit_C__sub_5E0720(0, -1);
sub_6023C0(0);
CGGameUI__UnlockItem(guid);
CGUnit_C__sub_5E0720(0, -1);
result = 1;
break;
}
Lordronn
05.01.2011, 00:03
Спрошу тут, что бы не создавать новую тему.
signed int __cdecl PH_SMSG_GAMEOBJECT_SPAWN_ANIM_OBSOLETE(int a1, int a2, int a3, int a4)
{
signed int result; // eax@2
int v5; // [sp+4h] [bp-14h]@2
int v6; // [sp+8h] [bp-10h]@2
int v7; // [sp+Ch] [bp-Ch]@1
int v8; // [sp+13h] [bp-5h]@2
unsigned __int8 v9; // [sp+17h] [bp-1h]@4
CDataStore__GetInt32(&v7);
switch ( v7 )
{
case 2:
case 3:
case 4:
CDataStore__GetWowGUID(a4, &v5);
CDataStore__GetInt8(&v8);
sub_89B300(v7, v5, v6, v8);
result = 1;
break;
case 0:
case 5:
case 6:
case 8:
CDataStore__GetInt8(&v8);
sub_89B770(v7, (unsigned __int8)v8);
result = 1;
break;
case 7:
CDataStore__GetInt8(&v8);
CDataStore__GetInt8(&v9);
if ( v7 != 7 )
goto LABEL_7;
sub_89B6F0((unsigned __int8)v8, v9);
result = 1;
break;
case 1:
case 9:
case 10:
sub_89B130(v7);
goto LABEL_7;
default:
LABEL_7:
result = 1;
break;
}
return result;
}
Тут получается int это тип Го, и после уже дальнейшее чтение зависит от него. Или это нечто другое?
Konctantin
05.01.2011, 00:13
да, именно так
Lordronn
05.01.2011, 01:34
А где закопаны HighGuidType? Не могу найти щас, но когда открывал экзешник идой, помню, что было такое, правда список быстро рос и я потерял ее
add:
Опкод фазы маски никто не находил. Я сделал квесты у воргенов с фазой. Спарсил снифф. Все опкоды длиной в 4 байта спарсил кроме 1. Думал это и есть маска фазы, но нет. Очень она большая
Server->Client: SMSG_PHASE_MASK (0xBE7E) (Offset: 1518 / 0x05EE) Length: 4 Time: 04/14/1970 00:45:00
Phase Mask: 16382
Или он теперь 12 байт? Идой не нашел
Спрошу тут, что бы не создавать новую тему.
signed int __cdecl PH_SMSG_GAMEOBJECT_SPAWN_ANIM_OBSOLETE(int a1, int a2, int a3, int a4)
{
signed int result; // eax@2
int v5; // [sp+4h] [bp-14h]@2
int v6; // [sp+8h] [bp-10h]@2
int v7; // [sp+Ch] [bp-Ch]@1
int v8; // [sp+13h] [bp-5h]@2
unsigned __int8 v9; // [sp+17h] [bp-1h]@4
CDataStore__GetInt32(&v7);
switch ( v7 )
{
case 2:
case 3:
case 4:
CDataStore__GetWowGUID(a4, &v5);
CDataStore__GetInt8(&v8);
sub_89B300(v7, v5, v6, v8);
result = 1;
break;
case 0:
case 5:
case 6:
case 8:
CDataStore__GetInt8(&v8);
sub_89B770(v7, (unsigned __int8)v8);
result = 1;
break;
case 7:
CDataStore__GetInt8(&v8);
CDataStore__GetInt8(&v9);
if ( v7 != 7 )
goto LABEL_7;
sub_89B6F0((unsigned __int8)v8, v9);
result = 1;
break;
case 1:
case 9:
case 10:
sub_89B130(v7);
goto LABEL_7;
default:
LABEL_7:
result = 1;
break;
}
return result;
}
Тут получается int это тип Го, и после уже дальнейшее чтение зависит от него. Или это нечто другое?
Это вообще совершенно другой опкод...
http://getmangos.com/community/topic/15391/two-packet-questions/ пост №16
Lordronn
05.01.2011, 22:06
Получается опкод идет при старте енкаутера в инсте, и в нем передается гуид босса
Подскажите где в клиенте обрабатывается опкод с номером 0x03C54 поиск идой не чего не дал :(
Lordronn
07.01.2011, 06:59
Верно ли я понял структуру PH_SMSG_UPDATE_OBJECT
var mapID = reader.ReadInt16();
var count = reader.ReadInt32();
long sposition = reader.GetPosition();
var unk = reader.ReadByte();
if (unk != 3)
reader.SetPosition(sposition);
else
{
var c = reader.ReadInt32();
for (uint i = 0; i < c; ++i)
reader.ReadPackedGuid();
}
for (uint i = 0; i < count; ++i)
{
var stage = reader.ReadByte(); //OBJECT_UPDATE_TYPE
case 1:
case 2:
if ( sub_4963C0(a3, v6 == 2) )
break;
return 0;
case 0:
if ( sub_4953E0(v3, 0, 0, 0) )
break;
return 0;
case 3:
sub_493F60();
break;
default:
break;
}
Угу.
А еще можно было посмотреть в мангосовский src/game/UpdateData.cpp, там то же самое написано. )
Чтобы не плодить лишних тем спрошу тут, решил написать свой auth server, в целом вроде всё понятно, но после отправки AUTH_LOGON_PROOF, клиент просто зависает на "Проверка версии" опкод на запрос реалмов не приходит.
Чтобы не плодить лишних тем спрошу тут, решил написать свой auth server, в целом вроде всё понятно, но после отправки AUTH_LOGON_PROOF, клиент просто зависает на "Проверка версии" опкод на запрос реалмов не приходит.
неверный м2, либо формат пакета
м2 верный, формат пакета скорее всего где-то там ошибся, тк сейчас поставил Accountflags в 0x01 что соответствует гм клиенту и пришёл запрос за реалмы...
Подскажите где отправляются и формируются эти два пакета
9 2 Recv
0000 00 2A .*
10 42 Recv
0000 EC 01 01 00 00 00 FC 8B D5 E9 79 1F 03 B6 39 97 ..........y...9.
0010 82 DD F8 47 EF 42 44 7E DE F0 A5 E0 20 54 E9 AD ...G.BD~.... T..
0020 75 B7 07 3C 6C EE CB 95 F5 D4 u..<l.....
Судя по сниффу отправляются они сразу после попытки клиента зайти в окно выбора персонажа, после выбора реалма, поиск по id пакета ничего не выдал.(
Второй как я понял "SMSG_AUTH_CHALLENGE" а вот первый, так и не нашёл где отправляется
Второй как я понял "SMSG_AUTH_CHALLENGE" а вот первый, так и не нашёл где отправляется
Где иммено не нашел? (IDA, source mangos)
Может немного глупый вопрос т.к только разбираюсь в криптографии, session key в сервере и session key который хранится в памяти клиента должны быть одинаковы, хочу написать простой sandbox для 5.0.4 вот остановился на экране создания персонажа, не могу правильно расшифровать пакеты после AuthSession
Lordronn
04.09.2012, 13:34
Конечно
Может потому что там идет бит-стриминг?
Начал разбираться с 5.3.0 не подскажите как найти функцию "NetClient__JAMClientDispatch", до этого всегда работал только с готовыми образами для ida от TOM_RUS.
Возник вопрос как сейчас найти структуру CMSG
По номеру нашел
int __thiscall sub_686AF4(void *this, int a2) это как я понял инициализация пакета.
{
void *v3; // esi@1
v3 = this;
sub_40F110(a2, 4447); это put_int32
return (*(int (__thiscall **)(_DWORD, _DWORD))(*(_DWORD *)v3 + 4))(v3, a2);
}
Опкод CMSG_SELL_ITEM = 0x115F
Версия 5.4.7 18019
x-ref по 686AF4 выдаст тебе структуру
http://ru-mangos.ru/showthread.php?p=32565#post32565
Как узнать адрес обработки ServerToClient: SMSG_UNK_0987 (0x0987) Length: 12 (клиент 18414)?
уже много раз об этом говорили
OpcodeTools даже Jam группу не показывает, по коду обработка приходит в конечную точку
(*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 68))(v6, a3);
v11 = v5 & 7 | ((v5 & 0x30 | (((unsigned __int8)(v5 & 0x80) | (v5 >> 1) & 0x7F00) >> 1)) >> 1);
if ( (v5 & 0x148) == 256 && (v12 = *(_DWORD *)(v6 + 4 * v11 + 1360)) != 0 )
result = ((int (__cdecl *)(_DWORD, unsigned int, int, int))(v12 - ((v5 | (v5 << 16)) ^ 0x62A3A31D)))(
*(_DWORD *)(v6 + 4 * v11 + 9552),
v5,
a2,
v4);
else
result = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 24))(v4);
как определить переход?
Konctantin
23.07.2014, 21:57
уже где-то выкладывали дампы адресов обработчиков.
в формате
OPcode handler
уже где-то выкладывали дампы адресов обработчиков.
в формате
OPcode handler
Если у кого то есть такое для последней версии офа, было бы круто.
Konctantin
24.07.2014, 01:14
а что мешает заинжектить в процесс Длл и запустить перебор с 0 по 0xffff?
OpcodeTools даже Jam группу не показывает, по коду обработка приходит в конечную точку
(*(void (__thiscall **)(int, int))(*(_DWORD *)v6 + 68))(v6, a3);
v11 = v5 & 7 | ((v5 & 0x30 | (((unsigned __int8)(v5 & 0x80) | (v5 >> 1) & 0x7F00) >> 1)) >> 1);
if ( (v5 & 0x148) == 256 && (v12 = *(_DWORD *)(v6 + 4 * v11 + 1360)) != 0 )
result = ((int (__cdecl *)(_DWORD, unsigned int, int, int))(v12 - ((v5 | (v5 << 16)) ^ 0x62A3A31D)))(
*(_DWORD *)(v6 + 4 * v11 + 9552),
v5,
a2,
v4);
else
result = (*(int (__thiscall **)(int))(*(_DWORD *)v4 + 24))(v4);
как определить переход?присоединиться дебаггером
OpcodeTools нужно обновлять под 18414
vBulletin® v3.8.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot