|
Регистрация | Файлы | Правила | Альбомы | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
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 Код:
function имя_луа_функции1() end function имя_луа_функции2() end В скрипте 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 или конца пакета Код:
print(string) println(string) Приглашаются все желающие для совместной разработки В аттаче последня сборка Последний раз редактировалось Йоха; 21.05.2011 в 09:16. |
16.05.2011, 15:33 | #81 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
это верное замечание. Сейчас я делаю проект что бы в нем уже было все необходимое и собираться он будет нажатием одной кнопки |
|
16.05.2011, 15:41 | #82 |
WowCore Dev
Регистрация: 31.03.2010
Сообщений: 468
Сказал(а) спасибо: 73
Поблагодарили 106 раз(а) в 70 сообщениях
|
|
17.05.2011, 12:12 | #83 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Выложил новый проект на гитхаб, там внутри все нужные хидеры и библиотеки
Пределал немного архитектуру приложения Добавлена возможность открывать несколько файлов и переключаться по ним при помощи вкладок. Дописал нормальный скролинг для окна вывода Работаем дальше ... |
17.05.2011, 13:03 | #84 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
Запилил себе собственный форк
Патчи: - Файл исключений .gitignore: patch, с ним git не будет предлагать сунуть в коммит, например, временные файлы Visual Studio. Т.к. отдельной папки под бинарники нет, я пока вписал туда пути к Release и Debug Output директориям. - Вместо Document пишем имя файла без расширения в качестве названия таба: diff (т.к. гитхаб генерирует несколько патчей для нескольких коммитов). Как у вас, я использовал табы вместо пробелов. (Вероятно, при использовании юникода придется конвертировать строки) Кстати, вместо патчей для применения изменений в основную ветку разработки из какого-либо форка вы можете создать локальный бранч, отслеживающий форк, и смержить его локально, или использовать Fork Queue для удаленного слияния веток или отдельных cherry-pick-ов, или накладывать Pull Requests (если предложат). |
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 |
Гость
Сообщений: 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()) |
17.05.2011, 17:56 | #90 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
это MOTD
SMSG_MOTD |
17.05.2011, 19:35 | #91 |
Гость
Сообщений: n/a
|
Йоха...
ззы хотел увидеть разбор пакета с использованием циклов |
17.05.2011, 19:53 | #92 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
|
17.05.2011, 20:14 | #93 |
Гость
Сообщений: n/a
|
|
17.05.2011, 20:20 | #94 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
В парсере доступен весь арсенал языка луа.
это дело, приделаю тоже приделаю |
17.05.2011, 20:21 | #95 | |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Цитата:
Код:
t = packet.read32() while (t) { output.print(packet.readstring()) t--; } |
|
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 |
Супер-модератор
Регистрация: 07.03.2010
Сообщений: 647
Сказал(а) спасибо: 100
Поблагодарили 252 раз(а) в 123 сообщениях
|
А мне очень понравился (и у себя я такую возможность сделал) метод распарсивания пакета у 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/ |
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 Последний раз редактировалось Йоха; 17.05.2011 в 21:16. |
17.05.2011, 23:02 | #99 |
Гость
Сообщений: 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пасибо: |
21.05.2011, 09:00 | #102 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Вот набросал парсер этого пакета для билда 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 Код:
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, 11:04 | #104 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
спасибо, исправлю
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DBC Viewer | TOM_RUS | Tools | 10 | 05.08.2011 11:11 |
C#, DBC Viewer и компания | LordJZ | Флудильня | 13 | 02.11.2010 11:44 |