private void button3_Click(object sender, EventArgs e) { PS4RemotePlayData remotePlayData = _settingManager.GetRemotePlayData(); if (remotePlayData != null) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = @"PCAP files|*.pcap"; DialogResult result = openFileDialog.ShowDialog(); // Show the dialog. if (result == DialogResult.OK) // Test result. { ClearPcapOutputLogOutput(); string file = openFileDialog.FileName; try { var packets = Pcap.ReadFile(file).TrySelect(record => PacketParser.Parse(new ArraySegment <byte>(record.Data.Skip(14).ToArray()))); var ipPackets = packets as IpPacket[] ?? packets.ToArray(); var tcpRemotePlayPackets = ipPackets. Where(p => p != null). Where(p => p.ProtocolType == ProtocolType.Tcp). Where(p => { var packetData = p.PacketData.AsByteArraySegment(); ushort sourcePort = p.PacketData.Array.ReadNetOrderUShort(packetData.Offset); ushort destinationPort = p.PacketData.Array.ReadNetOrderUShort(2 + packetData.Offset); return(sourcePort == 9295 || destinationPort == 9295); }). ToArray(); var udpRemotePlayPackets = ipPackets. Where(p => p != null). Where(p => p.ProtocolType == ProtocolType.Udp). Select(p => p.ToUdpDatagram()). Where(p => p.UdpDatagramHeader.SourcePort == 9296 || p.UdpDatagramHeader.DestinationPort == 9296). ToArray(); Session session = CheckForConnectionAesKey(tcpRemotePlayPackets); CheckForBigBangPayload(udpRemotePlayPackets, session); } catch (IOException) { } } } else { MessageBox.Show("Could not search for AES keys. No register data is available.", "No PS4 Data", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
public override CommandResult Execute() { var datagrams = Pcap.ReadFile(PcapFile). TrySelect(record => Tx.Network.PacketParser.Parse(record.Data.Skip(14).ToArray())). Where(p => p != null). Where(p => p.ProtocolType == ProtocolType.Udp). Select(p => p.ToUdpDatagram()). Where(p => p.UdpDatagramHeader.SourcePort == Port || p.UdpDatagramHeader.DestinationPort == Port). ToArray(); var cryptoBlob = SharedSecret.HexToBytes(); var decryptor = new MessageAnalyzer(cryptoBlob); foreach (var datagram in datagrams) { var messageInfo = decryptor.ReadMessage(datagram.UdpData.ToArray()); Console.WriteLine($"From: {datagram.UdpDatagramHeader.SourcePort}, To: {datagram.UdpDatagramHeader.DestinationPort}"); Console.WriteLine($"Message Type: {messageInfo.MessageType}"); Console.WriteLine($"Request Ack: {messageInfo.RequestAcknowledge}"); Console.WriteLine($"Version: {messageInfo.Version}"); Console.WriteLine($"ChannelId: {messageInfo.ChannelId}"); if (!String.IsNullOrEmpty(messageInfo.Json)) { Console.WriteLine($"Json: {messageInfo.Json}"); } else { Console.WriteLine($"Binary: {messageInfo.Data.ToHex()}"); } Console.WriteLine(); } return(CommandResult.Success); }