Показать сообщение отдельно
Старый 11.07.2010, 21:43   #1
alien
Ученый
 
Регистрация: 17.05.2010
Сообщений: 148
Сказал(а) спасибо: 18
Поблагодарили 25 раз(а) в 22 сообщениях
alien На верном пути
По умолчанию [разработка]Wow Packet Parser

Вот решил заняться разработкой утилитки для парсинга снифов.
Видел что существуют такие и даже какое то время пользовался WoWPacketViewer(я его тут выкладывал недавно)
Но все что я видел оно довольно неудобно.
И вот взялся за написание.
Пока проект в стадии активного написания. Во вложение набросок интерфейса(там где список пакетов планируется таблица в которой будет номер пакета, а также разный цвет фона в зависимости от направления)

Основная фишка парсера в том чтобы добавить поддержку разбора нового пакета не нужно перекомпилировать полностью приложение. Разбор осуществляет Скрипт на Lua
Вот пример скрипта разбора CMSG_AUTH_SESSION
Код:
ClientBuild=Packet:ReadInt32()
unk=Packet:ReadInt32()
acc=Packet:ReadString()
function GetClientBuild()
	return "Client: "..ClientBuild.."\n";
end

function Tmpe()
	Packet:DeCompress();
	local addon_count=Packet:ReadInt32();
	local addonTable={};
	for i=1,addon_count do
		local addonName = Packet:ReadString();
			local enabled = Packet:ReadByte();
			local crc = Packet:ReadUInt32();
			local unk4 = Packet:ReadUInt32();
		table.insert(addonTable,{["name"]=addonName,["value"]={{["name"]="Enabled",value=enabled},{["name"]="Crc",value=crc},{["name"]="Unk4",value=unk4}}});
		end
	return {{["name"]="Addon Count",value=addon_count},{["name"]="Addons",value=addonTable}};
end

function GetTextResult()
	return GetClientBuild().."unk0: "..unk.."\nAccount: "..acc;
end

testtableret={
{["name"]="Client",value=ClientBuild},
{["name"]="Unk",value=unk},
{["name"]="Account",value=acc},
{["name"]="Unk2",value=Packet:ReadInt32()},
{["name"]="Client Seed",value=Packet:ReadInt32()},
{["name"]="Unk3",value=Packet:ReadInt64()},
{["name"]="Digest",value=Packet:HexPrint(Packet:ReadBytes(20))},
{["name"]="Decompressed",value=Tmpe()},
{["name"]="Unk5",value=Packet:ReadUInt32()},

}
Да скрипт пока выглядит не очень эстетично но это еще из-за того что не решил еще полностью как лучше будет сделать.
В общем проект лично для меня носит обучающий характер. В написании используется Qt+luabind
Если есть желающие присоединится милости прошу(скорее всего как только будет что не стыдно показать в качестве сорцов проект будет опенсорс)
Миниатюры
Нажмите на изображение для увеличения
Название: packview.JPG
Просмотров: 1242
Размер:	119.3 Кб
ID:	535  
alien вне форума   Ответить с цитированием