Beispiel #1
0
        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);
                }
        }
Beispiel #2
0
        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);
            }
        }
Beispiel #3
0
        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;
        }
Beispiel #4
0
        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;
        }