public static void HandleDestroyObject(Packet packet) { if (packet.Direction == Direction.ServerToClient) { var guid = new byte[8]; guid[3] = packet.ReadBit(); guid[2] = packet.ReadBit(); guid[4] = packet.ReadBit(); guid[1] = packet.ReadBit(); packet.ReadBit("Despawn Animation"); guid[7] = packet.ReadBit(); guid[0] = packet.ReadBit(); guid[6] = packet.ReadBit(); guid[5] = packet.ReadBit(); packet.ParseBitStream(guid, 0, 4, 7, 2, 6, 3, 1, 5); packet.WriteGuid("Object Guid", guid); } else { packet.WriteLine(" : CMSG_PVP_LOG_DATA"); } }
public static void HandleServerUpdateAccountData(Packet packet) { var guid = new byte[8]; var t = packet.ReadBits(3); packet.WriteLine("Data Type: " + (AccountDataType)t); packet.StartBitStream(guid, 5, 1, 3, 7, 0, 4, 2, 6); packet.ReadXORBytes(guid, 3, 1, 5); var decompCount = packet.ReadInt32(); var compCount = packet.ReadInt32(); var pkt = packet.Inflate(compCount, decompCount, false); var data = pkt.ReadWoWString(decompCount); pkt.ClosePacket(false); packet.WriteLine("Account Data {0}", data); packet.ReadXORBytes(guid, 7, 4, 0, 6, 2); packet.ReadTime("Login Time"); packet.WriteGuid("GUID", guid); }
public static void HandleVoidItemSwapResponse(Packet packet) { packet.ReadBit("Has Src Item id (Inv)"); byte[] itemId2 = packet.StartBitStream(4, 1, 6, 0, 3, 7, 2, 5); packet.ReadBit("Has Dest Item id (Inv)"); byte[] itemId1 = itemId1 = packet.StartBitStream(6, 0, 3, 2, 1, 5, 7, 4); var usedSrcSlot = !packet.ReadBit("Used Src Slot (Inv)"); // always set? var usedDestSlot = !packet.ReadBit("Used Dest Slot (Inv)"); packet.ParseBitStream(itemId1, 3, 7, 2, 5, 0, 1, 4, 6); packet.WriteLine("Dest Item Id: {0}", BitConverter.ToUInt64(itemId1, 0)); packet.ParseBitStream(itemId2, 0, 2, 7, 5, 6, 4, 3, 1); packet.WriteLine("Src Item Id: {0}", BitConverter.ToUInt64(itemId2, 0)); if (usedSrcSlot) packet.ReadInt32("New Slot for Src Item"); if (usedDestSlot) packet.ReadInt32("New Slot for Dest Item"); }
public static void HandleAuthResponse434(Packet packet) { var isQueued = packet.ReadBit(); var hasAccountInfo = packet.ReadBit(); if (isQueued) { var unkByte = packet.ReadByte(); packet.WriteLine("Unk Byte: " + unkByte); var position = packet.ReadInt32(); packet.WriteLine("Queue Position: " + position); } if (hasAccountInfo) { packet.ReadInt32("Billing Time Remaining"); packet.ReadEnum<ClientType>("Account Expansion", TypeCode.Byte); packet.ReadInt32("Unknown UInt32"); packet.ReadEnum<ClientType>("Player Expansion", TypeCode.Byte); packet.ReadInt32("Billing Time Rested"); packet.ReadEnum<BillingFlag>("Billing Flags", TypeCode.Byte); } var code = (ResponseCode)packet.ReadByte(); packet.WriteLine("Auth Code: " + code); }
public static void HandleClientWardenData(Packet packet) { var opcode = packet.ReadEnum<WardenClientOpcode>("Warden Client Opcode", TypeCode.Byte); switch (opcode) { case WardenClientOpcode.CheatCheckResults: { var length = packet.ReadUInt16("Check Result Length"); packet.ReadInt32("Check Result Checksum"); var result = packet.ReadBytes(length); packet.WriteLine("Check Results: " + Utilities.ByteArrayToHexString(result)); break; } case WardenClientOpcode.TransformedSeed: { var sha1 = packet.ReadBytes(20); packet.WriteLine("SHA1 Seed: " + Utilities.ByteArrayToHexString(sha1)); break; } } }
public static void ParseBattlenet(Packet packet) { try { var bnetPacket = new BattlenetPacket(packet); Action<BattlenetPacket> handler; bnetPacket.Stream.WriteLine(bnetPacket.GetHeader()); if (BattlenetHandlers.TryGetValue(bnetPacket.Header, out handler)) { handler(bnetPacket); packet.Status = ParsedStatus.Success; } else { packet.AsHex(); packet.Status = ParsedStatus.NotParsed; } } catch (Exception ex) { packet.WriteLine(ex.GetType().ToString()); packet.WriteLine(ex.Message); packet.WriteLine(ex.StackTrace); packet.Status = ParsedStatus.WithErrors; } }
public static void HandleVoiceRosterUpdate(Packet packet) { packet.ReadGuid("Group GUID"); packet.ReadInt16("Channel ID"); packet.ReadByte("Channel Type"); // 0: channel, 2: party packet.ReadCString("Channel Name"); packet.WriteLine("Encryption Key: " + Utilities.ByteArrayToHexString(packet.ReadBytes(16))); packet.WriteLine("IP: " + packet.ReadIPAddress()); packet.ReadInt16("Voice Server Port"); var count = packet.ReadByte("Player Count"); packet.ReadGuid("Leader GUID"); var leaderFlags1 = packet.ReadByte(); packet.WriteLine("Leader Flags 1: 0x" + leaderFlags1.ToString("X2")); var leaderFlags2 = packet.ReadByte(); packet.WriteLine("Leader Flags 2: 0x" + leaderFlags2.ToString("X2")); for (var i = 0; i < count - 1; i++) { packet.ReadGuid("Player GUID"); packet.ReadByte("Index"); var flags1 = packet.ReadByte(); packet.WriteLine("Flags 1: 0x" + flags1.ToString("X2")); var flags2 = packet.ReadByte(); packet.WriteLine("Flags 2: 0x" + flags2.ToString("X2")); } }
public static void HandleServerAddonsList(Packet packet) { // This packet requires _addonCount from CMSG_AUTH_SESSION to be parsed. if (_addonCount == -1) { packet.WriteLine("CMSG_AUTH_SESSION was not received - cannot successfully parse this packet."); packet.ReadToEnd(); return; } for (var i = 0; i < _addonCount; i++) { packet.ReadByte("Addon State", i); var sendCrc = packet.ReadBoolean("Use CRC", i); if (sendCrc) { var usePublicKey = packet.ReadBoolean("Use Public Key", i); if (usePublicKey) { var pubKey = packet.ReadChars(256); packet.Write("[{0}] Public Key: ", i); foreach (var t in pubKey) packet.Write(t.ToString(CultureInfo.InvariantCulture)); } packet.ReadInt32("Unk Int32", i); } if (packet.ReadBoolean("Use URL File", i)) packet.ReadCString("Addon URL File", i); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_8_9464)) { var bannedCount = packet.ReadInt32("Banned Addons Count"); for (var i = 0; i < bannedCount; i++) { packet.ReadInt32("ID", i); var unkStr2 = packet.ReadBytes(16); packet.WriteLine("[{0}] Unk Hash 1: {1}", i, Utilities.ByteArrayToHexString(unkStr2)); var unkStr3 = packet.ReadBytes(16); packet.WriteLine("[{0}] Unk Hash 2: {1}", i, Utilities.ByteArrayToHexString(unkStr3)); packet.ReadInt32("Unk Int32 3", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_3a_11723)) packet.ReadInt32("Unk Int32 4", i); } } }
public static void HandleCombatLogMultiple(Packet packet) { var count = packet.ReadInt32("Count"); var unk1 = packet.ReadInt32(); for (var i = 0; i < count; i++) { var unk2 = packet.ReadInt32(); packet.WriteLine("["+ i+ "] Unknown: {0}", unk1 - unk2); var opcode = Opcodes.GetOpcode(packet.ReadInt32()); packet.WriteLine("Opcode: " + opcode); switch (opcode) { case Opcode.SMSG_SPELLHEALLOG: { ReadSpellHealLog(ref packet, i); break; } case Opcode.SMSG_SPELLENERGIZELOG: { ReadSpellEnergizeLog(ref packet, i); break; } case Opcode.SMSG_PERIODICAURALOG: { ReadPeriodicAuraLog(ref packet, i); // sub_5EEE10 break; } case Opcode.SMSG_SPELLLOGEXECUTE: { ReadSpellLogExecute(ref packet, i); break; } case Opcode.SMSG_SPELLNONMELEEDAMAGELOG: { ReadSpellNonMeleeDamageLog(ref packet, i); break; } case Opcode.SMSG_SPELLLOGMISS: { ReadSpellMissLog(ref packet, i); break; } case Opcode.SMSG_SPELLSTEALLOG: case Opcode.SMSG_SPELLDISPELLOG: case Opcode.SMSG_SPELLBREAKLOG: { ReadSpellRemoveLog(ref packet, i); break; } default: throw new InvalidDataException("Unknown Spell Log Type/Opcode: " + opcode); } } }
public static void HandleUpdateObject(Packet packet) { uint map = packet.ReadUInt16("Map"); var count = packet.ReadUInt32("Count"); //var type = packet.ReadByte(); //var typeString = ((UpdateType2)type).ToString(); for (var i = 0; i < count; i++) { packet.WriteLine("StartPosFor: " + packet.Position); var type = packet.ReadByte(); var typeString = ((UpdateTypeCataclysm)type).ToString(); packet.ResetBitReader(); packet.WriteLine("[" + i + "] UpdateType: " + typeString); switch (typeString) { case "Values": { var guid = packet.ReadPackedGuid("GUID", i); WoWObject obj; var updates = CoreParsers.UpdateHandler.ReadValuesUpdateBlock(packet, guid.GetObjectType(), i, false); if (Storage.Objects.TryGetValue(guid, out obj)) { if (obj.ChangedUpdateFieldsList == null) obj.ChangedUpdateFieldsList = new List<Dictionary<int, UpdateField>>(); obj.ChangedUpdateFieldsList.Add(updates); } break; } case "CreateObject1": case "CreateObject2": { var guid = packet.ReadPackedGuid("GUID", i); ReadCreateObjectBlock(ref packet, guid, map, i); break; } case "DestroyObjects": { CoreParsers.UpdateHandler.ReadObjectsBlock(packet, i); break; } } } }
public static void HandleServerAddonsList(Packet packet) { for (var i = 0; i < _addonCount; i++) { packet.ReadByte("Addon State", i); var sendCrc = packet.ReadBoolean("Use CRC", i); if (sendCrc) { var usePublicKey = packet.ReadBoolean("Use Public Key", i); if (usePublicKey) { var pubKey = packet.ReadChars(256); packet.Write("[{0}] Public Key: ", i); foreach (var t in pubKey) packet.Write(t); } packet.ReadInt32("Unk Int32", i); } if (packet.ReadBoolean("Use URL File", i)) packet.ReadCString("Addon URL File", i); } if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_0_8_9464)) { var bannedCount = packet.ReadInt32("Banned Addons Count"); for (var i = 0; i < bannedCount; i++) { packet.ReadInt32("ID", i); var unkStr2 = packet.ReadBytes(16); packet.WriteLine("[{0}] Unk Hash 1: {1}", i, Utilities.ByteArrayToHexString(unkStr2)); var unkStr3 = packet.ReadBytes(16); packet.WriteLine("[{0}] Unk Hash 2: {1}", i, Utilities.ByteArrayToHexString(unkStr3)); packet.ReadInt32("Unk Int32 3", i); if (ClientVersion.AddedInVersion(ClientVersionBuild.V3_3_3a_11723)) packet.ReadInt32("Unk Int32 4", i); } } }
public static void HandleDBReply(Packet packet) { var type = packet.ReadUInt32E<DB2Hash>("TableHash"); var entry = packet.ReadInt32("RecordID"); var timeStamp = packet.ReadUInt32(); packet.AddValue("Timestamp", Utilities.GetDateTimeFromUnixTime(timeStamp)); var allow = packet.ReadBit("Allow"); var size = packet.ReadInt32("Size"); var data = packet.ReadBytes(size); var db2File = new Packet(data, packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName); if (entry < 0 || !allow) { packet.WriteLine("Row {0} has been removed.", -entry); HotfixStoreMgr.RemoveRecord(type, entry); Storage.AddHotfixData(entry, type, true, timeStamp); } else { packet.AddSniffData(StoreNameType.None, entry, type.ToString()); HotfixStoreMgr.AddRecord(type, entry, db2File); Storage.AddHotfixData(entry, type, false, timeStamp); db2File.ClosePacket(false); } }
public static void HandleGroupInvite422(Packet packet) { // note: this handler is different in 4.3.0, it got a bit fancy. var guidBytes = new byte[8]; guidBytes[6] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[5] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[0] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[3] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[4] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[7] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[1] = (byte)(packet.ReadBit() ? 1 : 0); guidBytes[2] = (byte)(packet.ReadBit() ? 1 : 0); packet.ReadInt32("Unk0"); // Always 0 packet.ReadInt32("Unk1"); // Non-zero in cross realm parties (1383) packet.ReadCString("Name"); if (guidBytes[0] != 0) guidBytes[0] ^= packet.ReadByte(); if (guidBytes[7] != 0) guidBytes[7] ^= packet.ReadByte(); if (guidBytes[4] != 0) guidBytes[4] ^= packet.ReadByte(); if (guidBytes[1] != 0) guidBytes[1] ^= packet.ReadByte(); if (guidBytes[2] != 0) guidBytes[2] ^= packet.ReadByte(); if (guidBytes[6] != 0) guidBytes[6] ^= packet.ReadByte(); if (guidBytes[5] != 0) guidBytes[5] ^= packet.ReadByte(); packet.ReadCString("Realm Name"); // Non-empty in cross realm parties if (guidBytes[3] != 0) guidBytes[3] ^= packet.ReadByte(); // Non-zero in cross realm parties packet.WriteLine("GUID: {0}", new Guid(BitConverter.ToUInt64(guidBytes, 0))); }
public static void HandleSetActionButton(Packet packet) { packet.ReadByte("Slot Id"); var actionId = packet.StartBitStream(0, 4, 7, 2, 5, 3, 1, 6); packet.ParseBitStream(actionId, 7, 3, 0, 2, 1, 4, 5, 6); packet.WriteLine("Action Id: {0}", BitConverter.ToUInt32(actionId, 0)); }
public static void HandleCorpseQueryResponse(Packet packet) { var pos = new Vector3(); var guid = new byte[8]; guid[4] = packet.ReadBit(); guid[2] = packet.ReadBit(); guid[5] = packet.ReadBit(); guid[3] = packet.ReadBit(); guid[1] = packet.ReadBit(); guid[6] = packet.ReadBit(); guid[0] = packet.ReadBit(); packet.ReadBit("Corpse Found"); guid[7] = packet.ReadBit(); packet.ReadXORByte(guid, 3); packet.ReadXORByte(guid, 1); packet.ReadXORByte(guid, 2); packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); pos.X = packet.ReadSingle(); packet.ReadXORByte(guid, 6); packet.ReadXORByte(guid, 4); packet.ReadXORByte(guid, 5); packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Corpse Map ID"); packet.ReadXORByte(guid, 7); pos.Z = packet.ReadSingle(); packet.ReadXORByte(guid, 0); pos.Y = packet.ReadSingle(); packet.WriteLine("Position: {0}", pos); packet.WriteGuid("Corpse Low GUID", guid); }
public static void HandleAuthResponse(Packet packet) { var code = (ResponseCode)packet.ReadByte(); packet.WriteLine("Auth Code: " + code); switch (code) { case ResponseCode.AUTH_OK: { ReadAuthResponseInfo(ref packet); break; } case ResponseCode.AUTH_WAIT_QUEUE: { if (packet.GetLength() <= 6) { ReadQueuePositionInfo(ref packet); break; } ReadAuthResponseInfo(ref packet); ReadQueuePositionInfo(ref packet); break; } } }
public static void HandleCreateUpdateGMTicket(Packet packet) { var ticketResponse = packet.ReadEnum<GMTicketResponse>("TicketResponse", TypeCode.Int32); switch (ticketResponse) { case GMTicketResponse.Failure: packet.WriteLine("Action failed"); break; case GMTicketResponse.Success: packet.WriteLine("Action succeeded"); break; case GMTicketResponse.Deleted: packet.WriteLine("Ticket deleted"); break; } }
public static void HandleUpdateWorldState(Packet packet) { packet.ReadBit("bit18"); var val = packet.ReadInt32(); var field = packet.ReadInt32(); packet.WriteLine("Field: {0} - Value: {1}", field, val); }
public static void HandleUpdateObject(Packet packet) { uint map = MovementHandler.CurrentMapId; if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_0_1_13164)) map = packet.ReadUInt16("Map"); var count = packet.ReadUInt32("Count"); if (ClientVersion.RemovedInVersion(ClientVersionBuild.V3_0_2_9056)) packet.ReadBoolean("Has Transport"); for (var i = 0; i < count; i++) { var type = packet.ReadByte(); var typeString = ClientVersion.AddedInVersion(ClientType.Cataclysm) ? ((UpdateTypeCataclysm)type).ToString() : ((UpdateType)type).ToString(); packet.WriteLine("[" + i + "] UpdateType: " + typeString); switch (typeString) { case "Values": { var guid = packet.ReadPackedGuid("GUID", i); WoWObject obj; var updates = ReadValuesUpdateBlock(ref packet, guid.GetObjectType(), i, false); if (Storage.Objects.TryGetValue(guid, out obj)) { if (obj.ChangedUpdateFieldsList == null) obj.ChangedUpdateFieldsList = new List<Dictionary<int, UpdateField>>(); obj.ChangedUpdateFieldsList.Add(updates); } break; } case "Movement": { var guid = ClientVersion.AddedInVersion(ClientVersionBuild.V3_1_2_9901) ? packet.ReadPackedGuid("GUID", i) : packet.ReadGuid("GUID", i); ReadMovementUpdateBlock(ref packet, guid, i); // Should we update Storage.Object? break; } case "CreateObject1": case "CreateObject2": // Might != CreateObject1 on Cata { var guid = packet.ReadPackedGuid("GUID", i); ReadCreateObjectBlock(ref packet, guid, map, i); break; } case "FarObjects": case "NearObjects": case "DestroyObjects": { ReadObjectsBlock(ref packet, i); break; } } } }
public static void HandleActionButton(Packet packet) { packet.ReadByte("Button"); var data = packet.ReadInt32(); var type = (ActionButtonType)((data & 0xFF000000) >> 24); var action = (data & 0x00FFFFFF); packet.WriteLine("Type: " + type + " ID: " + action); }
public static void HandleCollisionMovements(Packet packet) { var guid = packet.ReadPackedGuid(); packet.WriteLine("GUID: " + guid); if (packet.Opcode != Opcodes.GetOpcode(Opcode.MSG_MOVE_SET_COLLISION_HGT)) { var counter = packet.ReadInt32(); packet.WriteLine("Movement Counter: " + counter); } if (packet.Opcode != Opcodes.GetOpcode(Opcode.SMSG_MOVE_SET_COLLISION_HGT)) ReadMovementInfo(ref packet, guid); var unk = packet.ReadSingle(); packet.WriteLine("Collision Height: " + unk); }
public static void ReadUpdateAccountDataBlock(ref Packet packet) { packet.ReadEnum<AccountDataType>("Data Type", TypeCode.Int32); packet.ReadTime("Login Time"); var decompCount = packet.ReadInt32(); packet = packet.Inflate(decompCount); var data = packet.ReadBytes(decompCount); packet.WriteLine("Account Data: "); foreach (var b in data) packet.Write((char)b); packet.WriteLine(); }
public static void HandleQuestCompleted(Packet packet) { packet.ReadEntryWithName<Int32>(StoreNameType.Quest, "Quest ID"); packet.ReadInt32("Reward"); packet.ReadInt32("Money"); var honor = packet.ReadInt32(); if (honor < 0) packet.WriteLine("Honor: " + honor); var talentpoints = packet.ReadInt32(); if (talentpoints < 0) packet.WriteLine("Talentpoints: " + talentpoints); var arenapoints = packet.ReadInt32(); if (arenapoints < 0) packet.WriteLine("Arenapoints: " + arenapoints); }
public static void Parse(Packet packet, bool isMultiple = false) { ParsedStatus status; var opcode = packet.Opcode; packet.WriteLine("{0}: {1} (0x{2}) Length: {3} Time: {4} Number: {5}{6}", packet.Direction, Opcodes.GetOpcodeName(opcode), opcode.ToString("X4"), packet.Length, packet.Time.ToString("MM/dd/yyyy HH:mm:ss.fff"), packet.Number, isMultiple ? " (part of another packet)" : String.Empty); if (opcode == 0) return; Action<Packet> handler; if (Handlers.TryGetValue(opcode, out handler)) { try { handler(packet); if (packet.Position == packet.Length) status = ParsedStatus.Success; else { var pos = packet.Position; var len = packet.Length; packet.WriteLine("Packet not fully read! Current position is {0}, length is {1}, and diff is {2}.", pos, len, len - pos); if (len < 300) // If the packet isn't "too big" and it is not full read, print its hex table packet.AsHex(); status = ParsedStatus.WithErrors; } } catch (Exception ex) { packet.WriteLine(ex.GetType()); packet.WriteLine(ex.Message); packet.WriteLine(ex.StackTrace); status = ParsedStatus.WithErrors; } } else { packet.AsHex(); status = ParsedStatus.NotParsed; } if (isMultiple == false) { packet.Status = status; var data = status == ParsedStatus.Success ? Opcodes.GetOpcodeName(packet.Opcode) : status.ToString(); packet.AddSniffData(StoreNameType.Opcode, packet.Opcode, data); } }
public static void HandleClientEnterWorld(Packet packet) { packet.WriteLine("Loading: " + (packet.ReadBit() ? "true" : "false")); // Not sure on the meaning var mapId = packet.ReadEntryWithName<UInt32>(StoreNameType.Map, "Map"); MovementHandler.CurrentMapId = (uint) mapId; if (mapId >= 0 && mapId < 1000) // Getting some weird results in a couple of packets packet.AddSniffData(StoreNameType.Map, mapId, "LOAD_SCREEN"); }
public static void HandleAuthSession434(Packet packet) { var sha = new byte[20]; packet.ReadUInt32("UInt32 1"); packet.ReadUInt32("UInt32 2"); packet.ReadByte("Unk Byte"); sha[10] = packet.ReadByte(); sha[18] = packet.ReadByte(); sha[12] = packet.ReadByte(); sha[5] = packet.ReadByte(); packet.ReadInt64("Int64"); sha[15] = packet.ReadByte(); sha[9] = packet.ReadByte(); sha[19] = packet.ReadByte(); sha[4] = packet.ReadByte(); sha[7] = packet.ReadByte(); sha[16] = packet.ReadByte(); sha[3] = packet.ReadByte(); packet.ReadEnum<ClientVersionBuild>("Client Build", TypeCode.Int16); sha[8] = packet.ReadByte(); packet.ReadUInt32("UInt32 3"); packet.ReadByte("Unk Byte"); sha[17] = packet.ReadByte(); sha[6] = packet.ReadByte(); sha[0] = packet.ReadByte(); sha[1] = packet.ReadByte(); sha[11] = packet.ReadByte(); packet.ReadUInt32("Client seed"); sha[2] = packet.ReadByte(); packet.ReadUInt32("UInt32 4"); sha[14] = packet.ReadByte(); sha[13] = packet.ReadByte(); using (var addons = new Packet(packet.ReadBytes(packet.ReadInt32()), packet.Opcode, packet.Time, packet.Direction, packet.Number, packet.Writer, packet.FileName)) { var pkt2 = addons; CoreParsers.AddonHandler.ReadClientAddonsList(ref pkt2); } packet.ReadBit("Unk bit"); var size = (int)packet.ReadBits(12); packet.WriteLine("Account name: {0}", Encoding.UTF8.GetString(packet.ReadBytes(size))); packet.WriteLine("Proof SHA-1 Hash: " + Utilities.ByteArrayToHexString(sha)); }
public static void HandleServerAddonsList(Packet packet) { var bits20 = (int)packet.ReadBits(23); var bit3 = new bool[bits20]; var usePublicKey = new bool[bits20]; var bits0 = new uint[bits20]; var bit1 = new bool[bits20]; for (var i = 0; i < bits20; i++) { bit3[i] = packet.ReadBit(); usePublicKey[i] = packet.ReadBit(); if (bit3[i]) bits0[i] = packet.ReadBits(8); bit1[i] = packet.ReadBit(); } var bits10 = (int)packet.ReadBits(18); for (var i = 0; i < bits20; i++) { if (bit3[i]) packet.ReadWoWString("Addon URL File", bits0[i], i); if (usePublicKey[i]) { var pubKey = packet.ReadBytes(256); packet.WriteLine("[{0}] Name MD5: {1}", i, Utilities.ByteArrayToHexString(pubKey)); } if (bit1[i]) { packet.ReadByte("Byte24", i); packet.ReadInt32("Int24", i); } packet.ReadByte("Addon State", i); } for (var i = 0; i < bits10; i++) { packet.ReadInt32("Int14", i); packet.ReadInt32("IntED", i); for (var j = 0; j < 4; j++) { packet.ReadInt32("IntED", i, j); packet.ReadInt32("Int14", i, j); } packet.ReadInt32("IntED", i); } }
public static void HandlePetAction(Packet packet) { packet.ReadGuid("GUID"); var action = (uint)packet.ReadUInt16() + (packet.ReadByte() << 16); packet.WriteLine("Action: {0}", action); packet.ReadEnum<ActionButtonType>("Type", TypeCode.Byte); packet.ReadGuid("GUID"); if (ClientVersion.AddedInVersion(ClientVersionBuild.V4_2_2_14545)) packet.ReadVector3("Position"); }
public static void HandleDeathReleaseLoc(Packet packet) { var pos = new Vector3(); pos.Y = packet.ReadSingle(); pos.Z = packet.ReadSingle(); pos.X = packet.ReadSingle(); packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map Id"); packet.WriteLine("Position: {0}", pos); }
public static void HandleGMTicketCreate(Packet packet) { packet.ReadEntryWithName<Int32>(StoreNameType.Map, "Map ID"); var vector = packet.ReadVector3(); packet.WriteLine("Position: {0}", vector); packet.ReadCString("Text"); packet.ReadUInt32("Unk UInt32 1"); packet.ReadBoolean("Need Response"); // FIXME: 3.3.3a has many more data here.. }
/// <summary> /// Shows our hex representation of a packet /// </summary> /// <param name="packet">A packet</param> public static void AsHex(this Packet packet) { var n = Environment.NewLine; var hexDump = new StringBuilder(); var length = packet.Length; var stream = packet.GetStream(0); var header = "|-------------------------------------------------|---------------------------------|" + n + "| 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | 0 1 2 3 4 5 6 7 8 9 A B C D E F |" + n + "|-------------------------------------------------|---------------------------------|" + n; hexDump.Append(header); var end = length; for (var i = 0; i < end; i += 16) { var text = new StringBuilder(); var hex = new StringBuilder(); hex.Append("| "); for (var j = 0; j < 16; j++) { if (j + i < end) { var val = stream[j + i]; hex.Append(stream[j + i].ToString("X2")); hex.Append(" "); if (val >= 32 && val <= 127) text.Append((char)val); else text.Append("."); text.Append(" "); } else { hex.Append(" "); text.Append(" "); } } hex.Append("| "); hex.Append(text + "|"); hex.Append(n); hexDump.Append(hex.ToString()); } hexDump.Append("|-------------------------------------------------|---------------------------------|"); packet.WriteLine(hexDump.ToString()); }
/// <summary> /// Shows our hex representation of a packet /// </summary> /// <param name="packet">A packet</param> public static void AsHex(this Packet packet) { packet.WriteLine(Utilities.ByteArrayToHexTable(packet.GetStream(0))); }