|
Прочая документация Помощь, книги, инструкции, описания |
|
Опции темы | Поиск в этой теме | Опции просмотра |
07.03.2010, 16:14 | #1 |
Администратор
Регистрация: 07.03.2010
Адрес: Питер.
Сообщений: 69
Сказал(а) спасибо: 66
Поблагодарили 102 раз(а) в 15 сообщениях
Записей в дневнике: 12
|
Разбор пакетов WoW
Разбор структуры пакетов из wow.exe это просто!
Нужно: 1. Интуиция. 2. Знание "СИ". 3. IDA+HexRays. 4. Терпение. Качаем IDA+HexRays. нацеливаем IDA на wow.exe декомпилируем, потом сохраняем всё в .c файл с помощью HexRyas ищем в файле строчку типа Код:
(461, (int) Код:
sub_5F9870(459, (int)sub_401220, 0); sub_5F9870(461, (int)sub_401330, 0); Код:
sub_5F9870() это что то типа OpcodeHandler() Код:
sub_5F9870->OpcodeHandler Код:
OpcodeHandler(459, (int)sub_401220, 0); OpcodeHandler(461, (int)sub_401330, 0); ищём по коду эту функцию sub_401220(). ...... находим что то типа Код:
//----- (00401220) -------------------------------------------------------- signed int __usercall sub_401220<eax>(__int64 a1<edi:ebp>, int a2, int a3, int a4, int a5) { .................... v5 = (int)&v9; v10 = 1; v11 = 0; sub_422B90(a5, (int)&v9, 0x1000u); if ( !sub_6A6BF0(&v9, "DEBUGACTION: ", 0xDu) ) v5 = (int)&v12; if ( *(_BYTE *)v5 == 126 ) переименовываем её в ReadString() находим в начале файла. int __thiscall ReadString(int this, int a2, unsigned int a3); и переименовываем все рядом стоящими функции типа так... Код:
int __thiscall ReadByte(int this, int a2); int __thiscall ReadInt8(int this, int a2); int __thiscall ReadInt16(int this, int a2); int __thiscall ReadInt32(int this, int a2); int __thiscall ReadInt64(int this, int a2); int __thiscall ReadFloat(int this, int a2); >int __thiscall ReadString(int this, int a2, unsigned int a3); int __thiscall ReadString2(int this, int a2, int a3); int __thiscall callReadString2(int this, int a2, int a3); int __thiscall ReadPascalString(int this, int a2, int a3); теперь мы знаем какие функции какой тип данных считывают из пакета ИТАК. теперь мы хотим разобрать структуру какого либо SMSG пакета. Обратите внимание, что CMSG пакеты разбираются по другому и пока что я это описывать не буду. И ещё, некоторые пакеты SMSG которые есть в Opcodes.h(Мангос) их нету в wow.exe это связанно с тем что эти пакеты только для GM клиента и в обычном клиенте их просто нет Так вот... к примеру мы хотим узнать что за структура у пакета SMSG_LOOT_LIST = 0x3F9, переводим 0x3F9 в десятичное число и ищём по нашему коду. OpcodeHandler(1017, (int) нашли к примеру OpcodeHandler(1017, (int)sub_65E100, 0); переходим к sub_65E100 Код:
//----- (0065E100) -------------------------------------------------------- signed int __cdecl sub_65E100(int a1, int a2, int a3, int a4) { int v4; // eax@1 int v5; // esi@1 __int64 v7; // [sp+4h] [bp-8h]@1 v5 = a4; ReadInt64(a4, (int)&v7); v4 = sub_46DB20(v7, 8); if ( v4 ) sub_65D6D0(v4, v5); return 1; } всё, структуру опкода мы знаем все адреса приведённые здесь sub_65E100, sub_401220 и т.д. меняются с каждой версией клиента, так что нужно полагаться на интуицию и ещё... клиент бывает считывает Пакованный гуид из пакета... функция считывания выглядит примерно так Код:
//----- (006A5870) -------------------------------------------------------- int __cdecl sub_6A5870(int a1, int a2) { int v2; // ebx@1 unsigned int v3; // edi@1 int v4; // esi@1 int v6; // ecx@1 __int64 v7; // qax@3 unsigned __int8 v8; // [sp+Fh] [bp-1h]@3 v6 = a1; v4 = a2; v2 = 0; *(_DWORD *)a2 = 0; *(_DWORD *)(a2 + 4) = 0; ReadInt8(v6, (int)((char *)&a2 + 3)); v3 = 0; do { if ( (unsigned __int8)(1 << v2) & BYTE3(a2) ) { ReadInt8(a1, (int)&v8); v7 = v8 << (char)v3; *(_DWORD *)v4 |= v7; *(_DWORD *)(v4 + 4) |= *((_DWORD *)&v7 + 1); } v3 += 8; ++v2; } while ( v3 < 0x40 ); return a1; } ReadInt8(v6, (int)((char *)&a2 + 3)); но!!!!!! строка не уникальна и в других версиях клиента может меняться... Автор: Дерека.
|
22 пользователя(ей) сказали cпасибо: |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Разбор кода Спелов | partizanes | Прочая документация | 7 | 24.01.2012 15:29 |
шифрование пакетов в 3.3.2 | 84ivan | Копаем клиент | 8 | 05.10.2010 19:10 |
Шифрование пакетов в 11685 | Konctantin | Корзина | 2 | 27.03.2010 12:34 |