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. |
06.05.2011, 13:43 | #2 |
Гость
Сообщений: n/a
|
нууууууу....через vine запустилось, тестовый файлик открыл.
но на lich.pkt, sindragosa.pkt - висяк, при повторном открытии крэш брал сниф тут http://ru-mangos.ru/showpost.php?p=21601&postcount=6 http://ru-mangos.ru/showpost.php?p=21605&postcount=9 |
06.05.2011, 13:57 | #3 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
lich.pkt имеет неизвестный формат, я его не смог открыть и другим вьювером
У него в хидере версия пкт не так записана, не 00 30, а 30 00. Мой вьювер не открывает файлы с неправильным заголовком, но при это ничего не зависает. Поменял в хекс-редакторе версию - все отлично открывается Насчет повторного открытия, да возможен краш, ресурсы не освобождаются перед открытием. Вообще нет смысла сейчас писать баг-репорты, потому что как я написал, это даже не бета версия. Это инженерная альфа версия для тестового ознакомления. -) Последний раз редактировалось Йоха; 06.05.2011 в 14:04. |
06.05.2011, 14:06 | #4 |
Гость
Сообщений: n/a
|
багрепорты в любой версии нужны
|
06.05.2011, 15:52 | #5 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Кстати, если есть баги которые поправить не имеется возможности, то лучше их написать в первой топике, дабы все видели.
|
06.05.2011, 16:17 | #6 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
да погодите вы с багами, сперва надо привести проект в порядок, а потом уже заниматься исправлением
|
06.05.2011, 18:44 | #7 |
Гость
Сообщений: n/a
|
еще вопрос....
2011_4_20-17_20.pkt пакет №90 optionalDataLength = 536870912, то есть 29 бит = 1, вно это же блин 512 Mb O.o явно ошибка сниффера или я что то путаю? |
06.05.2011, 20:31 | #8 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
в pkt файлах длина пакета и длина доп. данных хранится в типе данных int (32 бита) при чем там биты ? это же не разбор пакетов от сервера. Этого не может быть в принципе, дело в том что я для доступа к данным файла использую файлмапинг, и смещение до следующего пакета считается как Код:
ptr += (sizeof(PKT_CHUNK) + pChunk->dataLength + pChunk->optionalDataLength); Последний раз редактировалось Йоха; 06.05.2011 в 21:12. |
|
06.05.2011, 20:54 | #9 |
Гость
Сообщений: n/a
|
2^29 = 536,870,912
доп. данных хранится в типе данных uint или разницы, число со знаком или без, нет? О.о Последний раз редактировалось Minimajack; 06.05.2011 в 20:55. Причина: запятэ |
06.05.2011, 22:08 | #10 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Ищи глюки у себя в вайне или еще хз в чем
Все там в норме, добавил еще одну колонку: Код:
m_lv.InsertColumn(6, _T("OtionalDataLength"), LVCFMT_LEFT, 100); Код:
case 6: sprintf_s(column, "%d", chunk->optionalDataLength); Последний раз редактировалось Йоха; 10.05.2011 в 13:05. |
2 пользователя(ей) сказали cпасибо: | ANTOMA (30.05.2011), Konctantin (10.05.2011) |
06.05.2011, 22:11 | #11 |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Может лучше заменить 2 последние колонки на одну? Просто в поле Length писать размер data (без опкода).
|
06.05.2011, 22:33 | #12 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
Добавлено через 13 минут пакет 89, судя по размеру, был "large", а следующий за ним 90. Возможно ты как-то криво обрабатываешь сниф, я не знаю что даже предположить. Расскажи как у тебя получилось такое число ? Последний раз редактировалось Йоха; 06.05.2011 в 23:20. |
|
Пользователь сказал cпасибо: |
06.05.2011, 23:01 | #13 | |
Умный
Регистрация: 17.06.2010
Сообщений: 397
Сказал(а) спасибо: 58
Поблагодарили 55 раз(а) в 38 сообщениях
|
Цитата:
Тогда какой смысл в последней колонке? |
|
06.05.2011, 23:04 | #14 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
так и есть
просто для проверки, почитай что пишет Minimajack в OptionalData у меня пишется ип адрес:порт, в этом снифе типа: 195.12.246.210:3724 что равняется ровно 19 байтам (завершающий 0 для строки не пишется) В чем не трудно убедиться посчитав количество символов вручную. Последний раз редактировалось Йоха; 06.05.2011 в 23:14. |
07.05.2011, 01:06 | #15 |
Гость
Сообщений: n/a
|
|
10.05.2011, 12:58 | #16 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Сделал нормальный проект для VS10, пересобрал библиотеку lua в виде статической библиотеки так же в VS10.
Обновил шапку, выложил исходник проекта, луа инклуды и либы, а так же wtl, если вдруг кто не знаю где ее взять. Это все что нужно для сборки. В итоге получается самостоятельный экзешник без всяких добавочных длл. |
2 пользователя(ей) сказали cпасибо: | ANTOMA (30.05.2011), Konctantin (10.05.2011) |
10.05.2011, 13:03 | #18 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Есть где-нибудь в двух словах описалово как создать новый проект на гитхабе ?
Меня сегодня лень одолела... |
10.05.2011, 13:30 | #20 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
аккаунт вроде создался, ключи тоже. Теперь надо создать репозитарий, но в этом мануале описана работа под линуксом... в котором я понимаю чуть меньше чем ничего.
|
10.05.2011, 13:34 | #21 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
да без разницы, просто пути по другому указываются... тебе их можно не писать, а просто ПКМ -> Git Bash Here и все, а в остальном так же
|
10.05.2011, 15:12 | #22 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
ключи кое-как победил. создался пустой репозитарий, как туда добавить файлы то ?
у меня есть локальная папка pkt30view, как ее содержимое добавить на github ? Добавлено через 1 час 22 минуты блин, я наверно совсем тупой, но уже скоро конец дня, а я так и не догнал как добавить проект на сервер. Туда добавился только readme, как остальное засунуть я хз Последний раз редактировалось Йоха; 10.05.2011 в 14:39. |
10.05.2011, 15:31 | #23 |
RuDB Dev
Регистрация: 01.02.2010
Адрес: localhost
Сообщений: 592
Сказал(а) спасибо: 323
Поблагодарили 283 раз(а) в 122 сообщениях
Записей в дневнике: 2
|
Код:
git init git remote add origin ssh://username@example.com/var/git/example.git touch changelog git add changelog git commit -a -m "Initital commit" git push origin master |
10.05.2011, 15:37 | #24 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
в результате на сервере оказывается только 1 файл - changelog
я уже двадцать раз и так и сяк пробовал о епрст, каким-то образом все почему-то добавилось ... моя в недоумении ... единственное что изменилось, так это я пошел пообедал и все сразу заработало Последний раз редактировалось Йоха; 10.05.2011 в 15:41. |
10.05.2011, 15:40 | #25 |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
|
10.05.2011, 15:49 | #26 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Всем спасибо за помощь, подскажите на последок еще одну вещь, вот я что-то дописываю, как мне все изменения закинуть на сервер ?
|
10.05.2011, 15:52 | #27 | |
MaNGOS Dev
Регистрация: 11.03.2010
Сообщений: 468
Сказал(а) спасибо: 0
Поблагодарили 514 раз(а) в 163 сообщениях
|
Цитата:
Код:
git add . git commit -m "bla bla bla" git push origin master Последний раз редактировалось TOM_RUS; 10.05.2011 в 15:54. |
|
Пользователь сказал cпасибо: | Йоха (10.05.2011) |
10.05.2011, 16:57 | #29 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Обновил шапку.
Добавил меню "Закрыть файл", исправлен краш при открытии файла если уже до этого был открыт другой файл. |
10.05.2011, 17:34 | #30 |
Гость
Сообщений: n/a
|
предлагаю каждую функцию вынести в отдельный файл. Удобнее же...
|
10.05.2011, 18:14 | #31 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
На мой взгляд более целесообразно хранить все функции в одном файле:
Какие мне видятся плюсы такого подхода: - загружается модуль целиком при открытии снифа, можно инициализировать каки-нибудь переменные, выполнить некоторые стартовые процедуры общие для всего модуля. Собственно модуль луа живет пока открыт файл. - загружается файл один раз, компилируется в памяти - меньше накладных расходов на дисковое ио, и на компиляцию скриптов. А если кому-то нужна отдельная функция в отдельном файле - копипаст и за три секунды проблема решена. Последний раз редактировалось Йоха; 10.05.2011 в 18:21. |
10.05.2011, 19:45 | #33 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
я видел эту библиотеку в том числе, просто дело в том что штатные средства lua для встраивания настолько тривиальны что я думаю переписать вызовы без всяких сторонних библиотек/классов. Просто класс luawrapper я увидел одним из первых ну и что первое попалось под руку то и использовал
|
10.05.2011, 20:24 | #34 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Только еще одно замечание. Дело в том что у тебя в луа вызывается не метод объекта а функция таблици.
|
10.05.2011, 21:10 | #35 |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
ну да, я просто не знал как это правильно называется в луа
|
10.05.2011, 21:16 | #36 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Нет я не про это. У луа есть и методы в полноценном понимании и функции таблицы.
То есть вызов packet.read8() это вызов функции из таблицы, а packet:read8() вызов метода. У меня например было так. Код:
PacketParser::PacketParser(const Packet* aPkt) { pkt=aPkt; L = lua_open(); luaL_openlibs(L); luabind::open(L); module(L) [ class_<PacketParser>("CPacket") .def("Opcode", &PacketParser::GetOpcode) .def("OpcodeName", &PacketParser::GetOpcodeName) .def("ReadInt32", &PacketParser::ReadInt32) .def("ReadUInt32", &PacketParser::ReadInt32) .def("ReadInt64", &PacketParser::ReadInt64) .def("ReadUInt64", &PacketParser::ReadInt64) .def("ReadString", &PacketParser::ReadString) .def("ReadByte", &PacketParser::ReadByte) .def("ReadBytes", &PacketParser::ReadBytes) .def("DeCompress", &PacketParser::DeCompress) .def("HexPrint", &PacketParser::HexPrint) ]; globals(L)["Packet"] = this; Код:
local addon_count=Packet:ReadInt32(); Последний раз редактировалось alien; 10.05.2011 в 21:20. |
11.05.2011, 08:27 | #37 | |
Умный
Регистрация: 02.07.2010
Сообщений: 434
Сказал(а) спасибо: 27
Поблагодарили 73 раз(а) в 45 сообщениях
|
Цитата:
|
|
11.05.2011, 10:43 | #40 |
Ученый
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
|
Нет как нестранно это C++ с использованием luabind.
Ну или если уж совсем точно то c++, Qt, boost, luabind ) Правда от Qt в данном коде нечего нету ) |
Пользователь сказал cпасибо: | KiriX (11.05.2011) |
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
DBC Viewer | TOM_RUS | Tools | 10 | 05.08.2011 11:11 |
C#, DBC Viewer и компания | LordJZ | Флудильня | 13 | 02.11.2010 11:44 |