private void MetroWindow_Closing_1(object sender, System.ComponentModel.CancelEventArgs e) { if (m_Packets == null || m_Packets.Count == 0) { return; } //Saving Changes PacketFamily family = new PacketFamily(); family.ways = new List <PacketWay>(); //Filter Ways if (m_Packets != null) { foreach (ArcheAgePacket p1 in m_Packets) { PacketWay found = family.getWayByPort(p1.port); if (found == null) { PacketWay m_Way = new PacketWay(); m_Way.Port = p1.port; m_Way.typeways = new List <PacketTypeWay>(); PacketTypeWay client = new PacketTypeWay(); client.packets = new List <Packet>(); client.type = PacketType.CLIENT; PacketTypeWay server = new PacketTypeWay(); server.packets = new List <Packet>(); server.type = PacketType.SERVER; m_Way.typeways.Add(client); m_Way.typeways.Add(server); family.ways.Add(m_Way); } } } //Ways Filtered //Add Packets List <ArcheAgePacket> m_Filtered = new List <ArcheAgePacket>(); foreach (ArcheAgePacket packet in m_Packets) { if (packet.name == null || packet.name.Contains("Undefined Packet")) { continue; } if (m_Filtered.Where(n => n.name == packet.name).ToArray().Length > 0) { continue; } m_Filtered.Add(packet); } foreach (PacketWay way in family.ways) { PacketWay m_CurrentWay = family.getWayByPort((short)way.Port); foreach (ArcheAgePacket packet in m_Filtered) { if (way.Port == packet.port) { PacketType type = packet.type.Equals("[C]") ? PacketType.CLIENT : PacketType.SERVER; Packet mSer = new Packet(); if (packet.PacketLevel != null) { mSer.level = packet.PacketLevel; } mSer.parts = packet.parts; mSer.arrays = packet.arrays; mSer.id = "0x" + BitConverter.ToInt16(packet.data, (packet.direction.Equals("[GP]") ? 2 : 0)).ToString("X2"); mSer.name = packet.name; List <Packet> packets = way.typeways.Where(n => n.type == type).ToArray()[0].packets; packets.Add(mSer); } } } XmlSerializer serializer = new XmlSerializer(typeof(PacketFamily)); var settings = new XmlWriterSettings() { CheckCharacters = false, CloseOutput = false, Encoding = new UTF8Encoding(false), Indent = true, IndentChars = "\t", NewLineChars = "\n", }; using (var fs = new FileStream(System.IO.Path.Combine("PacketFamily.xml"), FileMode.Create, FileAccess.Write)) using (XmlWriter writer = XmlWriter.Create(fs, settings)) { writer.WriteComment(" This File Represents Current Defined Packets "); writer.WriteComment(" Allowed Only : Int16, Int32, Single, Byte[], DynamicString, FixedString, Byte, Boolean, Double - Types "); writer.WriteComment(" Byte[] Syntax: Byte[]:ArrayLength Example: Byte[]:10 "); writer.WriteComment(" If you're Using Arrays, Delete Type Mandatory! "); writer.WriteComment(" Created By Raphail "); serializer.Serialize(writer, family); } }
private void MetroWindow_Closing_1(object sender, System.ComponentModel.CancelEventArgs e) { if (m_Packets == null || m_Packets.Count == 0) return; //Saving Changes PacketFamily family = new PacketFamily(); family.ways = new List<PacketWay>(); //Filter Ways if(m_Packets != null) foreach (ArcheAgePacket p1 in m_Packets) { PacketWay found = family.getWayByPort(p1.port); if (found == null) { PacketWay m_Way = new PacketWay(); m_Way.Port = p1.port; m_Way.typeways = new List<PacketTypeWay>(); PacketTypeWay client = new PacketTypeWay(); client.packets = new List<Packet>(); client.type = PacketType.CLIENT; PacketTypeWay server = new PacketTypeWay(); server.packets = new List<Packet>(); server.type = PacketType.SERVER; m_Way.typeways.Add(client); m_Way.typeways.Add(server); family.ways.Add(m_Way); } } //Ways Filtered //Add Packets List<ArcheAgePacket> m_Filtered = new List<ArcheAgePacket>(); foreach (ArcheAgePacket packet in m_Packets) { if (packet.name == null || packet.name.Contains("Undefined Packet")) continue; if (m_Filtered.Where(n => n.name == packet.name).ToArray().Length > 0) continue; m_Filtered.Add(packet); } foreach (PacketWay way in family.ways) { PacketWay m_CurrentWay = family.getWayByPort((short)way.Port); foreach (ArcheAgePacket packet in m_Filtered) { if (way.Port == packet.port) { PacketType type = packet.type.Equals("[C]") ? PacketType.CLIENT : PacketType.SERVER; Packet mSer = new Packet(); if (packet.PacketLevel != null) mSer.level = packet.PacketLevel; mSer.parts = packet.parts; mSer.arrays = packet.arrays; mSer.id = "0x" + BitConverter.ToInt16(packet.data, (packet.direction.Equals("[GP]") ? 2 : 0)).ToString("X2"); mSer.name = packet.name; List<Packet> packets = way.typeways.Where(n => n.type == type).ToArray()[0].packets; packets.Add(mSer); } } } XmlSerializer serializer = new XmlSerializer(typeof(PacketFamily)); var settings = new XmlWriterSettings() { CheckCharacters = false, CloseOutput = false, Encoding = new UTF8Encoding(false), Indent = true, IndentChars = "\t", NewLineChars = "\n", }; using(var fs = new FileStream(System.IO.Path.Combine("PacketFamily.xml"), FileMode.Create, FileAccess.Write)) using (XmlWriter writer = XmlWriter.Create(fs, settings)) { writer.WriteComment(" This File Represents Current Defined Packets "); writer.WriteComment(" Allowed Only : Int16, Int32, Single, Byte[], DynamicString, FixedString, Byte, Boolean, Double - Types "); writer.WriteComment(" Byte[] Syntax: Byte[]:ArrayLength Example: Byte[]:10 "); writer.WriteComment(" If you're Using Arrays, Delete Type Mandatory! "); writer.WriteComment(" Created By Raphail "); serializer.Serialize(writer, family); } }
private void Button_Click_1(object sender, RoutedEventArgs e) { m_Packets = null; PacketList.SelectionChanged += PacketList_SelectionChanged; m_Packets = new List <ArcheAgePacket>(); OpenFileDialog dial = new OpenFileDialog(); PacketFamily family = null; try { using (var fs = new FileStream(System.IO.Path.Combine("PacketFamily.xml"), FileMode.Open, FileAccess.Read)) using (XmlReader reader = XmlReader.Create(fs)) { XmlSerializer ser = new XmlSerializer(typeof(PacketFamily)); family = ser.Deserialize(reader) as PacketFamily; } } catch (Exception x) { MessageBox.Show(x.ToString()); } m_CurrentFamily = family; AA_LOGINPORT = 3724; bool router = true; if (dial.ShowDialog() != null) { string name = dial.FileName; if (String.IsNullOrEmpty(name)) { return; } PcapFile file = new PcapFile(name); foreach (PcapPacket packet in file) { if (packet.Data.Length < 62) { continue; } BinaryReader reader = new BinaryReader(new MemoryStream(packet.Data)); reader.ReadBytes(router ? 26 : 34); string SourceIp = reader.ReadByte() + "." + reader.ReadByte() + "." + reader.ReadByte() + "." + reader.ReadByte(); string DestIp = reader.ReadByte() + "." + reader.ReadByte() + "." + reader.ReadByte() + "." + reader.ReadByte(); ushort Source = ReverseShort(reader.ReadUInt16()); ushort Destination = ReverseShort(reader.ReadUInt16()); reader.ReadBytes(16); //Now - Going Data =) if ((reader.BaseStream.Length - reader.BaseStream.Position) > 2) { short len = BitConverter.ToInt16(new byte[] { packet.Data[reader.BaseStream.Position], packet.Data[(reader.BaseStream.Position) + 1] }, 0); //if there's will be data with such length - its ArcheAge =) try { reader.ReadInt16(); //old length :D if (reader.BaseStream.Length - reader.BaseStream.Position == len) { //Construct Packet byte[] data = reader.ReadBytes(len); string type = ""; string direct = ""; //Set General IP Addresses =) if (CLIENT_IP == null) { if (Source == AA_LOGINPORT) { CLIENT_IP = SourceIp; } else { CLIENT_IP = DestIp; } } if (MINE_IP == null) { if (Destination == AA_LOGINPORT) { MINE_IP = SourceIp; } else { MINE_IP = DestIp; } } short thisport; //Proxies Will not work Correctly. if (Source == AA_LOGINPORT || Destination == AA_LOGINPORT) { direct = "[LP]"; thisport = AA_LOGINPORT; } else if (Source == AA_GAMEPORT || Destination == AA_GAMEPORT) { direct = "[GP]"; thisport = AA_GAMEPORT; } else if (Source == AA_CHATPORT || Destination == AA_CHATPORT) { direct = "[CP]"; thisport = AA_CHATPORT; } else { continue; //Undefined } if (SourceIp == CLIENT_IP && DestIp == MINE_IP) { type = "[S]"; } else if (SourceIp == MINE_IP && DestIp == CLIENT_IP) { type = "[C]"; } else { continue; } m_Packets.Add(new ArcheAgePacket(data, type, direct, thisport)); } } catch (Exception) { continue; } } } file.Dispose(); file = null; dial = null; RefreshListBox(true); } DefinePacket.IsEnabled = true; }
private void Button_Click_1(object sender, RoutedEventArgs e) { m_Packets = null; PacketList.SelectionChanged += PacketList_SelectionChanged; m_Packets = new List<ArcheAgePacket>(); OpenFileDialog dial = new OpenFileDialog(); PacketFamily family = null; try { using (var fs = new FileStream(System.IO.Path.Combine("PacketFamily.xml"), FileMode.Open, FileAccess.Read)) using (XmlReader reader = XmlReader.Create(fs)) { XmlSerializer ser = new XmlSerializer(typeof(PacketFamily)); family = ser.Deserialize(reader) as PacketFamily; } } catch (Exception x) { MessageBox.Show(x.ToString()); } m_CurrentFamily = family; AA_LOGINPORT = 3724; bool router = true; if (dial.ShowDialog() != null) { string name = dial.FileName; if (String.IsNullOrEmpty(name)) return; PcapFile file = new PcapFile(name); foreach (PcapPacket packet in file) { if (packet.Data.Length < 62) continue; BinaryReader reader = new BinaryReader(new MemoryStream(packet.Data)); reader.ReadBytes(router ? 26 : 34); string SourceIp = reader.ReadByte() + "." + reader.ReadByte() + "." + reader.ReadByte() + "." + reader.ReadByte(); string DestIp = reader.ReadByte() + "." + reader.ReadByte() + "." + reader.ReadByte() + "." + reader.ReadByte(); ushort Source = ReverseShort(reader.ReadUInt16()); ushort Destination = ReverseShort(reader.ReadUInt16()); reader.ReadBytes(16); //Now - Going Data =) if ((reader.BaseStream.Length - reader.BaseStream.Position) > 2) { short len = BitConverter.ToInt16(new byte[] { packet.Data[reader.BaseStream.Position], packet.Data[(reader.BaseStream.Position) + 1] }, 0); //if there's will be data with such length - its ArcheAge =) try { reader.ReadInt16(); //old length :D if (reader.BaseStream.Length - reader.BaseStream.Position == len) { //Construct Packet byte[] data = reader.ReadBytes(len); string type = ""; string direct = ""; //Set General IP Addresses =) if (CLIENT_IP == null) { if (Source == AA_LOGINPORT) CLIENT_IP = SourceIp; else CLIENT_IP = DestIp; } if (MINE_IP == null) { if (Destination == AA_LOGINPORT) MINE_IP = SourceIp; else MINE_IP = DestIp; } short thisport; //Proxies Will not work Correctly. if (Source == AA_LOGINPORT || Destination == AA_LOGINPORT) { direct = "[LP]"; thisport = AA_LOGINPORT; } else if (Source == AA_GAMEPORT || Destination == AA_GAMEPORT) { direct = "[GP]"; thisport = AA_GAMEPORT; } else if (Source == AA_CHATPORT || Destination == AA_CHATPORT) { direct = "[CP]"; thisport = AA_CHATPORT; } else continue; //Undefined if (SourceIp == CLIENT_IP && DestIp == MINE_IP) type = "[S]"; else if (SourceIp == MINE_IP && DestIp == CLIENT_IP) type = "[C]"; else continue; m_Packets.Add(new ArcheAgePacket(data, type, direct, thisport)); } } catch (Exception) { continue; } } } file.Dispose(); file = null; dial = null; RefreshListBox(true); } DefinePacket.IsEnabled = true; }