Ru-MaNGOS

Вернуться   Ru-MaNGOS > Ядро > Опкоды, Формулы, Клиент

Важная информация

Опкоды, Формулы, Клиент Разбор и изучение взаимодействия клиента с сервером

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 20.07.2010, 18:34   #1
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию Централизованый формат снифов

Редакция от 31 июля 2011, 13:13, версия 3.1
  • 1. RAW.
    • 1.1. заголовок снифа.
      Код:
      struct MainHeader
      {
        char signature[3]; // 'RAW'.
        byte version[2]; // 0x01, 0x03
        byte snifferID; 
        uint build; 
        char language[4]; // Язык клиента: 'ruRU', 'enGB' и т.д.
        byte sessionKey[40]; 
        uint unixTime;
        uint tickCount;
        uint optionalHeaderLength; 
      };
      byte[optionalHeaderLength] optionalData;
    • 1.2. чанк
      Код:
      struct ChunkHeader
      {
        char direction[4]; // 'SMSG', 'CMSG'
        uint sessionID;
        uint tickCount;
        uint optionalDataLength;
        uint dataLength;
      };
      byte[optionalDataLength] optionalData;
      byte[dataLength] data;
  • 2. PKT.
    • 2.1. заголовок снифа.
      Код:
      struct MainHeader
      {
        char signature[3]; // 'PKT'
        byte version[2]; // 0x01, 0x03
        byte snifferID; 
        uint build; 
        char language[4]; // Язык клиента: 'ruRU', 'enGB' и т.д.
        byte sessionKey[40]; // может быть заполнено нулями
        uint unixTime;
        uint tickCount;
        uint optionalHeaderLength; 
      };
      byte[optionalHeaderLength] optionalData;
    • 2.2. чанк
      Код:
      struct ChunkHeader
      {
        char direction[4]; // 'SMSG', 'CMSG'
        uint sessionID;
        uint tickCount;
        uint optionalDataLength;
        uint dataLength;
      };
      byte[optionalDataLength] optionalData;
      byte[dataLength] data;
      , где
      - data включает в себя Opcode, выравненный до uint
      - dataLength равен размеру data

  • 3. Имя файла.
    • 3.1. имя файла
      имя может быть произвольным и удобным каждому из разработчиков.
    • 3.2. расширение файла
      обязательно .raw или .pkt

Редакция от 25 июля 2010, 21:00, версия 3.0
  • 1. RAW.
    • 1.1. заголовок снифа.
      Код:
      struct MainHeader
      {
        char signature[3]; // 'RAW'.
        byte version[2]; // 0x00, 0x03
        byte snifferID; 
        uint build; 
        char language[4]; // Язык клиента: 'ruRU', 'enGB' и т.д.
        byte sessionKey[40]; 
        uint optionalHeaderLength; 
      };
      byte[optionalHeaderLength] optionalData;
    • 1.2. чанк
      Код:
      struct ChunkHeader
      {
        char direction[4]; // 'SMSG', 'CMSG'
        uint unixTime;
        uint tickCount;
        uint optionalDataLength;
        uint dataLength;
      };
      byte[optionalDataLength] optionalData;
      byte[dataLength] data;
  • 2. PKT.
    • 2.1. заголовок снифа.
      Код:
      struct MainHeader
      {
        char signature[3]; // 'PKT'
        byte version[2]; // 0x00, 0x03
        byte snifferID; 
        uint build; 
        char language[4]; // Язык клиента: 'ruRU', 'enGB' и т.д.
        byte sessionKey[40]; // может быть заполнено нулями
        uint optionalHeaderLength; 
      };
      byte[optionalHeaderLength] optionalData;
    • 2.2. чанк
      Код:
      struct ChunkHeader
      {
        char direction[4]; // 'SMSG', 'CMSG'
        uint unixTime;
        uint tickCount;
        uint optionalDataLength;
        uint dataLength;
      };
      byte[optionalDataLength] optionalData;
      byte[dataLength] data;
      , где
      - data включает в себя Opcode, выравненный до uint
      - dataLength равен размеру data

Предложения
SnifferID:
Код:
0 - Wad // 2005 и ранее
1 - Nomad // 2005 и ранее
2 - WoWCore // 2006
3 - Mangos (TOM_RUS) // 2006
4 - User456 // 2007
5 - Delfin // 2007
6 - Burlex // 2007
7 - WCell // 2008
8 - Kobold // 2009
9 - abdula123 // 2010
10 - Konctantin/LordJZ // 2010
11 - Йоха // 2010
__________________

Последний раз редактировалось RomanRom2; 07.08.2011 в 21:24.
Konctantin вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Amaru (29.07.2013), lordinpvp (27.07.2010)
Старый 27.07.2010, 12:31   #81
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

Цитата:
Сообщение от Fall0ut Посмотреть сообщение
Тут в чем дело.. К нам именно по этому сабжу никаких предложений не поступало. Да и нужно ли это им? )
Эта тема для Мангос и Ко или же для всего эму коммунити? Я думаю все же первое..
вы из кобольд тим? спасибо, что зашли.
предложение вывешено на этом форуме, потому что он, как мне кажется, самый популярный. нет? ваш популярней? не вопрос, скажите ресурс, где это точно прочитают все - вывесим там.
все - я имею ввиду разработчиков

и еще вопрос. действительно ли у вас есть собственный рабочий снифер? как называется и какого он типа? или вы используете опенсоурс?

Последний раз редактировалось RomanRom2; 27.07.2010 в 12:36.
RomanRom2 вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Neverdie (27.07.2010)
Старый 27.07.2010, 12:56   #82
Neverdie
Kobold Dev
 
Аватар для Neverdie
 
Регистрация: 11.03.2010
Сообщений: 22
Сказал(а) спасибо: 5
Поблагодарили 3 раз(а) в 3 сообщениях
Neverdie На верном пути
Отправить сообщение для Neverdie с помощью ICQ
По умолчанию

Ромыч на даный момент у нас ваш
у нас просто 2-3 калеки раоботают и все сразу не можем
вот и пользуемся в даный случай (запозычеными технологиями) дамы не тратить время которого и так нету
раньше был свой
кстати за формат зачет
он даже меньше выходит по размеру (ну то сопли)

а на данном варианте мы просто мы не в силах поддреживать тему - не из лени или что-то там еще
а из на хватки уделять время опять же ((

а суть темы довольно хорошо звучит выложена (давно такое пора было)
но наши и ваши и везде тараканы в голове долбят мозг (веть меренями пипськами не когда не к чему не приведет)
а какой у нас был прокси
КОнстатин видел может прокоментировать
и еще раз плз не начинаейте делему про то что у кого спер или мы все в одно котле крутимся

гы сори за фала - наверно он сам не понял что ляпнул.

П.С, ничего личного
__________________
Вообще-то я не специалист по этим гравицаппам...

Последний раз редактировалось Konctantin; 27.07.2010 в 14:50.
Neverdie вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
RomanRom2 (27.07.2010)
Старый 27.07.2010, 21:06   #83
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Написал обработчик PKT 3.0 Preview формата.
Как пример, вот лог промежуточной сессии. Присутствуют optional блоки — у некоторых пакетов и в основном заголовке. Для ознакомления.
http://dl.dropbox.com/u/9241118/PKT_3.0_Preview.pkt
LordJZ вне форума   Ответить с цитированием
Старый 27.07.2010, 21:37   #84
VDm
Новичок
 
Регистрация: 22.05.2010
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 1 сообщении
VDm На верном пути
По умолчанию

Цитата:
Сообщение от LordJZ Посмотреть сообщение
Написал обработчик PKT 3.0 Preview формата.
Как пример, вот лог промежуточной сессии. Присутствуют optional блоки — у некоторых пакетов и в основном заголовке. Для ознакомления.
http://dl.dropbox.com/u/9241118/PKT_3.0_Preview.pkt
Проверил в HEX-редакторе, все корректно.
Прошу обратить внимание на одну важную деталь, второе поле в заголовке файла (поле version) записывается как word в big-endian формате, в то время, как остальные записи в little-endian.
LordJZ сделал это совершенно корректно, смотрим начало заголовка (в порядке: signature(3), version(2), snifferID(1), build(4)):
Код:
50 4B 54 | 00 03 | 09 | 34 30 00 00
На little-endian машинах архитектуры x86 и x64 взятие word для version выдаст число 768.
Выше я написал, что version == 0x0003, это некорректно, потому что такая константа будет записана на little-endian машине, как "03 00".

PS. Лучше поправить word version на byte version[2] с указанием, что оно равно: { 0x00, 0x03 }

Последний раз редактировалось VDm; 27.07.2010 в 21:42.
VDm вне форума   Ответить с цитированием
Старый 27.07.2010, 21:50   #85
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Поправил, спасибо.
LordJZ вне форума   Ответить с цитированием
Старый 29.07.2010, 08:25   #86
Blacksmither
Kobold Dev
 
Аватар для Blacksmither
 
Регистрация: 29.07.2010
Сообщений: 21
Сказал(а) спасибо: 5
Поблагодарили 2 раз(а) в 2 сообщениях
Blacksmither На верном пути
По умолчанию

Цитата:
Сообщение от RomanRom2 Посмотреть сообщение
и еще вопрос. действительно ли у вас есть собственный рабочий снифер? как называется и какого он типа? или вы используете опенсоурс?
Ну запишите:

name: kobold_px
date: 2009
type: proxy
author: Kosuha
__________________
World Database Development Group
Blacksmither вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (29.07.2010)
Старый 29.07.2010, 13:14   #87
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

Цитата:
Сообщение от Blacksmither Посмотреть сообщение
Ну запишите:
записал. присвоен код 8.
RomanRom2 вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Blacksmither (30.07.2010)
Старый 29.07.2010, 15:03   #88
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

как бы теперь донести это на буржуйские форумы?
__________________
Konctantin вне форума   Ответить с цитированием
Старый 30.07.2010, 00:12   #89
user456
Новичок
 
Регистрация: 31.03.2010
Сообщений: 22
Сказал(а) спасибо: 2
Поблагодарили 23 раз(а) в 8 сообщениях
user456 На верном пути
По умолчанию

Товарищ прав, какая разница в байтах главный хедер или в двордах? На 500Мбайтах зашедшего в рейд или на БГ сэкономить 5-10 байт? Тем более уже 30 лет процессорам проще читать 32-х битное и только ценой невероятных усилий почти с той же скоростью 8-ми битное.
Насчет локейла - если трудно тащить то на худой конец в wtf/config сидит типа SET locale "enUS"

Да, и будет все в интел-формате (не помню в какую сторону он endian) или кто-то еще гоняет моторолы?

Последний раз редактировалось user456; 30.07.2010 в 00:35.
user456 вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Konctantin (30.07.2010), LordJZ (30.07.2010)
Старый 30.07.2010, 01:09   #90
user456
Новичок
 
Регистрация: 31.03.2010
Сообщений: 22
Сказал(а) спасибо: 2
Поблагодарили 23 раз(а) в 8 сообщениях
user456 На верном пути
По умолчанию

Вот продолжаем с ромкой по 2-3 байтных выяснять.

К примеру код на Delphi сравнения сигнатуры:
Код:
PHeader = ^THeader;
THeader = packed record
  sign: dword;
  ver: dword;
...
end;

const
  SIGN_PKT = $00544B50;

var
  buf: THeader;
begin
    fread(f, buf, len);
    if (buf.sign = SIGN_PKT) then
...
если делать 2-3-х байтными это уже выливается в сравнения массивов или всякие присвоения с масками и сдвигами. По-моему лучше и правда забить 32-х битными чем потом годами мучаться или разнобой получать.
user456 вне форума   Ответить с цитированием
Старый 30.07.2010, 01:34   #91
VDm
Новичок
 
Регистрация: 22.05.2010
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 1 сообщении
VDm На верном пути
По умолчанию

Цитата:
Сообщение от user456 Посмотреть сообщение
если делать 2-3-х байтными это уже выливается в сравнения массивов или всякие присвоения с масками и сдвигами. По-моему лучше и правда забить 32-х битными чем потом годами мучаться или разнобой получать.
Так бы и сделали, если бы не желание оставить совместимость с прежними форматами. Да и стоит ли оно того ради 3 байт? Можно и memcmp сделать, один раз на файл-то.
VDm вне форума   Ответить с цитированием
Старый 30.07.2010, 01:56   #92
user456
Новичок
 
Регистрация: 31.03.2010
Сообщений: 22
Сказал(а) спасибо: 2
Поблагодарили 23 раз(а) в 8 сообщениях
user456 На верном пути
По умолчанию

Цитата:
Сообщение от VDm Посмотреть сообщение
Так бы и сделали, если бы не желание оставить совместимость с прежними форматами. Да и стоит ли оно того ради 3 байт? Можно и memcmp сделать, один раз на файл-то.
А у кого кроме ромки такое же в старых форматах? По описанному уже всем придется переделывать. Потом как в дате биоса еще одного байта не хватит, потом еще...
Впрочем как сделаете так и делайте. Моё имхо: вместо того чтобы оставить ромкину "3" там где она и сидит я бы сделал 32-х битный тим типа MNGS и может по дворду на билд снифера LO и HI.

Последний раз редактировалось user456; 30.07.2010 в 02:05.
user456 вне форума   Ответить с цитированием
Старый 30.07.2010, 01:57   #93
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

у меня хватает
__________________
Konctantin вне форума   Ответить с цитированием
Старый 30.07.2010, 02:00   #94
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

поддерживаю
по моему не тот случай, где нужно так упираться за производительность.

не, я конечно понимаю, что подход там, все дела. но Вовка, в самом деле... это ж снифы. на кой нужна производительность (главное, речь идет о нескольких тактах один раз за одну обработку одного снифа) здесь?

шо мы не программисты шоле, трем байтам не сможем сделать:
var
signature: longint;
version: word;
begin
BlockRead(f, buf, 5);
move(buf[0], signature, 3);
move(buf[3], version, 2);
...

чего тут такого прям криминального то? ну, кроме подхода

З.Ы.
RomanRom2 вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Konctantin (30.07.2010), LordJZ (30.07.2010)
Старый 30.07.2010, 03:02   #95
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Я получил локаль(индекс локали) читая память процесса по адресу 0x00C5DE9C, но это не выход, ведь с каждым билдом адрес будет менятся.
Или может есть более постоянный адрес?
__________________
Konctantin вне форума   Ответить с цитированием
Старый 30.07.2010, 06:13   #96
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от Konctantin Посмотреть сообщение
Я получил локаль(индекс локали) читая память процесса по адресу 0x00C5DE9C, но это не выход, ведь с каждым билдом адрес будет менятся.
Или может есть более постоянный адрес?
0x00C5DE88 текущая локаль в виде строки
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (30.07.2010)
Старый 30.07.2010, 06:17   #97
user456
Новичок
 
Регистрация: 31.03.2010
Сообщений: 22
Сказал(а) спасибо: 2
Поблагодарили 23 раз(а) в 8 сообщениях
user456 На верном пути
По умолчанию

Цитата:
Сообщение от RomanRom2 Посмотреть сообщение
не, я конечно понимаю, что подход там, все дела. но Вовка, в самом деле...
Цитата:
Впрочем как сделаете так и делайте

Цитата:
Я получил локаль(индекс локали) читая память процесса по адресу 0x00C5DE9C, но это не выход, ведь с каждым билдом адрес будет менятся.
Или может есть более постоянный адрес?
Разве что если найти структуру к которой оно привязано (как с ключом). Но тут проще или ловить логин или тупо читать из wtf/config. Или как Ромка когда-то делал - читать всю память процесса и не спеша искать в ней локаль чтобы запомнить адрес до следующего патча.
user456 вне форума   Ответить с цитированием
Старый 30.07.2010, 11:01   #98
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Цитата:
Но тут проще или ловить логин или тупо читать из wtf/config.
но если это первый запуск? тогда там будет пусто. пишется в wtf/* только после закрытия клиента.
__________________
Konctantin вне форума   Ответить с цитированием
Старый 30.07.2010, 11:46   #99
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Первый запуск — используем язык по-умолчанию из тех, что установлен в клиенте.

Другое дело, что определить какой из в данный момент запущенных клиентов лезет на сервер имея только сокет — невозможно (или развейте мои сомнения). По этой причине, например, в нашей с Konctantin реализации не работают два клиента, запущенные на одной машине одновременно (ключ сессии читается из первого клиента).
LordJZ вне форума   Ответить с цитированием
Старый 30.07.2010, 19:43   #100
user456
Новичок
 
Регистрация: 31.03.2010
Сообщений: 22
Сказал(а) спасибо: 2
Поблагодарили 23 раз(а) в 8 сообщениях
user456 На верном пути
По умолчанию

Цитата:
Сообщение от Konctantin Посмотреть сообщение
но если это первый запуск?
Какова вероятность попасть на первый запуск клиента?
Попробовал у себя
Код:
    
const
  LOCALE_SIGN = 'SET locale "';
...
    //locale stuff
    WowIni:= TRegistry.Create;
    try
      WowIni.RootKey:= HKEY_LOCAL_MACHINE;
      if WowIni.OpenKey('\SOFTWARE\Blizzard Entertainment\World of Warcraft', false)then begin
        fname:= WowIni.ReadString('InstallPath') + 'Wtf\Config.wtf';
        fs:= TFileStream.Create(fname, fmOpenRead);
        setlength(temp_arr, fs.Size);
        fs.Read(temp_arr[0], fs.Size);
        fs.Free;
        temp_str:= PChar(temp_arr);
        temp_arr:= nil;

        locale_pos:= pos(LOCALE_SIGN, temp_str);
        if (locale_pos > 0) and (locale_pos + length(LOCALE_SIGN) + sizeof(PktHdr.locale) <= length(temp_str)) then
          move(temp_str[locale_pos + length(LOCALE_SIGN)], PktHdr.locale, sizeof(PktHdr.locale));
      end
      else PktHdr.locale:= UNK_SIGN;
    finally
      WowIni.Free;
    end;
всё пашет
user456 вне форума   Ответить с цитированием
Старый 30.07.2010, 20:07   #101
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Ну это все, как говорится "у каждого свои методы", я ограничился таким кодом:
Код:
private byte[] GetLocales()
{
	using (var mr = new ProcessMemoryReader("wow"))
	{
		return mr.Read(0x00C5DE88, 4);
	}
}
__________________

Последний раз редактировалось Konctantin; 30.07.2010 в 21:55.
Konctantin вне форума   Ответить с цитированием
Старый 31.07.2010, 10:48   #102
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от Konctantin Посмотреть сообщение
Ну это все, как говорится "у каждого свои методы", я ограничился таким кодом:
Код:
private byte[] GetLocales()
{
	using (var mr = new ProcessMemoryReader("wow"))
	{
		return mr.Read(0x00C5DE88, 4);
	}
}
У меня почти так же

Код:
using System;
using System.Diagnostics;
using System.Globalization;
using System.IO;

namespace Wlp
{
    public class SessionInfoReader
    {
        private const string ProcessName = "Wow";

        public static int ClientBuild
        {
            get
            {
                var p = ProcessMemoryReader.GetProcessByName(ProcessName);

                if (File.Exists(p.MainModule.FileName))
                {
                    var fi = FileVersionInfo.GetVersionInfo(p.MainModule.FileName);
                    return fi.FilePrivatePart;
                }
                else
                {
                    Logger.Instance.ErrorFormat("{0} not found or missing required permissions!", ProcessName);
                    return -1;
                }
            }
        }

        public static byte[] GetSessionKey(uint offset)
        {
            using (var pmr = new ProcessMemoryReader(ProcessName))
            {
                return pmr.Read(pmr.ReadUInt(offset) + 0x508, 40);
            }
        }

        public static byte[] GetWardenSeedKey(uint offset)
        {
            using (var pmr = new ProcessMemoryReader(ProcessName))
            {
                return pmr.Read(pmr.ReadUInt(offset) + 0x04, 16);
            }
        }

        public static byte[] GetWardenRC4State(uint offset)
        {
            using (var pmr = new ProcessMemoryReader(ProcessName))
            {
                return pmr.Read(pmr.ReadUInt(offset) + 0x20, 0x204);
            }
        }

        public static byte[] GetLocaleBytes(uint offset)
        {
            using (var pmr = new ProcessMemoryReader(ProcessName))
            {
                return pmr.Read(offset, 4);
            }
        }
    }
}

Последний раз редактировалось TOM_RUS; 31.07.2010 в 14:13.
TOM_RUS вне форума   Ответить с цитированием
Старый 01.08.2010, 18:27   #103
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

А почему бы не узнавать локал клиента по названию под папки?
В папке Data есть под папка ruRU\enGB\enUS... Почему бы просто не брать локал клиента оттуда. Если поменять название папки, то вов не запустится(проверено)
Да и менять специально никто бы не стал
Lordronn вне форума   Ответить с цитированием
Старый 01.08.2010, 18:31   #104
zergtmn
MaNGOS Dev
 
Аватар для zergtmn
 
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
zergtmn Обладатель прекрасной аурыzergtmn Обладатель прекрасной ауры
По умолчанию

А если локалей несколько? enGB и ruRU отлично уживаются вместе. Для переключения локали мне достаточно сменить ее в конфиге.
zergtmn вне форума   Ответить с цитированием
Старый 01.08.2010, 18:41   #105
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Цитата:
А почему бы не узнавать локал клиента по названию под папки?
К примеру у меня 2 языковых пакета, и оба я использую...

Да и писалось выше, "у каждого свои методы", если есть желание, то можна и ручками писать, какая локаль используется.
__________________
Konctantin вне форума   Ответить с цитированием
Старый 01.08.2010, 18:50   #106
Neverdie
Kobold Dev
 
Аватар для Neverdie
 
Регистрация: 11.03.2010
Сообщений: 22
Сказал(а) спасибо: 5
Поблагодарили 3 раз(а) в 3 сообщениях
Neverdie На верном пути
Отправить сообщение для Neverdie с помощью ICQ
По умолчанию

Та це вы уже в крайности кидаетесь просто
как писаливые каждый меняет по своему
над этим лучше бы не мучались бы и все
__________________
Вообще-то я не специалист по этим гравицаппам...
Neverdie вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
user456 (08.08.2010)
Старый 04.10.2010, 19:33   #107
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

нууу... я так понимаю, формат утвержден.
с чем всех и поздравляю.
RomanRom2 вне форума   Ответить с цитированием
2 пользователя(ей) сказали cпасибо:
Konctantin (04.10.2010), LordJZ (04.10.2010)
Старый 04.10.2010, 19:58   #108
alien
Ученый
 
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
alien На верном пути
По умолчанию

Наверно в первом посте надо ***93; и ***91; надо поправить
alien вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Konctantin (04.10.2010)
Старый 04.10.2010, 20:08   #109
NeatElves
YTDB Dev
 
Аватар для NeatElves
 
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
NeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранитаNeatElves Как самоцвет среди гранита
По умолчанию

Зачем ?? Нормально определяет
***91 - [
***93 - ]
NeatElves вне форума   Ответить с цитированием
Старый 04.10.2010, 20:22   #110
alien
Ученый
 
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
alien На верном пути
По умолчанию

Хмм у показывается как ***91 и***93 а не как []
alien вне форума   Ответить с цитированием
Старый 04.10.2010, 21:14   #111
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

поправил, используя теги [code]
__________________
Konctantin вне форума   Ответить с цитированием
Старый 07.02.2011, 22:49   #112
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

Цитата:
char signature[3]; // 'RAW'.
Почему не определять подпись сниффа по формату: .pkt .raw

Цитата:
char direction[4]; // 'SMSG', 'CMSG'
почему не использовать байт?

Код:
Direction direction = reader.ReadByte() == 1  ? Direction.SMSG : Direction.CMSG;

public enum Direction
{
    CMSG = 0,
    SMSG = 1
};
Lordronn вне форума   Ответить с цитированием
Старый 07.02.2011, 23:23   #113
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Lordronn Посмотреть сообщение
Почему не определять подпись сниффа по формату: .pkt .raw
Можно еще по имени. Если начинается с цифры — это raw формат, в противном случае стандартный pkt. Или по дате, например, дамп, созданный в понедельник, — raw. А еще можно помечать raw дампы как системные файлы. А то мало-ли что наделают?
Цитата:
почему не использовать байт?

Код:
Direction direction = reader.ReadByte() == 1  ? Direction.SMSG : Direction.CMSG;

public enum Direction
{
    CMSG = 0,
    SMSG = 1
};
RomanRom2 объяснял почему. Ему хочется визуально смотреть PKTv3 в Far-е.
LordJZ вне форума   Ответить с цитированием
Старый 08.02.2011, 00:43   #114
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

Цитата:
Сообщение от Lordronn Посмотреть сообщение
Почему не определять подпись сниффа по формату: .pkt .raw
потому что никто так не делает. например zip, mp3, или даже (о боже!) mpq - имеют заголовок. не для того, что бы место на ваших дисках занять, а что бы быть уверенным в том, что читаем, хотя бы косьвенно. у тома, например, снифы на выходе имеют вообще расширение .bin, как понять чоо-там-чоо-там и каким методом парсить в этом случае?

Цитата:
Сообщение от Lordronn Посмотреть сообщение
почему не использовать байт?
так было до сего момента, см. предыдущие версии формата. многолетняя практика показала, что это вызывает некоторый неудобняк и было бы удобнее как то более наглядно различать границы пакетов.

ЗЫ. кстати, сейчас хоть кто нибудь что нибудь снифает?
RomanRom2 вне форума   Ответить с цитированием
Старый 08.02.2011, 04:17   #115
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Цитата:
ЗЫ. кстати, сейчас хоть кто нибудь что нибудь снифает?
у меня есть гиг снифов
__________________
Konctantin вне форума   Ответить с цитированием
Старый 08.02.2011, 08:57   #116
Fedia22
Ученый
 
Аватар для Fedia22
 
Регистрация: 03.03.2010
Адрес: Сибирь, 58°14′00″ с. ш. 92°29′00″ в. д.
Сообщений: 288
Сказал(а) спасибо: 79
Поблагодарили 37 раз(а) в 14 сообщениях
Записей в дневнике: 18
Fedia22 На верном пути
По умолчанию

Fedia22 вне форума   Ответить с цитированием
Старый 08.02.2011, 16:12   #117
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

А как сейчас пишется сниф ? с двух соединений в два файла ? или все в один файл как приходят данные на сокет так и скидываются ?

P.S. сейчас посмотрел, кроме 2-ух активных соединений на 195.12.246.210 и 195.12.246.213 болтается еще какое-то соединение на 213.248.127.130. Последнее это бнет ?

Последний раз редактировалось Йоха; 08.02.2011 в 16:22.
Йоха вне форума   Ответить с цитированием
Старый 08.02.2011, 17:03   #118
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Цитата:
Сообщение от Йоха Посмотреть сообщение
Последнее это бнет ?
Да. eu.logon.battle.net
TOM_RUS вне форума   Ответить с цитированием
Старый 08.02.2011, 17:21   #119
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Йоха Посмотреть сообщение
А как сейчас пишется сниф ? с двух соединений в два файла ? или все в один файл как приходят данные на сокет так и скидываются ?
...
Я пишу в 1 файл, а в заголовке пакета пишу номер соединения.
LordJZ вне форума   Ответить с цитированием
Старый 21.04.2011, 21:27   #120
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

у кого нить есть готовый конвертор PKT 2.1 -> PKT 3.0?
RomanRom2 вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.



Текущее время: 15:40. Часовой пояс GMT +3.


ru-mangos.ru - Русское сообщество MaNGOS
Главная цель проекта MaNGOS - обучающая, поэтому разрешается использовать исходный код и собранную программу только для образовательных целей.
Вы не можете использовать MaNGOS в коммерческих целях, а также не разрешается устанавливать публичные серверы на базе MaNGOS.
Любое копирование материалов, информации в любом виде без указания источника - форума Ru-MaNGOS будет считаться нарушением авторских прав и нарушением Уголовного Кодекса РФ, ст. 146 ст. 147.
Перевод vBulletin: zCarot