|
Опкоды, Формулы, Клиент Разбор и изучение взаимодействия клиента с сервером |
|
Опции темы | Поиск в этой теме | Опции просмотра |
20.07.2010, 18:34 | #1 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Централизованый формат снифов
Редакция от 31 июля 2011, 13:13, версия 3.1
Редакция от 25 июля 2010, 21:00, версия 3.0
Предложения 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. |
27.07.2010, 12:31 | #81 | |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
Цитата:
предложение вывешено на этом форуме, потому что он, как мне кажется, самый популярный. нет? ваш популярней? не вопрос, скажите ресурс, где это точно прочитают все - вывесим там. все - я имею ввиду разработчиков и еще вопрос. действительно ли у вас есть собственный рабочий снифер? как называется и какого он типа? или вы используете опенсоурс? Последний раз редактировалось RomanRom2; 27.07.2010 в 12:36. |
|
Пользователь сказал cпасибо: | Neverdie (27.07.2010) |
27.07.2010, 12:56 | #82 |
Kobold Dev
|
Ромыч на даный момент у нас ваш
у нас просто 2-3 калеки раоботают и все сразу не можем вот и пользуемся в даный случай (запозычеными технологиями) дамы не тратить время которого и так нету раньше был свой кстати за формат зачет он даже меньше выходит по размеру (ну то сопли) а на данном варианте мы просто мы не в силах поддреживать тему - не из лени или что-то там еще а из на хватки уделять время опять же (( а суть темы довольно хорошо звучит выложена (давно такое пора было) но наши и ваши и везде тараканы в голове долбят мозг (веть меренями пипськами не когда не к чему не приведет) а какой у нас был прокси КОнстатин видел может прокоментировать и еще раз плз не начинаейте делему про то что у кого спер или мы все в одно котле крутимся гы сори за фала - наверно он сам не понял что ляпнул. П.С, ничего личного
__________________
Вообще-то я не специалист по этим гравицаппам... Последний раз редактировалось Konctantin; 27.07.2010 в 14:50. |
Пользователь сказал cпасибо: | RomanRom2 (27.07.2010) |
27.07.2010, 21:06 | #83 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Написал обработчик PKT 3.0 Preview формата.
Как пример, вот лог промежуточной сессии. Присутствуют optional блоки — у некоторых пакетов и в основном заголовке. Для ознакомления. http://dl.dropbox.com/u/9241118/PKT_3.0_Preview.pkt |
27.07.2010, 21:37 | #84 | |
Новичок
Регистрация: 22.05.2010
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 1 сообщении
|
Цитата:
Прошу обратить внимание на одну важную деталь, второе поле в заголовке файла (поле 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 Выше я написал, что version == 0x0003, это некорректно, потому что такая константа будет записана на little-endian машине, как "03 00". PS. Лучше поправить word version на byte version[2] с указанием, что оно равно: { 0x00, 0x03 } Последний раз редактировалось VDm; 27.07.2010 в 21:42. |
|
27.07.2010, 21:50 | #85 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Поправил, спасибо.
|
29.07.2010, 08:25 | #86 | |
Kobold Dev
Регистрация: 29.07.2010
Сообщений: 21
Сказал(а) спасибо: 5
Поблагодарили 2 раз(а) в 2 сообщениях
|
Цитата:
name: kobold_px date: 2009 type: proxy author: Kosuha
__________________
World Database Development Group |
|
Пользователь сказал cпасибо: | Konctantin (29.07.2010) |
29.07.2010, 13:14 | #87 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
|
Пользователь сказал cпасибо: | Blacksmither (30.07.2010) |
30.07.2010, 00:12 | #89 |
Новичок
Регистрация: 31.03.2010
Сообщений: 22
Сказал(а) спасибо: 2
Поблагодарили 23 раз(а) в 8 сообщениях
|
Товарищ прав, какая разница в байтах главный хедер или в двордах? На 500Мбайтах зашедшего в рейд или на БГ сэкономить 5-10 байт? Тем более уже 30 лет процессорам проще читать 32-х битное и только ценой невероятных усилий почти с той же скоростью 8-ми битное.
Насчет локейла - если трудно тащить то на худой конец в wtf/config сидит типа SET locale "enUS" Да, и будет все в интел-формате (не помню в какую сторону он endian) или кто-то еще гоняет моторолы? Последний раз редактировалось user456; 30.07.2010 в 00:35. |
2 пользователя(ей) сказали cпасибо: | Konctantin (30.07.2010), LordJZ (30.07.2010) |
30.07.2010, 01:09 | #90 |
Новичок
Регистрация: 31.03.2010
Сообщений: 22
Сказал(а) спасибо: 2
Поблагодарили 23 раз(а) в 8 сообщениях
|
Вот продолжаем с ромкой по 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 ... |
30.07.2010, 01:34 | #91 |
Новичок
Регистрация: 22.05.2010
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 3 раз(а) в 1 сообщении
|
Так бы и сделали, если бы не желание оставить совместимость с прежними форматами. Да и стоит ли оно того ради 3 байт? Можно и memcmp сделать, один раз на файл-то.
|
30.07.2010, 01:56 | #92 | |
Новичок
Регистрация: 31.03.2010
Сообщений: 22
Сказал(а) спасибо: 2
Поблагодарили 23 раз(а) в 8 сообщениях
|
Цитата:
Впрочем как сделаете так и делайте. Моё имхо: вместо того чтобы оставить ромкину "3" там где она и сидит я бы сделал 32-х битный тим типа MNGS и может по дворду на билд снифера LO и HI. Последний раз редактировалось user456; 30.07.2010 в 02:05. |
|
30.07.2010, 02:00 | #94 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
поддерживаю
по моему не тот случай, где нужно так упираться за производительность. не, я конечно понимаю, что подход там, все дела. но Вовка, в самом деле... это ж снифы. на кой нужна производительность (главное, речь идет о нескольких тактах один раз за одну обработку одного снифа) здесь? шо мы не программисты шоле, трем байтам не сможем сделать: var signature: longint; version: word; begin BlockRead(f, buf, 5); move(buf[0], signature, 3); move(buf[3], version, 2); ... чего тут такого прям криминального то? ну, кроме подхода З.Ы. |
2 пользователя(ей) сказали cпасибо: | Konctantin (30.07.2010), LordJZ (30.07.2010) |
30.07.2010, 03:02 | #95 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Я получил локаль(индекс локали) читая память процесса по адресу 0x00C5DE9C, но это не выход, ведь с каждым билдом адрес будет менятся.
Или может есть более постоянный адрес? |
30.07.2010, 06:13 | #96 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
|
Пользователь сказал cпасибо: | Konctantin (30.07.2010) |
30.07.2010, 06:17 | #97 | |||
Новичок
Регистрация: 31.03.2010
Сообщений: 22
Сказал(а) спасибо: 2
Поблагодарили 23 раз(а) в 8 сообщениях
|
Цитата:
Цитата:
Цитата:
|
|||
30.07.2010, 11:01 | #98 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Цитата:
|
|
30.07.2010, 11:46 | #99 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Первый запуск — используем язык по-умолчанию из тех, что установлен в клиенте.
Другое дело, что определить какой из в данный момент запущенных клиентов лезет на сервер имея только сокет — невозможно (или развейте мои сомнения). По этой причине, например, в нашей с Konctantin реализации не работают два клиента, запущенные на одной машине одновременно (ключ сессии читается из первого клиента). |
30.07.2010, 19:43 | #100 |
Новичок
Регистрация: 31.03.2010
Сообщений: 22
Сказал(а) спасибо: 2
Поблагодарили 23 раз(а) в 8 сообщениях
|
Какова вероятность попасть на первый запуск клиента?
Попробовал у себя Код:
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; |
30.07.2010, 20:07 | #101 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Ну это все, как говорится "у каждого свои методы", я ограничился таким кодом:
Код:
private byte[] GetLocales() { using (var mr = new ProcessMemoryReader("wow")) { return mr.Read(0x00C5DE88, 4); } } Последний раз редактировалось Konctantin; 30.07.2010 в 21:55. |
31.07.2010, 10:48 | #102 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
Код:
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. |
|
01.08.2010, 18:27 | #103 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
А почему бы не узнавать локал клиента по названию под папки?
В папке Data есть под папка ruRU\enGB\enUS... Почему бы просто не брать локал клиента оттуда. Если поменять название папки, то вов не запустится(проверено) Да и менять специально никто бы не стал |
01.08.2010, 18:31 | #104 |
MaNGOS Dev
Регистрация: 07.03.2010
Сообщений: 314
Сказал(а) спасибо: 30
Поблагодарили 153 раз(а) в 83 сообщениях
|
А если локалей несколько? enGB и ruRU отлично уживаются вместе. Для переключения локали мне достаточно сменить ее в конфиге.
|
01.08.2010, 18:41 | #105 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Цитата:
Да и писалось выше, "у каждого свои методы", если есть желание, то можна и ручками писать, какая локаль используется. |
|
04.10.2010, 19:33 | #107 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
нууу... я так понимаю, формат утвержден.
с чем всех и поздравляю. |
2 пользователя(ей) сказали cпасибо: | Konctantin (04.10.2010), LordJZ (04.10.2010) |
04.10.2010, 19:58 | #108 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Наверно в первом посте надо ***93; и ***91; надо поправить
|
Пользователь сказал cпасибо: | Konctantin (04.10.2010) |
04.10.2010, 20:08 | #109 |
YTDB Dev
Регистрация: 06.03.2010
Сообщений: 259
Сказал(а) спасибо: 28
Поблагодарили 280 раз(а) в 136 сообщениях
|
Зачем ?? Нормально определяет
***91 - [ ***93 - ] |
04.10.2010, 20:22 | #110 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Хмм у показывается как ***91 и***93 а не как []
|
07.02.2011, 22:49 | #112 | ||
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Цитата:
Цитата:
Код:
Direction direction = reader.ReadByte() == 1 ? Direction.SMSG : Direction.CMSG; public enum Direction { CMSG = 0, SMSG = 1 }; |
||
07.02.2011, 23:23 | #113 | |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Можно еще по имени. Если начинается с цифры — это raw формат, в противном случае стандартный pkt. Или по дате, например, дамп, созданный в понедельник, — raw. А еще можно помечать raw дампы как системные файлы. А то мало-ли что наделают?
Цитата:
|
|
08.02.2011, 00:43 | #114 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
потому что никто так не делает. например zip, mp3, или даже (о боже!) mpq - имеют заголовок. не для того, что бы место на ваших дисках занять, а что бы быть уверенным в том, что читаем, хотя бы косьвенно. у тома, например, снифы на выходе имеют вообще расширение .bin, как понять чоо-там-чоо-там и каким методом парсить в этом случае?
так было до сего момента, см. предыдущие версии формата. многолетняя практика показала, что это вызывает некоторый неудобняк и было бы удобнее как то более наглядно различать границы пакетов. ЗЫ. кстати, сейчас хоть кто нибудь что нибудь снифает? |
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 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
|
08.02.2011, 17:21 | #119 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
|
21.04.2011, 21:27 | #120 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
у кого нить есть готовый конвертор PKT 2.1 -> PKT 3.0?
|