Beispiel #1
0
        public void SetFromLog(LogRequestPacket1 packet)
        {
            GamerTag   = packet.GamerTag;
            InternalIP = packet.InternalIP;
            ExternalIP = packet.ExternalIP;

            GameVersion = packet.GameVersion;
            GameBuild   = packet.GameBuild;

            CurrentState = 0x416E; // one of the 'non-playlist' IDs used by MW2

            SetLastMatched();
            SetLastTouched();
        }
Beispiel #2
0
        void server_PacketReceived(object sender, UdpPacketReceivedEventArgs e)
        {
            var packet = e.Packet;
            var reader = packet.GetReader();
            var type = reader.ReadByte();

            if (type == 0xE)
            {
                var request = new LogRequestPacket1(reader);

                if (request.GameVersion == 0 || (request.InternalIP.Port < 28960 || request.InternalIP.Port > 28970))
                {
                    // update 'last touched', possibly re-set state
                    var client = Client.Get(request.XUID);
                    client.SetLastTouched();

                    if (!client.IsMatched)
                    {
                        client.CurrentState = 0x417D;
                    }

                    // only send 0E 02 00 here
                    var response = packet.MakeResponse();
                    var writer = response.GetWriter();
                    writer.Write(new byte[] { 0x0E, 0x02, 0x00 });
                    response.Send();
                }
                else
                {
                    bool allowedVersion = true;
                    Log.Data(string.Format("Player connecting {0} from {1} version {2}.{3} XUID {4}", request.GamerTag, request.ExternalIP, request.GameVersion, request.GameBuild, request.XUID.ToString("X16")));

                    if (!Client.IsVersionAllowed(request.GameVersion, request.GameBuild))
                    {
                        // no return, we need to keep the version logged for later packets
                        Log.Warn(string.Format("Client {0} attempted to connect with disallowed version {1}.{2}.", request.GamerTag, request.GameVersion, request.GameBuild));

                        // to send 'fake' data
                        allowedVersion = false;
                    }

                    var client = Client.Get(request.XUID);
                    client.SetFromLog(request);

                    var tempStats = new List<LogStatistics>();
                    /*
                    tempStats.Add(new LogStatistics(0x2ee0, 1));
                    tempStats.Add(new LogStatistics(1, 2));
                    tempStats.Add(new LogStatistics(0x417f, 3));
                    tempStats.Add(new LogStatistics(0x417e, 4));
                    tempStats.Add(new LogStatistics(5, 5));
                    tempStats.Add(new LogStatistics(13, 6));
                    tempStats.Add(new LogStatistics(0x3a98, 7));
                    tempStats.Add(new LogStatistics(4, 8));
                    tempStats.Add(new LogStatistics(3, 9));
                    tempStats.Add(new LogStatistics(2, 10));
                    tempStats.Add(new LogStatistics(17, 11));
                    tempStats.Add(new LogStatistics(17, 12));
                    tempStats.Add(new LogStatistics(6, 13));
                    tempStats.Add(new LogStatistics(9, 14));
                    tempStats.Add(new LogStatistics(15, 16));
                    tempStats.Add(new LogStatistics(0x416e, 17));
                    tempStats.Add(new LogStatistics(7, 18));
                    tempStats.Add(new LogStatistics(0x417d, 19));
                    tempStats.Add(new LogStatistics(8, 20));
                    tempStats.Add(new LogStatistics(12, 21));
                    tempStats.Add(new LogStatistics(16, 22));
                    tempStats.Add(new LogStatistics(14, 23));
                    tempStats.Add(new LogStatistics(0x2ee0, 24));
                    tempStats.Add(new LogStatistics(11, 25));
                    tempStats.Add(new LogStatistics(10, 26));
                    */

                    var responsePacket = new LogResponsePacket1(client.XUID);

                    if (allowedVersion)
                    {
                        responsePacket.SetStatistics(Client.GetStatistics());
                    }
                    else
                    {
                        var fakeStats = new List<LogStatistics>();
                        fakeStats.Add(new LogStatistics(1, 28789)); //up
                        fakeStats.Add(new LogStatistics(2, 24932)); //da
                        fakeStats.Add(new LogStatistics(3, 25972)); //te

                        for (short i = 4; i <= 19; i++)
                        {
                            fakeStats.Add(new LogStatistics(i, 1337));
                        }

                        responsePacket.SetStatistics(fakeStats);

                        /*if (request.GameBuild < 40)
                        {
                            responsePacket.SetBetaClosed();
                        }
                        else
                        {*/
                            responsePacket.SetOldBuild();
                        //}
                    }

                    if ((request.XUID & 0xFFFFFFFF) == 2)
                    {
                        Log.Info(string.Format("Non-allowed client (IDGEN) (XUID {0}) tried to connect", request.XUID));
                        responsePacket.SetBetaClosed();
                    }

                    if (!Client.IsAllowed(request.XUID))
                    {
                        Log.Info(string.Format("Non-allowed client (XUID {0}) tried to connect", request.XUID));
                        responsePacket.SetBanned();
                    }

                    if (!Client.IsAllowed(client.XUIDAlias))
                    {
                        Log.Info(string.Format("Non-allowed client (XUID {0}) tried to connect", request.XUID));
                        responsePacket.SetBanned();
                    }

                    var ipAddress = packet.GetSource().Address;

                    if (!Client.IsAllowed(ipAddress))
                    {
                        Log.Info(string.Format("Non-allowed client (IP {0}) tried to connect", ipAddress));
                        responsePacket.SetBanned();
                    }

                    if (!packet.Secure)
                    {
                        if (allowedVersion)
                        {
                            Log.Info(string.Format("Client (IP {0}) tried to connect with insecure packet.", ipAddress));
                        }

                        responsePacket.SetOldBuild();
                    }

                    var response = packet.MakeResponse();
                    responsePacket.Write(response.GetWriter());
                    response.Send();
                }
            }
            else if (type == 0xFD)
            {
                if (!packet.Secure)
                {
                    return;
                }

                long realID = (0x0110000100000000 | reader.ReadInt32());
                long fakeID = (0x0110000100000000 | reader.ReadInt32());

                if (realID == fakeID)
                {
                    return;
                }

                var client = Client.Get(realID);
                client.XUIDAlias = fakeID;
            }
        }
Beispiel #3
0
        void server_PacketReceived(object sender, UdpPacketReceivedEventArgs e)
        {
            var packet = e.Packet;
            var reader = packet.GetReader();
            var type   = reader.ReadByte();

            if (type == 0xE)
            {
                var request = new LogRequestPacket1(reader);

                if (request.GameVersion == 0 || (request.InternalIP.Port < 28960 || request.InternalIP.Port > 28970))
                {
                    // update 'last touched', possibly re-set state
                    var client = Client.Get(request.XUID);
                    client.SetLastTouched();

                    if (!client.IsMatched)
                    {
                        client.CurrentState = 0x417D;
                    }

                    // only send 0E 02 00 here
                    var response = packet.MakeResponse();
                    var writer   = response.GetWriter();
                    writer.Write(new byte[] { 0x0E, 0x02, 0x00 });
                    response.Send();
                }
                else
                {
                    bool allowedVersion = true;
                    Log.Data(string.Format("Player connecting {0} from {1} version {2}.{3} XUID {4}", request.GamerTag, request.ExternalIP, request.GameVersion, request.GameBuild, request.XUID.ToString("X16")));

                    if (!Client.IsVersionAllowed(request.GameVersion, request.GameBuild))
                    {
                        // no return, we need to keep the version logged for later packets
                        Log.Warn(string.Format("Client {0} attempted to connect with disallowed version {1}.{2}.", request.GamerTag, request.GameVersion, request.GameBuild));

                        // to send 'fake' data
                        allowedVersion = false;
                    }

                    var client = Client.Get(request.XUID);
                    client.SetFromLog(request);

                    var tempStats = new List <LogStatistics>();

                    /*
                     * tempStats.Add(new LogStatistics(0x2ee0, 1));
                     * tempStats.Add(new LogStatistics(1, 2));
                     * tempStats.Add(new LogStatistics(0x417f, 3));
                     * tempStats.Add(new LogStatistics(0x417e, 4));
                     * tempStats.Add(new LogStatistics(5, 5));
                     * tempStats.Add(new LogStatistics(13, 6));
                     * tempStats.Add(new LogStatistics(0x3a98, 7));
                     * tempStats.Add(new LogStatistics(4, 8));
                     * tempStats.Add(new LogStatistics(3, 9));
                     * tempStats.Add(new LogStatistics(2, 10));
                     * tempStats.Add(new LogStatistics(17, 11));
                     * tempStats.Add(new LogStatistics(17, 12));
                     * tempStats.Add(new LogStatistics(6, 13));
                     * tempStats.Add(new LogStatistics(9, 14));
                     * tempStats.Add(new LogStatistics(15, 16));
                     * tempStats.Add(new LogStatistics(0x416e, 17));
                     * tempStats.Add(new LogStatistics(7, 18));
                     * tempStats.Add(new LogStatistics(0x417d, 19));
                     * tempStats.Add(new LogStatistics(8, 20));
                     * tempStats.Add(new LogStatistics(12, 21));
                     * tempStats.Add(new LogStatistics(16, 22));
                     * tempStats.Add(new LogStatistics(14, 23));
                     * tempStats.Add(new LogStatistics(0x2ee0, 24));
                     * tempStats.Add(new LogStatistics(11, 25));
                     * tempStats.Add(new LogStatistics(10, 26));
                     */

                    var responsePacket = new LogResponsePacket1(client.XUID);

                    if (allowedVersion)
                    {
                        responsePacket.SetStatistics(Client.GetStatistics());
                    }
                    else
                    {
                        var fakeStats = new List <LogStatistics>();
                        fakeStats.Add(new LogStatistics(1, 28789)); //up
                        fakeStats.Add(new LogStatistics(2, 24932)); //da
                        fakeStats.Add(new LogStatistics(3, 25972)); //te

                        for (short i = 4; i <= 19; i++)
                        {
                            fakeStats.Add(new LogStatistics(i, 1337));
                        }

                        responsePacket.SetStatistics(fakeStats);

                        /*if (request.GameBuild < 40)
                         * {
                         *  responsePacket.SetBetaClosed();
                         * }
                         * else
                         * {*/
                        responsePacket.SetOldBuild();
                        //}
                    }

                    if ((request.XUID & 0xFFFFFFFF) == 2)
                    {
                        Log.Info(string.Format("Non-allowed client (IDGEN) (XUID {0}) tried to connect", request.XUID));
                        responsePacket.SetBetaClosed();
                    }

                    if (!Client.IsAllowed(request.XUID))
                    {
                        Log.Info(string.Format("Non-allowed client (XUID {0}) tried to connect", request.XUID));
                        responsePacket.SetBanned();
                    }

                    if (!Client.IsAllowed(client.XUIDAlias))
                    {
                        Log.Info(string.Format("Non-allowed client (XUID {0}) tried to connect", request.XUID));
                        responsePacket.SetBanned();
                    }

                    var ipAddress = packet.GetSource().Address;

                    if (!Client.IsAllowed(ipAddress))
                    {
                        Log.Info(string.Format("Non-allowed client (IP {0}) tried to connect", ipAddress));
                        responsePacket.SetBanned();
                    }

                    if (!packet.Secure)
                    {
                        if (allowedVersion)
                        {
                            Log.Info(string.Format("Client (IP {0}) tried to connect with insecure packet.", ipAddress));
                        }

                        responsePacket.SetOldBuild();
                    }

                    var response = packet.MakeResponse();
                    responsePacket.Write(response.GetWriter());
                    response.Send();
                }
            }
            else if (type == 0xFD)
            {
                if (!packet.Secure)
                {
                    return;
                }

                long realID = (0x0110000100000000 | reader.ReadInt32());
                long fakeID = (0x0110000100000000 | reader.ReadInt32());

                if (realID == fakeID)
                {
                    return;
                }

                var client = Client.Get(realID);
                client.XUIDAlias = fakeID;
            }
        }
Beispiel #4
0
        public void SetFromLog(LogRequestPacket1 packet)
        {
            GamerTag = packet.GamerTag;
            InternalIP = packet.InternalIP;
            ExternalIP = packet.ExternalIP;

            GameVersion = packet.GameVersion;
            GameBuild = packet.GameBuild;

            CurrentState = 0x416E; // one of the 'non-playlist' IDs used by MW2

            SetLastMatched();
            SetLastTouched();
        }