|
Опкоды, Формулы, Клиент Разбор и изучение взаимодействия клиента с сервером |
|
Опции темы | Поиск в этой теме | Опции просмотра |
18.07.2010, 13:01 | #121 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Именно такие, может вы перепутали server/client?
|
18.07.2010, 13:39 | #122 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Разобрался. В первом соединении тоже приходит SMSG_AUTH_CHALLENGE, но там сиды какие-то левые.
Фэйк что ли какой-то близы придумали ... или просто эти сиды для первого соединения зашифрованые каким-то образом. А вот во втором уже приходит SMSG_AUTH_CHALLENGE с верными сидами. |
18.07.2010, 13:45 | #124 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
значит фэйк
Вроде все как будто работает, расшифровку пакетов на лету отладил... Я учел в своем снифере возможность того что в одном куске данных от сервера или клиента может быть либо несколько маленьких пакетов, либо один большой пакет доходит кусками ... с этим проблем нет А вот остался такой вопрос, возможна ли такая ситуация что в данных с сервера или клиента может оказаться не полный заголовок пакета? Ну примерно так: Предыдущая обработка завершилась нормально, ожидаем следующий пакет, тут приходит порция данных с сервера, а длина ну скажем 3. Ясное дело что минимальный пакет от сервера может быть длиной 4. И если все делать правильно, если обнаружена такая ситуация, то надо дождаться недостающих данных. Или не стоит заморачиваться, и такого не бывет ? Последний раз редактировалось NeatElves; 03.09.2010 в 21:36. |
18.07.2010, 14:00 | #125 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Бывает, я на это напарывался.
Точнее бывает в случае когда идут несколько опкодов в одном пакете, а в конце кусочек заголовка еще одного опкода. Не знаю как в вашей реализации, у меня это происходило. Последний раз редактировалось LordJZ; 18.07.2010 в 14:02. |
Пользователь сказал cпасибо: | Йоха (18.07.2010) |
18.07.2010, 14:10 | #126 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
ясно, значит нужно учесть еще что заголовок может прийти не полностью
|
28.08.2010, 20:25 | #127 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
Как-то уныло через виртуальную машину снифать... Есть способ заставить работать pcap с VPN подключением?
|
03.09.2010, 21:03 | #129 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Кто-нибудь знает библиотеку для работы с raw сокетам на с++ под винду ?
Кстати насчет поиска адреса второй сессии, если ваш сниффер расшифровывает пакеты на лету, то вторая сессия легко определяется из пакета 0x050D_SMSG_NEW_SESSION, там первые четыре байта это ip, следом word - порт куда должна конектиться вторая сессия. Последний раз редактировалось NeatElves; 03.09.2010 в 21:36. |
03.09.2010, 21:17 | #130 | ||
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Цитата:
Цитата:
|
||
03.09.2010, 21:18 | #131 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
ясно, значит я неправильно понял пост -)
|
04.09.2010, 22:35 | #132 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
В продолжение темы, если я хочу вставить свой пакет в поток, мне придется следующие пакеты от клиента все перешифровывать, в связи с этим вопрос, как зашифровать заголовок ?
Расшифровкой занимается такая функция PHP код:
|
05.10.2010, 11:54 | #133 |
Гость
Сообщений: n/a
|
пропусти его через DecryptData и он зашифруется. в рц4 нет специального алгоритма для зашифровывания, он в оба конца работает.
А, не, сори. там же два ключа, один для отправки, другой для приёма, надо со вторым ключом тоже хеш сгенерить и инициализировать ещё один RC4, он то и будет по идее зашифровывать. как-то так.. если бы у меня хоть расшифровать получилось) Последний раз редактировалось 84ivan; 05.10.2010 в 12:12. |
20.10.2010, 19:17 | #134 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
От нечего делать решил найти где лежит sessionkey в 4.0.1
вот правка для tiawps tiawps_reader.exe 13261876 1288 |
24.10.2010, 20:54 | #136 |
Новичок
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
|
|
24.10.2010, 21:55 | #137 |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
|
Это секретное искусство ниндзюцу, о котором обычно не пишут на форумах. Передается оно из рук в руки. И таких мелочей загадок в кухне ВоВ ой как много.
А конкретно по этому вопросу - ищется определенная строка в wow.exe и по ней находится определенный программный код. Вот вот из этого кода адресок и берется. |
24.10.2010, 21:56 | #138 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Найти эту функцию, можно по строке ACCOUNT_MESSAGE_BODY_NO_READ_URL, она такая одна
Код:
signed int __thiscall sub_92B460(int this, int a2) { int v2; // edi@1 int v3; // edx@3 char *v4; // ecx@3 signed int v5; // esi@3 int v6; // eax@3 char v7; // al@4 int v8; // eax@9 signed int v9; // esi@9 int v10; // esi@9 int v11; // eax@9 char v13; // [sp+4h] [bp-57Ch]@3 char v14; // [sp+504h] [bp-7Ch]@9 char v15[20]; // [sp+560h] [bp-20h]@9 char v16; // [sp+574h] [bp-Ch]@9 int v17; // [sp+57Ch] [bp-4h]@11 v2 = this; if ( *(_DWORD *)(this + 4) == 1 || *(_DWORD *)(this + 60) ) return 0; v13 = 0; v6 = sub_4D3320(); v4 = &v13; v5 = 1279; v3 = v6 - (_DWORD)&v13; while ( 1 ) { v7 = v4[v3]; *v4++ = v7; if ( !v7 ) break; --v5; if ( !v5 ) goto LABEL_8; } if ( v5 ) goto LABEL_9; LABEL_8: *v4 = 0; LABEL_9: v8 = ClientServices__GetCurrentConnection(); v10 = ClientServices__GetSessionKey(v8); SHA1__Init(&v14); SHA1__Update(&v14, v10, 40); SHA1__Update(&v14, "\vz", 2); SHA1__Final(v15, &v14); DynamicString__DynamicString(&v16); DynamicString__Resize(1024); v11 = FrameScript__GetText("ACCOUNT_MESSAGE_BODY_NO_READ_URL", -1, 0); sub_7CB5A0(v11); DynamicString__Append("?accountName="); DynamicString__Append(&v13); DynamicString__Append("&sessionKeyHash="); v9 = 0; do DynamicString__Unknown1((unsigned __int8)v15[v9++]); while ( v9 < 20 ); DynamicString__Append("&messageId="); DynamicString__Unknown1(a2); if ( !(unsigned __int8)sub_7D4F60(v17, sub_92C010, v2) ) { *(_DWORD *)(v2 + 4) = 3; DynamicString__Free(&v16); return 0; } *(_DWORD *)(v2 + 64) = 0; sub_92BFF0(v2); DynamicString__Free(&v16); return 1; } Код:
int __cdecl ClientServices__GetCurrentConnection() { return dword_CA5C34;// в десятичной системе исчисления это и будет искомое значение } Код:
int __thiscall ClientServices__GetSessionKey(void *this) { return (int)((char *)this + 1288); } |
25.10.2010, 01:08 | #139 |
Новичок
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
|
Разобрался но tiawps выдаёт
версия 4.0.1 tiawps_reader.exe 13261876 1288 couldn't read pointer, just read 0 bytes instead of 4 reading sessionkey failed - will try again in 1 second |
25.10.2010, 01:36 | #140 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
какая у вас ОС ? Если виндовс 7, тогда примените это
Код:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management] "MoveImages"=dword:00000000 |
25.10.2010, 05:03 | #141 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Еще можно вместо отключения ASLR использовать:
Код:
address = Process.MainModule.BaseAddress + relativeOffset; edit -> segments -> rebase, 0x1000 |
25.10.2010, 09:27 | #142 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
когда я разбирался с этой фигней, то выяснил что функция API - AdjustTokenPrivileges под вин7 не работает без прав администратора. Собственно просто запускаешь программу с правами администратора и все работает.
|
25.10.2010, 11:41 | #143 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
|
25.10.2010, 18:40 | #144 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Странно, но у меня все работает, без правки реестра и прочих ухищрений
Хватает запуска программы с правами администратора Вин7 домашняя расширенная (64 бит) З.Ы. возможно мы о разных вещах говорим ... |
25.10.2010, 23:38 | #145 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Я так понял близы не мешали опкоды, а просто применяю некоторые выражения для получения из старых опкодов новые.
к примеру Код:
a1 & 1 | ((a1 & 0xC | ((a1 & 0x1E0 | ((a1 & 0x800 | (a1 >> 1) & 0x7000) >> 2)) >> 1)) >> 1) ..... это просто мои мысли поправте если я неправ. |
26.10.2010, 00:31 | #146 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
|
|
26.10.2010, 00:44 | #147 |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
|
|
28.10.2010, 20:33 | #148 |
Новичок
Регистрация: 02.07.2010
Сообщений: 23
Сказал(а) спасибо: 2
Поблагодарили 20 раз(а) в 12 сообщениях
|
I don't understand it. I try to find a few opcode values for a little test, but I don't understand the new things in the beta wow.exe.
can anyone give me a sample to find out some opcode values? |
07.11.2010, 18:32 | #149 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Тут был бред ))
Последний раз редактировалось alien; 07.11.2010 в 19:34. |
07.11.2010, 19:33 | #151 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Да точно что-то я опростоволосился )))
|
13.11.2010, 17:41 | #152 |
Пользователь
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
|
начал обновлять свой сниффер до 4.0.1...
близзи - долбоящеры. если я правильно понял в 4.0.1.13205 у объекта ClientConnection есть массив на 4 ServerConnection'а. они что, собираются поднимать до 4х соединений одновременно? |
13.11.2010, 18:58 | #153 |
Администратор
|
|
13.11.2010, 19:41 | #154 | |
Пользователь
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
|
Цитата:
все эти редиректы я отслеживаю и обрабатываю. они были еще в 3.3.3. просто раньше в коде клиента была работа с 2мя соединениями - основным и дополнительным. после согласования дополнительного приходила команда SMSG_SWITCH_TO_SECOND и основное закрывалось, а дополнительное становилось основным. а сейчас там, если я правильно понимаю - 4 полноправных соединения, из которых 2 используются в параллель. и ничего не мешает клиенту использовать параллельно все 4 основной обмен данными идет через второе активное соединение (3е после логина) а вот что сыпется в первое непонятно: вижу SMSG_ZONE_UNDER_ATTACK, SMSG\CMSG_WARDEN_DATA, что-то про ГМские тикеты, GAMEUI. похоже, всякая фоновая ересь. Последний раз редактировалось abdula123; 13.11.2010 в 19:55. |
|
14.11.2010, 17:02 | #155 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
видимо разделили поток на 2 типа, 1 -всякие второстепенные вещи, которые обрабатываются когда есть время, и 2 - все что касается игры непосредственно, перемещения, создание/удаление объектов, касты и т.д. сообщения из этого потока обрабатываются в приоритете. Борются так сказать с лагами.
В игре теперь ограничено количество запросов о предметах на персонаже, адон геарСкоре сканировал постоянно всех вокруг непрерывно, полагаю в местах скопления людей трафик возрастал в разы. Теперь все это дело порезали и надо сказать что все усилия не напрасны, пинг в игре снизился имхо, как-то живее все стало происходить вокруг. |
18.12.2010, 16:25 | #156 |
Новичок
Регистрация: 14.03.2010
Сообщений: 11
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
|
кто то мог бы поделится снифами от 3.3.5 стартовой локации DK?
заранее спасибо.
__________________
"Я стал смертью, уничтожителем миров" |
20.12.2010, 14:59 | #157 |
Ученый
Регистрация: 03.03.2010
Адрес: Сибирь, 58°14′00″ с. ш. 92°29′00″ в. д.
Сообщений: 288
Сказал(а) спасибо: 79
Поблагодарили 37 раз(а) в 14 сообщениях
Записей в дневнике: 18
|
при перенаправлении ВоВа на ProxyCap чтоб начать снифать у меня усердно не хочет запускаться ВоВ падает с ошибкой
подскажите что может быть у Константина всё нормально, настройки 1 в 1 Последний раз редактировалось Fedia22; 20.12.2010 в 15:03. |
03.03.2011, 10:09 | #158 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
переписал снифер с нуля для поддержки нового клиента и нового формата 3.0, в raw формат пишет нормально, но ввиду отсутствия конвертера в pkt решил приделать возможность записи сразу в пкт. И тут возникли грабли, первые два пакета такие:
Код:
S->C opcode 0x6019, len 37, connectionindex 0 C->S opcode 0x0E0E, len 314, connectionindex 0 Последний раз редактировалось Йоха; 03.03.2011 в 10:24. |