Ru-MaNGOS

Вернуться   Ru-MaNGOS > Дополнения > Tools

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

Tools Обсуждение программ для MaNGOS

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.05.2011, 12:30   #1
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию PKT v3.0 View

Проект на гитхабе:
https://github.com/Johnson7/pkt30view

Скриншот:


Возможности программы:

- Открывает .pkt файл формата 3.0, описание формата тут
- По умолчанию отображает пакеты в шестнадцатеричном представлении.
- Можно задавать имена для пакетов и имя функции на языке lua для парсинга пакета
- позволяет задавать имена опкодов и парсеры специфичные для конкретного билда wow.
Для этого необходимо создать в папке где находится екзешник - папку с номером билда wow от которого сделан сниф
Внутри папки создать 2 файла: opcodes.txt и parsers.lua

формат файла opcodes.txt :
Код:
опкод1, название_опкода1, имя_луа_функции1
опкод2, название_опкода2, имя_луа_функции2
в файле parsers.lua содержатся функции парсинга
Код:
function имя_луа_функции1()
end

function имя_луа_функции2()
end
при выделении строки в списке программы вызывается функция из загруженного lua файла соответсвующая опкоду, которая задается в файле opcodes.txt, если функция не задана, то соответственно ничего не вызывается.

В скрипте lua помимо стандартных доступны 2 библиотеки: packet и output

для packet доступны следующие функции:
Код:
length()		- возвращает длину данных пакета
decompress()		- распаковать compressed пакет

read8()			- читает BYTE
read16()		- читает WORD
read32()		- читает DWORD
readfloat()		- читает float
readguid()		- читает GUID (8 байт)
readpackedguid()	- читает упакованый GUID
readstring([len])	- читает строку длиной len, если вызывать без параметра,
			читает строку до завершающего 0 или конца пакета
для output :
Код:
print(string)
println(string)

Приглашаются все желающие для совместной разработки


В аттаче последня сборка
Миниатюры
Нажмите на изображение для увеличения
Название: screen.jpg
Просмотров: 2266
Размер:	113.0 Кб
ID:	991  
Вложения
Тип файла: zip pkt30view_.zip (318.4 Кб, 992 просмотров)

Последний раз редактировалось Йоха; 21.05.2011 в 09:16.
Йоха вне форума   Ответить с цитированием
9 пользователя(ей) сказали cпасибо:
ANTOMA (30.05.2011), Den (06.05.2011), KiriX (17.05.2011), Konctantin (10.05.2011), Mayss (15.05.2011), Ranger (17.05.2011), SilverIce (13.05.2011), srv38 (10.05.2011), sven (16.05.2011)
Старый 16.05.2011, 15:33   #81
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от RomanRom2 Посмотреть сообщение
в продолжение списка функциональностей (feature spec):

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

как одно из решений:
в корне программы находятся каталоги по номеру билда (10314, 12340, ...), в которых лежат соответствующие lua-парсеры. при загрузке снифа мы знаем какой билд и грузим нужные парсеры из соответствующего каталога.
Рома, эта фича изначально присутствует в проге

Цитата:
Сообщение от RomanRom2 Посмотреть сообщение
ЗЫ. йоха, добавь в проект на гит все необходимые библиотеки в какой нибудь глобальный libs и настрой проект что бы он юзал эти библиотеки. проект должен собираться без каких либо танцов с бубнами.
это верное замечание. Сейчас я делаю проект что бы в нем уже было все необходимое и собираться он будет нажатием одной кнопки
Йоха вне форума   Ответить с цитированием
Старый 16.05.2011, 15:41   #82
RomanRom2
WowCore Dev
 
Аватар для RomanRom2
 
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
RomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всемRomanRom2 Это имя известно всем
По умолчанию

Цитата:
Сообщение от Йоха Посмотреть сообщение
Рома, эта фича изначально присутствует в проге

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

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

Работаем дальше ...
Йоха вне форума   Ответить с цитированием
6 пользователя(ей) сказали cпасибо:
ANTOMA (30.05.2011), Den (17.05.2011), KiriX (17.05.2011), Konctantin (17.05.2011), LordJZ (17.05.2011), srv38 (17.05.2011)
Старый 17.05.2011, 13:03   #84
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Запилил себе собственный форк

Патчи:
- Файл исключений .gitignore: patch, с ним git не будет предлагать сунуть в коммит, например, временные файлы Visual Studio. Т.к. отдельной папки под бинарники нет, я пока вписал туда пути к Release и Debug Output директориям.
- Вместо Document пишем имя файла без расширения в качестве названия таба: diff (т.к. гитхаб генерирует несколько патчей для нескольких коммитов). Как у вас, я использовал табы вместо пробелов. (Вероятно, при использовании юникода придется конвертировать строки)

Кстати, вместо патчей для применения изменений в основную ветку разработки из какого-либо форка вы можете создать локальный бранч, отслеживающий форк, и смержить его локально, или использовать Fork Queue для удаленного слияния веток или отдельных cherry-pick-ов, или накладывать Pull Requests (если предложат).
LordJZ вне форума   Ответить с цитированием
Старый 17.05.2011, 14:14   #85
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Небольшие исправления - пересобрал библиотеку zlib. Тот проект для VS10 который идет с исходниками с оффсайта у меня не собирается, выдает кучу ошибок. Разбираться нет желания, сделал проект либы сам, все заработало как надо.
Ну и добавил в основную программу нереализованые в этой переделке функции луа.
Теперь все так как объявлено в шапке.
Осталось приделать вывод хекс-вью.

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

Доделал hex-view.

Надо для интереса какой-нибудь парсер на луа написать

Какой есть пакет не сложный ?
Йоха вне форума   Ответить с цитированием
Старый 17.05.2011, 16:06   #87
Minimajack
Гость
 
Сообщений: n/a
По умолчанию

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

В луа функции packet.readstring() добавлена внутренняя конвертация строки из UTF8 в 1251.
Теперь строки из локализованых снифов будут отображаться корректно.
Йоха вне форума   Ответить с цитированием
Старый 17.05.2011, 17:20   #89
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Пофиксил некоторые глупые баги
В новых опкодах 14007 не знаю какой там SMSG_CHAR_ENUM, нашел некий опкод 0x987f, в нем выводится приветствие при входе в мир.
Сделал мелкую lua функцию:
Код:
  t = packet.read32()
  output.print(packet.readstring())
  output.print(packet.readstring())
  output.print(packet.readstring())
  output.print(packet.readstring())
Результат выглядит так :
Миниатюры
Нажмите на изображение для увеличения
Название: Untitled-1.jpg
Просмотров: 651
Размер:	86.5 Кб
ID:	973  
Йоха вне форума   Ответить с цитированием
Старый 17.05.2011, 17:56   #90
Lordronn
Умный
 
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
Lordronn Скоро придёт к известности
По умолчанию

это MOTD

SMSG_MOTD
Lordronn вне форума   Ответить с цитированием
Старый 17.05.2011, 19:35   #91
Minimajack
Гость
 
Сообщений: n/a
По умолчанию

Йоха...
  1. минимальные фильтры
  2. сортировка по полям ( размер, опкод, тик коунт)
  3. и время...если в снифе одни нули, то и выводить колонку смысла нет
  4. открыл сниффф....какой версии? - хз; доп данные есть? - хз...надо отображать все. Не все телепаты...в статус баре, в доп.окне, кнопочка...
зы под wine запускается
ззы хотел увидеть разбор пакета с использованием циклов
  Ответить с цитированием
Старый 17.05.2011, 19:53   #92
LordJZ
Супер-модератор
 
Аватар для LordJZ
 
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
LordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранитаLordJZ Как самоцвет среди гранита
По умолчанию

Цитата:
Сообщение от Minimajack Посмотреть сообщение
...
сортировка по полям ( размер, опкод, тик коунт)
...
Зачем?
LordJZ вне форума   Ответить с цитированием
Старый 17.05.2011, 20:14   #93
Minimajack
Гость
 
Сообщений: n/a
По умолчанию

Цитата:
Сообщение от LordJZ Посмотреть сообщение
Зачем?
например: сравнить 2 одинаковых опкода...не надо искать среди списка
  Ответить с цитированием
Старый 17.05.2011, 20:20   #94
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от Minimajack Посмотреть сообщение
хотел увидеть разбор пакета с использованием циклов
В парсере доступен весь арсенал языка луа.

Цитата:
Сообщение от Minimajack Посмотреть сообщение
минимальные фильтры
это дело, приделаю

Цитата:
Сообщение от Minimajack Посмотреть сообщение
открыл сниффф....какой версии? - хз; доп данные есть? - хз...надо отображать все. Не все телепаты...в статус баре, в доп.окне, кнопочка...
тоже приделаю
Йоха вне форума   Ответить с цитированием
Старый 17.05.2011, 20:21   #95
Konctantin
RuDB Dev
 
Аватар для Konctantin
 
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
Konctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всемKonctantin Это имя известно всем
По умолчанию

Цитата:
t = packet.read32()
output.print(packet.readstring())
output.print(packet.readstring())
output.print(packet.readstring())
output.print(packet.readstring())
там так (псевдокод):

Код:
t = packet.read32()
while (t)
{
     output.print(packet.readstring())
     t--;
}
__________________
Konctantin вне форума   Ответить с цитированием
Старый 17.05.2011, 20:32   #96
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Нижеприведенный код на lua дает нужный результат

Код:
function smsg_motd()
	t = packet.read32()
	for i = 1, t do
		output.print(packet.readstring())
	end
end

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

А мне очень понравился (и у себя я такую возможность сделал) метод распарсивания пакета у WCell:
Код:
var count = ReadUInt32("MOTD Lines");
For(count, i => ReadCString("MOTD Line #{0}: ", i));
Получается:
Код:
MOTD Lines: 4
MOTD Line 0: Добро пожаловать в World of Warcraft!
MOTD Line 1: Для нас важна безопасность учетных записей игроков,
MOTD Line 2: поэтому мы рекомендуем Вам посетить следующую
MOTD Line 3: страницу: http://eu.battle.net/security/
LordJZ вне форума   Ответить с цитированием
Старый 17.05.2011, 21:12   #98
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

аналог на луа:
Код:
function smsg_motd()
	count = packet.read32()
	output.print("MOTD lines : "..count)
	for i = 1, count do
		output.print("MOTD line "..(i-1)..": "..packet.readstring())
	end
end
Получается:
Миниатюры
Нажмите на изображение для увеличения
Название: out.jpg
Просмотров: 1130
Размер:	27.1 Кб
ID:	974  

Последний раз редактировалось Йоха; 17.05.2011 в 21:16.
Йоха вне форума   Ответить с цитированием
Старый 17.05.2011, 23:02   #99
Minimajack
Гость
 
Сообщений: n/a
По умолчанию

почему hex и вывод lua нельзя скопировать? так задумано? будет изменено? У меня не работает?
  Ответить с цитированием
Старый 18.05.2011, 08:07   #100
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

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

- наконец-то исправлена колонка "время" теперь там выводится значение времени из снифа
- переписаны окна вывода hex и lua, теперь текст из них можно скопировать
- добавлена строка состояния с информацией о билде снифа, языке, и ИД снифера
- добавлена функция в lua output.println. Ее нужно использовать когда необходимо вывести текст и перевести следующий вывод на новую строку. Эквивалентна printf("some text\n")
а функция output.print эквивалентна printf("some text")

Последний раз редактировалось Йоха; 20.05.2011 в 13:57.
Йоха вне форума   Ответить с цитированием
3 пользователя(ей) сказали cпасибо:
ANTOMA (30.05.2011), KiriX (20.05.2011), Konctantin (20.05.2011)
Старый 21.05.2011, 09:00   #102
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

Цитата:
Сообщение от Minimajack Посмотреть сообщение
smsg_char_enum
Вот набросал парсер этого пакета для билда 14007, там правда в середине пакета какие-то мзменения ... в отличие от того кода что приводил TOM_RUS в своей теме ...

Код:
  function smsg_enum_char()
  count = packet.read8()
  output.println("Character count : "..count)
  output.println(" ")
  for i = 1, count do
    guid = packet.readguid()
    name = packet.readstring()
    race = packet.read8()
    class = packet.read8()
    gender = packet.read8()
    skin = packet.read8()
    face = packet.read8()
    hair_style = packet.read8()
    hair_color = packet.read8()
    facial_hair = packet.read8()
    level = packet.read8()

    output.println("name = "..name..", guid = "..guid)
    output.println(t_race[race]..", "..t_class[class]..", "..t_gender[gender + 1]..", "..level.." lvl")
    output.println(" ")

    zone = packet.read32()
    map = packet.read32()
    x = packet.readfloat()
    y = packet.readfloat()
    z = packet.readfloat()
    guildid = packet.read32()
    flags = packet.read8()
    cflags = packet.read8()
	unk1 = packet.read8()
    first_login = packet.read8()
    pet_id = packet.read32()
    pet_level = packet.read32()
    pet_family = packet.read32()
  
    for j = 1, INVENTORY_SLOT_BAG_END do
      item_display_id = packet.read32()
	  item_type = packet.read8()
	  item_enchant = packet.read32()
    end
  end
end
И небходимо в начале файла parsers.lua объявить следующие таблицы:
Код:
local INVENTORY_SLOT_BAG_END = 24
local t_gender = {"male", "female"}
local t_class = {"warrior", "paladin", "hunter", "4", "5", "6", "7", "priest", "warlock", "10"}
local t_race = {"human", "2", "dwarf", "night elf", "5", "6", "gnome", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "vorgen"}
Я их полностью не заполнял, а то только те значения которые для моих чаров нужны

Получается такой вывод:
Код:
Character count : 5
----------------------------------------------
name = Йохансон, guid = 2C863A0200000007
human, warrior, male, 85lvl
-
name = Мегагнумка, guid = EE88520200000007
gnome, warlock, female, 85lvl
-
name = Хеалбот, guid = F388520200000007
dwarf, paladin, male, 85lvl
-
name = Йоханс, guid = C8A95C0200000007
night elf, hunter, male, 78lvl
-
name = Йоханссон, guid = A2D7A20300000007
vorgen, priest, male, 7lvl
Йоха вне форума   Ответить с цитированием
Старый 21.05.2011, 10:53   #103
TOM_RUS
MaNGOS Dev
 
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
TOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небесTOM_RUS Как свет с небес
По умолчанию

Гуиды чаров reversed.
TOM_RUS вне форума   Ответить с цитированием
Пользователь сказал cпасибо:
Йоха (21.05.2011)
Старый 21.05.2011, 11:04   #104
Йоха
Умный
 
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
Йоха Скоро придёт к известности
По умолчанию

спасибо, исправлю
Йоха вне форума   Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DBC Viewer TOM_RUS Tools 10 05.08.2011 11:11
C#, DBC Viewer и компания LordJZ Флудильня 13 02.11.2010 11:44


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


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