![]() |
![]() |
|
Опкоды, Формулы, Клиент Разбор и изучение взаимодействия клиента с сервером |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
![]() |
#121 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
![]() ![]() ![]() |
![]()
Именно такие, может вы перепутали server/client?
|
![]() |
![]() |
![]() |
#122 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
![]() |
![]()
Разобрался. В первом соединении тоже приходит SMSG_AUTH_CHALLENGE, но там сиды какие-то левые.
Фэйк что ли какой-то близы придумали ... или просто эти сиды для первого соединения зашифрованые каким-то образом. А вот во втором уже приходит SMSG_AUTH_CHALLENGE с верными сидами. |
![]() |
![]() |
![]() |
#124 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
![]() |
![]()
значит фэйк
![]() Вроде все как будто работает, расшифровку пакетов на лету отладил... Я учел в своем снифере возможность того что в одном куске данных от сервера или клиента может быть либо несколько маленьких пакетов, либо один большой пакет доходит кусками ... с этим проблем нет А вот остался такой вопрос, возможна ли такая ситуация что в данных с сервера или клиента может оказаться не полный заголовок пакета? Ну примерно так: Предыдущая обработка завершилась нормально, ожидаем следующий пакет, тут приходит порция данных с сервера, а длина ну скажем 3. Ясное дело что минимальный пакет от сервера может быть длиной 4. И если все делать правильно, если обнаружена такая ситуация, то надо дождаться недостающих данных. Или не стоит заморачиваться, и такого не бывет ? Последний раз редактировалось NeatElves; 03.09.2010 в 21:36. |
![]() |
![]() |
![]() |
#125 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
![]() ![]() ![]() |
![]()
Бывает, я на это напарывался.
Точнее бывает в случае когда идут несколько опкодов в одном пакете, а в конце кусочек заголовка еще одного опкода. Не знаю как в вашей реализации, у меня это происходило. Последний раз редактировалось LordJZ; 18.07.2010 в 14:02. |
![]() |
![]() |
Пользователь сказал cпасибо: | Йоха (18.07.2010) |
![]() |
#126 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
![]() |
![]()
ясно, значит нужно учесть еще что заголовок может прийти не полностью
|
![]() |
![]() |
![]() |
#127 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
![]() ![]() |
![]()
Как-то уныло через виртуальную машину снифать... Есть способ заставить работать pcap с VPN подключением?
|
![]() |
![]() |
![]() |
#129 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
![]() |
![]()
Кто-нибудь знает библиотеку для работы с raw сокетам на с++ под винду ?
Кстати насчет поиска адреса второй сессии, если ваш сниффер расшифровывает пакеты на лету, то вторая сессия легко определяется из пакета 0x050D_SMSG_NEW_SESSION, там первые четыре байта это ip, следом word - порт куда должна конектиться вторая сессия. Последний раз редактировалось NeatElves; 03.09.2010 в 21:36. |
![]() |
![]() |
![]() |
#130 | ||
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#131 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
![]() |
![]()
ясно, значит я неправильно понял пост -)
|
![]() |
![]() |
![]() |
#132 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
![]() |
![]()
В продолжение темы, если я хочу вставить свой пакет в поток, мне придется следующие пакеты от клиента все перешифровывать, в связи с этим вопрос, как зашифровать заголовок ?
Расшифровкой занимается такая функция PHP код:
|
![]() |
![]() |
![]() |
#133 |
Гость
Сообщений: n/a
|
![]()
пропусти его через DecryptData и он зашифруется. в рц4 нет специального алгоритма для зашифровывания, он в оба конца работает.
А, не, сори. там же два ключа, один для отправки, другой для приёма, надо со вторым ключом тоже хеш сгенерить и инициализировать ещё один RC4, он то и будет по идее зашифровывать. как-то так.. если бы у меня хоть расшифровать получилось) Последний раз редактировалось 84ivan; 05.10.2010 в 12:12. |
![]() |
![]() |
#134 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
![]() |
![]()
От нечего делать решил найти где лежит sessionkey в 4.0.1
вот правка для tiawps tiawps_reader.exe 13261876 1288 |
![]() |
![]() |
![]() |
#136 |
Новичок
Регистрация: 25.06.2010
Адрес: Lipetsk
Сообщений: 21
Сказал(а) спасибо: 4
Поблагодарили 0 раз(а) в 0 сообщениях
![]() |
![]() |
![]() |
![]() |
![]() |
#137 |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
![]() |
![]()
Это секретное искусство ниндзюцу, о котором обычно не пишут на форумах. Передается оно из рук в руки. И таких мелочей загадок в кухне ВоВ ой как много.
А конкретно по этому вопросу - ищется определенная строка в wow.exe и по ней находится определенный программный код. Вот вот из этого кода адресок и берется. |
![]() |
![]() |
![]() |
#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); } |
![]() |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
#141 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
![]() ![]() ![]() ![]() ![]() ![]() |
![]()
Еще можно вместо отключения ASLR использовать:
Код:
address = Process.MainModule.BaseAddress + relativeOffset; edit -> segments -> rebase, 0x1000 |
![]() |
![]() |
![]() |
#142 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
![]() |
![]()
когда я разбирался с этой фигней, то выяснил что функция API - AdjustTokenPrivileges под вин7 не работает без прав администратора. Собственно просто запускаешь программу с правами администратора и все работает.
|
![]() |
![]() |
![]() |
#143 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
![]() |
#144 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
![]() |
![]()
Странно, но у меня все работает, без правки реестра и прочих ухищрений
Хватает запуска программы с правами администратора Вин7 домашняя расширенная (64 бит) З.Ы. возможно мы о разных вещах говорим ... |
![]() |
![]() |
![]() |
#145 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
![]() |
![]()
Я так понял близы не мешали опкоды, а просто применяю некоторые выражения для получения из старых опкодов новые.
к примеру Код:
a1 & 1 | ((a1 & 0xC | ((a1 & 0x1E0 | ((a1 & 0x800 | (a1 >> 1) & 0x7000) >> 2)) >> 1)) >> 1) ..... это просто мои мысли поправте если я неправ. |
![]() |
![]() |
![]() |
#146 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
![]() ![]() ![]() ![]() ![]() ![]() |
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#147 |
WowCore Dev
Регистрация: 11.03.2010
Сообщений: 112
Сказал(а) спасибо: 10
Поблагодарили 51 раз(а) в 25 сообщениях
![]() |
![]() |
![]() |
![]() |
![]() |
#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? |
![]() |
![]() |
![]() |
#149 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
![]() |
![]()
Тут был бред ))
Последний раз редактировалось alien; 07.11.2010 в 19:34. |
![]() |
![]() |
![]() |
#151 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
![]() |
![]()
Да точно что-то я опростоволосился )))
|
![]() |
![]() |
![]() |
#152 |
Пользователь
Регистрация: 22.03.2010
Сообщений: 41
Сказал(а) спасибо: 7
Поблагодарили 25 раз(а) в 15 сообщениях
![]() |
![]()
начал обновлять свой сниффер до 4.0.1...
близзи - долбоящеры. если я правильно понял в 4.0.1.13205 у объекта ClientConnection есть массив на 4 ServerConnection'а. они что, собираются поднимать до 4х соединений одновременно? |
![]() |
![]() |
![]() |
#153 |
Администратор
|
![]() |
![]() |
![]() |
![]() |
#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. |
|
![]() |
![]() |
![]() |
#155 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
![]() |
![]()
видимо разделили поток на 2 типа, 1 -всякие второстепенные вещи, которые обрабатываются когда есть время, и 2 - все что касается игры непосредственно, перемещения, создание/удаление объектов, касты и т.д. сообщения из этого потока обрабатываются в приоритете. Борются так сказать с лагами.
В игре теперь ограничено количество запросов о предметах на персонаже, адон геарСкоре сканировал постоянно всех вокруг непрерывно, полагаю в местах скопления людей трафик возрастал в разы. Теперь все это дело порезали и надо сказать что все усилия не напрасны, пинг в игре снизился имхо, как-то живее все стало происходить вокруг. |
![]() |
![]() |
![]() |
#156 |
Новичок
Регистрация: 14.03.2010
Сообщений: 11
Сказал(а) спасибо: 3
Поблагодарили 0 раз(а) в 0 сообщениях
![]() |
![]()
кто то мог бы поделится снифами от 3.3.5 стартовой локации DK?
заранее спасибо.
__________________
"Я стал смертью, уничтожителем миров" |
![]() |
![]() |
![]() |
#157 |
Ученый
Регистрация: 03.03.2010
Адрес: Сибирь, 58°14′00″ с. ш. 92°29′00″ в. д.
Сообщений: 288
Сказал(а) спасибо: 79
Поблагодарили 37 раз(а) в 14 сообщениях
Записей в дневнике: 18
![]() |
![]()
при перенаправлении ВоВа на ProxyCap чтоб начать снифать у меня усердно не хочет запускаться ВоВ
![]() ![]() ![]() ![]() Последний раз редактировалось Fedia22; 20.12.2010 в 15:03. |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |