Project: sniffitzt - a wow logging proxy [Wiki]
Summary
Files
Screenshots
Wiki
Bug Tracker
Mercurial Repository | Project Wiki (Page: read_the_xml_data-dump) |
|---|
| Last Changed 2 months ago, by balrok |
howto read the xml data dumpthis is just a guide for small understanding and how you may get some information from there first it would be good to have this dump with newlines (either take a new sniffitzt version or use sed (i just replaced the "><" with a newline) a line in this file looks like this:<packet date="12345" direction="s2c" opcode="123">123abfc</packet>
opcodesto understand the opcodes you need the mangossources or look at http://mangos.svn.sourceforge.net/viewvc/mangos/trunk/src/game/Opcodes.h cmsg_* are clientmessages and smsg_* are servermessages then you have to convert the hex-value into a decimal value (i use http://www.parkenet.com/apl/HexDecConverter.html) and then you can search the log for this (my searchterm is allways "123" (with the quotation marks) because else it will find to much senseless stuff in the packet data) the packet data:maybe you first will have a look at http://en.wikipedia.org/wiki/Endianness#Little-endian i don't know if this data can be saved as big endian too to read the data you need to know, many bytes represent a value. if you take the mangossource as reference uint32() = 4byte uint64=8byte uint8=1 byte and if there is text sent with length its length bytes note a byte represents a value like a3,ff,00... you also have to watch out for this, if you reorder it to human-readable endianness practical example:i want to understand a random soundid. example #2another (shorter example) to demonstrate what happens with 2 values i take SMSG_MESSAGECHAT (to show you how you can read some text) WorldPacket data(SMSG_MESSAGECHAT, 200); data << (uint8)CHAT_MSG_SAY; data << (uint32)language; data << (uint64)GetGUID(); data << (uint32)language; //language 2.1.0 ? data << (uint64)GetGUID(); data << (uint32)(text.length()+1); data << text; data << (uint8)chatTag(); and an examplestring looks like: 010700000052170D00000000002200000052170D00000000000A000000627566667320706C730000 splitted: 01 07000000 52170D0000000000 22000000 52170D0000000000 0A000000 627566667320706C7300 00 cause i found somewhere that CHAT_MSG_SAY=01 and i want a good text example (many stuff is senseless addon spam) so chat_msg_say = 01 (uint8 = 1byte (which doesnt have some endianness)) language1 = 07 00 00 00 = 00 00 00 07 guid1 = 52 17 0D 00 00 00 00 00 = 00 00 00 00 00 0D 17 52 language2 = 22 00 00 00 = 00 00 00 22 guid2 = 52 17 0D 00 00 00 00 00 = 00 00 00 00 00 0D 17 52 textlength = 0A 00 00 00 = 00 00 00 0A = 10 - so the text field will be 10 byte textfields don't have endiannes, to make them human readable you just have to convert the asciichars, if you want to write a program for this, for python "chr" works for german letters good if you want to do it by hand look at http://www.goascii.de/ there is a converter (you even can enter hex) or if you're pr01337 you can read the hex ascii aswell as the normal text and ask yourself the whole time why we want to decrypt it ^^ text = 62 75 66 66 73 20 70 6C 73 00 = buffs pls 0x00 the 0x00 seems to terminate the strings.. and the decoded text is a cool way to see what intelligent game we all play (: and last but not least, there is one bytefield missing: chattag = 00 |