Ejemplo n.º 1
0
        private void HandlePacketParse(ChannelID channel, Peer peer, Packet rawPacket)
        {
            var cid     = (int)peer.UserData;
            var rawData = rawPacket.GetBytes();

            rawData = _blowfish.Decrypt(rawData);
            try
            {
                var packet = BasePacket.Create(rawData, channel);
                OnPacket(this, new LeaguePacketEventArgs(cid, channel, packet));
            }
            catch (NotImplementedException exception)
            {
                OnBadPacket(this, new LeagueBadPacketEventArgs(cid, channel, rawData, exception));
            }
            catch (IOException exception)
            {
                OnBadPacket(this, new LeagueBadPacketEventArgs(cid, channel, rawData, exception));
            }
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            var fileName = "test.rlp.json";
            var extraA   = "";

            if (args.Length > 0)
            {
                fileName = args[0];
            }
            if (args.Length > 1)
            {
                extraA = args[1];
            }

            Console.Error.WriteLine("Reading file...");
            var json = File.ReadAllText(fileName);

            Console.Error.WriteLine("Parsing json...");
            var rawPackets        = JsonConvert.DeserializeObject <List <ENetPacket> >(json);
            var serializedPackets = new List <SerializedPacket>();
            var hardBadPackets    = new List <BadPacket>();
            var softBadPackets    = new List <BadPacket>();

            Console.Error.WriteLine("Processing raw packets...");
            var goodIDs = new List <int>();

            foreach (var rPacket in rawPackets)
            {
                if (rPacket.Channel < 8)
                {
                    int rawID = rPacket.Bytes[0];
                    if (rawID == 254)
                    {
                        rawID = rPacket.Bytes[5] | rPacket.Bytes[6] << 8;
                    }
                    try
                    {
                        var packet = BasePacket.Create(rPacket.Bytes, (ChannelID)rPacket.Channel);
                        serializedPackets.Add(new SerializedPacket
                        {
                            RawID      = rawID,
                            Packet     = packet,
                            Time       = rPacket.Time,
                            ChannelID  = rPacket.Channel < 8 ? (ChannelID)rPacket.Channel : (ChannelID?)null,
                            RawChannel = rPacket.Channel,
                        });
                        if (rPacket.Channel > 0 && rPacket.Channel < 5 && rawID != 0 && packet.BytesLeft.Length > 0)
                        {
                            softBadPackets.Add(new BadPacket()
                            {
                                RawID      = rawID,
                                Raw        = rPacket.Bytes,
                                RawChannel = rPacket.Channel,
                                Error      = $"Extra bytes: {Convert.ToBase64String(packet.BytesLeft)}",
                            });
                        }
                        else if (rPacket.Channel > 0 && rPacket.Channel < 5)
                        {
                            goodIDs.Add(rawID);
                        }
                    }
                    catch (Exception exception)
                    {
                        if (rawID != 0x4A /*&& rawID != 0xAB*/ && rawID != 0x4B)
                        {
                            hardBadPackets.Add(new BadPacket()
                            {
                                RawID      = rawID,
                                Raw        = rPacket.Bytes,
                                RawChannel = rPacket.Channel,
                                Error      = exception.ToString(),
                            });
                        }
                    }
                }
            }

            if (extraA == "info")
            {
                var result = new Dictionary <string, List <int> >();
                result.Add("soft", softBadPackets.Select(x => x.RawID).Distinct().ToList());
                result.Add("hard", hardBadPackets.Select(x => x.RawID).ToList());
                result.Add("good", goodIDs.Distinct().ToList());
                Console.WriteLine(JsonConvert.SerializeObject(result));
                return;
            }


            Console.WriteLine($"Processed! Good: {serializedPackets.Count}, Soft Error: {softBadPackets.Count}, Hard Error: {hardBadPackets.Count}");
            Console.WriteLine($"Soft bad IDs:{string.Join(",", softBadPackets.Select(x => x.RawID.ToString()).Distinct())}");
            Console.WriteLine($"Hard bad IDs:{string.Join(",", hardBadPackets.Select(x => x.RawID.ToString()).Distinct())}");
            Console.WriteLine($"Good IDs:{string.Join(",", goodIDs.Select(x => x.ToString()).Distinct())}");

            if (extraA == "dry")
            {
                return;
            }

            Console.WriteLine("Writing hard bad to file .hardbad.json");
            SerializeToFile(hardBadPackets, fileName.Replace(".rlp.json", ".rlp.hardbad.json"));

            Console.WriteLine("Writing soft bad to file .softbad.json");
            SerializeToFile(softBadPackets, fileName.Replace(".rlp.json", ".rlp.softbad.json"));

            if (extraA != "bad")
            {
                Console.WriteLine("Writing serialized to .rlp.serialized.json...");
                SerializeToFile(serializedPackets, fileName.Replace(".rlp.json", ".rlp.serialized.json"));
            }

            Console.WriteLine("Done!");
            return;
        }
Ejemplo n.º 3
0
        static void Main(string[] args)
        {
            var fileName = "test.rlp.json";

            if (args.Length > 0)
            {
                fileName = args[0];
            }
            Console.WriteLine("Reading file...");
            var json = File.ReadAllText(fileName);

            Console.WriteLine("Parsing json...");
            var rawPackets        = JsonConvert.DeserializeObject <List <ENetPacket> >(json);
            var serializedPackets = new List <SerializedPacket>();
            var hardBadPackets    = new List <BadPacket>();
            var softBadPackets    = new List <BadPacket>();

            Console.WriteLine("Processing raw packets...");
            foreach (var rPacket in rawPackets)
            {
                if (rPacket.Channel < 8)
                {
                    int rawID = rPacket.Bytes[0];
                    if (rawID == 254)
                    {
                        rawID = rPacket.Bytes[5] | rPacket.Bytes[6] << 8;
                    }
                    try
                    {
                        var packet = BasePacket.Create(rPacket.Bytes, (ChannelID)rPacket.Channel);
                        serializedPackets.Add(new SerializedPacket
                        {
                            RawID      = rawID,
                            Packet     = packet,
                            Time       = rPacket.Time,
                            ChannelID  = rPacket.Channel < 8 ? (ChannelID)rPacket.Channel : (ChannelID?)null,
                            RawChannel = rPacket.Channel,
                        });
                        if (rPacket.Channel > 0 && packet.ExtraBytes.Length > 0)
                        {
                            softBadPackets.Add(new BadPacket()
                            {
                                RawID      = rawID,
                                Raw        = rPacket.Bytes,
                                RawChannel = rPacket.Channel,
                                Error      = $"Extra bytes: {Convert.ToBase64String(packet.ExtraBytes)}",
                            });
                        }
                        if (packet is IGamePacketsList list)
                        {
                            foreach (var packet2 in list.Packets)
                            {
                                if (rPacket.Channel > 0 && packet2.ExtraBytes.Length > 0)
                                {
                                    softBadPackets.Add(new BadPacket()
                                    {
                                        RawID      = (int)packet2.ID,
                                        Raw        = rPacket.Bytes,
                                        RawChannel = rPacket.Channel,
                                        Error      = $"Extra bytes in {packet2.GetType().Name}: {Convert.ToBase64String(packet2.ExtraBytes)}",
                                    });
                                }
                            }
                        }
                    }
                    catch (Exception exception)
                    {
                        hardBadPackets.Add(new BadPacket()
                        {
                            RawID      = rawID,
                            Raw        = rPacket.Bytes,
                            RawChannel = rPacket.Channel,
                            Error      = exception.ToString(),
                        });
                    }
                }
            }

            Console.WriteLine($"Processed! Good: {serializedPackets.Count}, Soft Error: {softBadPackets.Count}, Hard Error: {hardBadPackets.Count}");
            Console.WriteLine($"Soft bad IDs:{string.Join(",", softBadPackets.Select(x => x.RawID.ToString()).Distinct())}");
            Console.WriteLine($"Hard bad IDs:{string.Join(",", hardBadPackets.Select(x => x.RawID.ToString()).Distinct())}");

            Console.WriteLine("Writing hard bad to file .hardbad.json");
            SerializeToFile(hardBadPackets, fileName.Replace(".rlp.json", ".rlp.hardbad.json"));

            Console.WriteLine("Writing soft bad to file .softbad.json");
            SerializeToFile(softBadPackets, fileName.Replace(".rlp.json", ".rlp.softbad.json"));

            Console.WriteLine("Writing serialized to .rlp.serialized.json...");
            SerializeToFile(serializedPackets, fileName.Replace(".rlp.json", ".rlp.serialized.json"));

            Console.WriteLine("Done!");
            return;
        }