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)); } }
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; }
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; }