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