Пример #1
0
        static void Main()
        {
            CryptEngine.Initialize(new Byte[] { 00 });
            LoginPacket.InitializeCryptoService(new Byte[] { 00, 00, 00, 00, 00, 00, 00, 00 });

            /* var server = new AAAuthServer();
             * server.Start(IPAddress.Any, 2106);*/

            /*var client = new AAAuthClient("admin", "test123");
             * client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2106));
             *
             * while (true)
             * {
             *  client.Process();
             *  System.Threading.Thread.Sleep(1500);
             * }*/


            /*var server = new TRAuthServer();
             * server.Start(IPAddress.Any, 2106);*/

            /*var client = new TRAuthClient("admin", "test123");
             * client.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 2106));
             *
             * while (true)
             * {
             *  client.Process();
             *  System.Threading.Thread.Sleep(1500);
             * }*/

            Console.ReadLine();
        }
Пример #2
0
        public Packet MakePacket(string publicKey = null)
        {
            if (publicKey == null)
            {
                publicKey = CryptEngine.serializedPublic;
            }

            if (IsCrypt && packet.PT != PType.PacketType.PublicKey)
            {
                packet.BData = CryptEngine.Encrypt(ConstructPacket(), publicKey);
            }
            else
            {
                packet.BData = ConstructPacket();
            }

            if (packet.BData.Length > 0)
            {
                return(packet);
            }
            else
            {
                throw new Exception("Bytes Lenght was equals zero.");
            }
        }
Пример #3
0
 private void sbCrypt_Click(object sender, EventArgs e)
 {
     if (!string.IsNullOrEmpty(mePlainText.Text))
     {
         var cryptEngine = new CryptEngine(CryptEngine.AlgorithmType.Des);
         meCryptedText.Text = cryptEngine.Encrypt(mePlainText.Text);
     }
 }
Пример #4
0
        private async Task MessageFraming_DataReceivedEvent(byte[] receivedData)
        {
            IPacket packet;

            using (var ms = new MemoryStream(await CryptEngine.DecompressAsync(receivedData)))
                packet = (IPacket)await LightRATUtils.Instance.packetSerializer.DeserializeAsync(ms);

            OnPacketReceive?.Invoke(this, new ReceivePacketArgs(packet));
        }
Пример #5
0
        public void Compress_Decompress__ReturnTheSameInput()
        {
            var sampleString = "Hello World";

            var compressed   = CryptEngine.Compress(Encoding.ASCII.GetBytes(sampleString));
            var decompressed = Encoding.ASCII.GetString(CryptEngine.Decompress(compressed));

            Assert.AreEqual(sampleString, decompressed);
        }
Пример #6
0
        public string Decrypt(string connectionString)
        {
            if (string.IsNullOrEmpty(connectionString))
            {
                throw new ArgumentNullException("connectionString");
            }
            var cryptEngine = new CryptEngine(CryptEngine.AlgorithmType.Des);

            return(cryptEngine.Decrypt(connectionString));
        }
Пример #7
0
 public LoginProtocol(PacketHandleFactory handle)
     : base(handle)
 {
     //IL_0020: Unknown result type (might be due to invalid IL or missing references)
     //IL_002a: Expected O, but got Unknown
     Rnd   = new Random();
     _key  = new byte[16];
     crypt = new CryptEngine();
     Rnd.NextBytes(_key);
     crypt.updateKey(_key);
 }
Пример #8
0
        public IAsyncResult BeginSend(Byte[] buffer, Int32 offset, Int32 size, AsyncCallback callback, Boolean needEncryption)
        {
            if (_closed)
            {
                return(null);
            }

            buffer = needEncryption ? CryptEngine.Encrypt(buffer, ref size) : buffer;

            var buff = new List <Byte>(buffer.Length + (Int32)_sizeHeaderLen);

            switch (_sizeHeaderLen)
            {
            case SizeType.None:
                break;

            case SizeType.Char:
                buff.Add((Byte)(buffer.Length + (_countSize ? 1 : 0)));
                break;

            case SizeType.Word:
                buff.AddRange(BitConverter.GetBytes((UInt16)(buffer.Length + (_countSize ? 2U : 0U))));
                break;

            case SizeType.Dword:
                buff.AddRange(BitConverter.GetBytes((UInt32)(buffer.Length + (_countSize ? 4U : 0U))));
                break;

            case SizeType.Qword:
                buff.AddRange(BitConverter.GetBytes((UInt64)(buffer.Length + (_countSize ? 8U : 0U))));
                break;
            }


            buff.AddRange(buffer);

            try
            {
                return(_socket.BeginSend(buff.ToArray(), 0, buff.Count, SocketFlags.None, callback, null));
            }
            catch
            {
                Close();
                return(null);
            }
        }
Пример #9
0
        public async Task SendPacket(IPacket packet)
        {
            byte[] buffer;

            using (var ms = new MemoryStream())
            {
                await LightRATUtils.Instance.packetSerializer.SerializeAsync(ms, packet);

                buffer = ms.ToArray();
            }

            var compressedData = await CryptEngine.CompressAsync(buffer);

            var framedData = await MessageFramingProtocol.FrameAsync(compressedData);

            ClientSocket.BeginSend(framedData, 0, framedData.Length, SocketFlags.None, SendCallback, null);
        }
Пример #10
0
        public void SendPacket(SendBasePacket packet)
        {
            lock (this)
            {
                packet.Write();
                byte[] pck = packet.ToByteArray();

                byte PacketId = pck[0];
                pck = CryptEngine.Crypt(pck, NetworkKey);

                List <Byte> FullPacket = new List <Byte>();
                FullPacket.AddRange(BitConverter.GetBytes((short)(pck.Length + 2))); //+2 Packet Length
                FullPacket.AddRange(pck);
                try { _socket.Send(FullPacket.ToArray()); } catch { }
                settings.SendedPackets++;
            }
        }
Пример #11
0
 public bool SendPacket(SendBasePacket packet)
 {
     lock (this)
     {
         try
         {
             packet.Write();
             byte[]      pck        = CryptEngine.Crypt(packet.ToByteArray());
             List <Byte> FullPacket = new List <Byte>();
             FullPacket.AddRange(BitConverter.GetBytes((short)(pck.Length + 2))); //+2 Packet Length
             FullPacket.AddRange(pck);                                            //Packet
             _client.Send(FullPacket.ToArray());
         }
         catch
         {
             return(false);
         }
         return(true);
     }
 }
Пример #12
0
        public void SendPacket(SendBasePacket packet)
        {
            lock (this)
            {
                packet.Write();
                byte[] pck = CryptEngine.Crypt(packet.ToByteArray());

                if (packet.Length > 60000)
                {
                    return;
                }

                List <Byte> FullPacket = new List <Byte>();
                FullPacket.AddRange(BitConverter.GetBytes((short)(pck.Length + 2))); //+2 Packet Length
                FullPacket.AddRange(pck);                                            //Packet
                try
                {
                    _client.Send(FullPacket.ToArray());
                } catch {}
            }
        }
Пример #13
0
        private void Client_BeginReceive(IAsyncResult ar)
        {
            try
            {
                if (_client.EndReceive(ar) > 0)
                {
                    _buffer = new byte[BitConverter.ToInt16(_buffer, 0) - 2];

                    if (_buffer.Length > 10000) //ignore packets that are bigger then 10kb
                    {
                        return;
                    }

                    if (_buffer.Length > 0)
                    {
                        _client.Receive(_buffer, 0, _buffer.Length, SocketFlags.Partial);

                        _buffer = CryptEngine.Crypt(_buffer);

                        //Process the packet.
                        Type pck = ClientPacketProcessor.ProcessPacket(_buffer);
                        if (pck != null)
                        {
                            ReceiveBasePacket rbp = (ReceiveBasePacket)Activator.CreateInstance(pck, this, _buffer);
                            rbp.Run();
                        }

                        Read();
                        return;
                    }
                }
            }
            catch
            {
                if (!_client.Connected)
                {
                    TryToConnect();
                }
            }
        }
Пример #14
0
 public string Decrypt(string connectionString)
 {
     if (string.IsNullOrEmpty(connectionString)) throw new ArgumentNullException("connectionString");
     var cryptEngine = new CryptEngine(CryptEngine.AlgorithmType.Des);
     return cryptEngine.Decrypt(connectionString);
 }
Пример #15
0
        private void ReadCallbackStatic(IAsyncResult ar)
        {
            try
            {
                if (_socket.EndReceive(ar) > 1)
                {
                    if (_FloodProtector.HandleFlood(_socket.RemoteEndPoint) == false)
                    {
                        Disconnect();
                        return;
                    }

                    //Get length from the buffer, convert to Int16 and read the rest of the packet.
                    _buffer = new byte[BitConverter.ToInt16(_buffer, 0) - 2]; //-2 for the length, we already read that :P

                    if (_buffer.Length > 10000)                               //ignore packets that are bigger then 10kb
                    {
                        return;
                    }

                    if (_buffer.Length > 0)
                    {
                        _socket.Receive(_buffer, _buffer.Length, SocketFlags.Partial);
                        _buffer = CryptEngine.Crypt(_buffer, NetworkKey);
                        Type pck = ClientPacketProcessor.ProcessPacket(_buffer, _socket.RemoteEndPoint.ToString());
                        if (pck != null)
                        {
                            ReceiveBasePacket rbp = (ReceiveBasePacket)Activator.CreateInstance(pck, this, _buffer);
                            rbp.Run();
                            settings.ReceivedPackets++;
                        }
                        else
                        {
                            //unknown packet received
                            Disconnect();
                            return;
                        }

                        Read();
                        return;
                    }
                    else
                    {
                        //Disconnect when no length is given... maybe flood? just disconnect :P
                        Disconnect();
                        return;
                    }
                }
                else
                {
                    Disconnect();
                    return;
                }
            }
            catch
            {
                if (!_socket.Connected)
                {
                    Disconnect();
                }
                return;
            }
        }
Пример #16
0
        private void ReadCallbackStatic(IAsyncResult ar)
        {
            try
            {
                if (_socket.EndReceive(ar) > 1)
                {
                    if (_FloodProtector.HandleFlood(_socket.RemoteEndPoint) == false)
                    {
                        //Disconnect();
                        //return;
                    }


                    //Get length from the buffer, convert to Int16 and read the rest of the packet.

                    if (_buffer[0] == 0 && _buffer[1] == 0)
                    {
                        Read();
                        return;
                    }

                    try
                    {
                        _buffer = new byte[BitConverter.ToInt16(_buffer, 0) - 2];
                    }
                    catch
                    {
                        //Sometimes here is a error because the first 2 bytes are '0'
                        //I really don't know how to fix that... so lets ignore it :P
                    }

                    if (_buffer.Length > 0)
                    {
                        settings.ReceivedPackets++;
                        _socket.Receive(_buffer, _buffer.Length, SocketFlags.Partial);
                        _buffer = CryptEngine.Crypt(_buffer, NetworkKey);
                        Type pck = FileClientPacketProcessor.ProcessPacket(_buffer, _socket.RemoteEndPoint.ToString());
                        if (pck != null)
                        {
                            ReceiveBasePacket rbp = (ReceiveBasePacket)Activator.CreateInstance(pck, this, _buffer);
                            rbp.Run();
                        }
                        else
                        {
                            //unknown packet received
                            //Disconnect();
                            Read();
                            return;
                        }

                        Read();
                        return;
                    }
                    else
                    {
                        //Disconnect when no length is given... maybe flood? just disconnect :P
                        //Disconnect();
                        Read();
                        return;
                    }
                }
                else
                {
                    //Disconnect();
                    Read();
                    return;
                }
            }
            catch
            {
                //if(!_socket.Connected)
                //    Disconnect();
                Read();
                return;
            }
        }
Пример #17
0
        public Byte[] EndReceive(IAsyncResult result)
        {
            if (_closed)
            {
                return(null);
            }

            Int32 i;

            try
            {
                i = _socket.EndReceive(result);
                if (i <= (Int32)_sizeHeaderLen)
                {
                    return(null);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown error at LengthedSocket::EndReceive! Exception: {0}", e);
                return(null);
            }


            var buffer = (Byte[])result.AsyncState;
            var len    = 0UL;

            switch (_sizeHeaderLen)
            {
            case SizeType.None:
                len = (UInt64)i;
                break;

            case SizeType.Char:
                len = buffer[0];
                break;

            case SizeType.Word:
                len = BitConverter.ToUInt16(buffer, 0);
                break;

            case SizeType.Dword:
                len = BitConverter.ToUInt32(buffer, 0);
                break;

            case SizeType.Qword:
                len = BitConverter.ToUInt64(buffer, 0);
                break;
            }

            var buff = new Byte[len - (Byte)(_countSize ? _sizeHeaderLen : 0)];

            if (buff.Length == 0)
            {
                return(null);
            }

            Array.Copy(buffer, (Byte)(_countSize ? _sizeHeaderLen : 0), buff, 0, buff.Length);

            if (_needDecrypt)
            {
                CryptEngine.Decrypt(buff);
            }

            return(buff);
        }
Пример #18
0
        public static Packet GetPacket(byte[] data)
        {
            Packet temp = new Packet();

            string buffer  = Encoding.Default.GetString(data);
            bool   crypted = true;

            if (buffer.Contains('|'))
            {
                crypted = false;
            }

            if (crypted)
            {
                string   message = CryptEngine.Decrypt(buffer);
                string[] array   = message.Split('|');

                temp.PT = (PType.PacketType)Enum.Parse(typeof(PType.PacketType), array[0]);

                if (temp.PT == PType.PacketType.Message)
                {
                    temp.MPT   = (PType.MessagePacketType)Enum.Parse(typeof(PType.MessagePacketType), array[1]);
                    temp.SData = array[2] ?? null;
                }
                else if (temp.PT == PType.PacketType.Session)
                {
                    temp.SPT   = (PType.SessionPacketType)Enum.Parse(typeof(PType.SessionPacketType), array[1]);
                    temp.SData = null;
                }
            }
            else
            {
                string[] array = buffer.Split('|');

                try
                {
                    temp.PT = (PType.PacketType)Enum.Parse(typeof(PType.PacketType), array[0]);
                }
                catch
                {
                    if (array[1].Length == 172)
                    {
                        temp.PT = PType.PacketType.PublicKey;
                    }
                }

                if (temp.PT == PType.PacketType.PublicKey)
                {
                    string pkey_temp = "<?xml version=\"1.0\" encoding=\"utf-16\"?>\n" +
                                       "<RSAParameters xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n" +
                                       "\t<Exponent>AQAB</Exponent>\n" +
                                       "\t<Modulus>" + array[1] + "</Modulus>\n" +
                                       "</RSAParameters>";
                }
                else if (temp.PT == PType.PacketType.Message)
                {
                    temp.MPT   = (PType.MessagePacketType)Enum.Parse(typeof(PType.MessagePacketType), array[1]);
                    temp.SData = array[2];
                }
                else if (temp.PT == PType.PacketType.Session)
                {
                    temp.SPT   = (PType.SessionPacketType)Enum.Parse(typeof(PType.SessionPacketType), array[1]);
                    temp.SData = null;
                }
            }

            return(temp);
        }
Пример #19
0
        protected void btnMwsLogin_Click(object sender, EventArgs e)
        {
            string EmailID = txtEmailID.Value.Trim().SafeSqlLiteral(1);
            string Pwd     = txtPassword.Value.Trim().SafeSqlLiteral(1);

            if (string.IsNullOrEmpty(EmailID) || string.IsNullOrEmpty(Pwd))
            {
                //error
                divLoginErr.InnerHtml = UiMsg.Login.InvalidCredentials.ErrorWrap();
            }
            else
            {
                Users   obj = new Users();
                DataSet ds  = obj.GetUsrAuthDetails(EmailID);

                if (!DataUtils.IsDataSetNull(ds, 0))
                {
                    DataRow dr = ds.Tables[0].Rows[0];

                    if (dr["OpResult"].ToString() == "0")
                    {
                        // count is more than one
                        divLoginErr.InnerHtml = UiMsg.Login.InvalidCredentials.ErrorWrap();
                    }
                    else
                    {
                        string UserStatusID = dr["UserStatusID"].ToString();

                        if (UserStatusID == DbSettings.UserStatus.Active)
                        {
                            string Salt     = dr["Salt"].ToString();
                            string SavedPwd = dr["Password"].ToString();
                            string UserID   = dr["UserID"].ToString();

                            CryptEngine objCrypt = new CryptEngine();

                            if (objCrypt.VerifyHash(Pwd, Salt, SavedPwd))
                            {
                                //auth success
                                FormsAuthentication.RedirectFromLoginPage(UserID, false);
                                //string[] url = Request.UrlReferrer.Query.Split(new string[] { "ReturnUrl=%2f" }, StringSplitOptions.None);
                                //Response.Redirect(url[1]);
                            }
                            else
                            {
                                divLoginErr.InnerHtml = UiMsg.Login.InvalidCredentials.ErrorWrap();
                            }
                        }
                        else
                        {
                            //user is not allowed to login
                            divLoginErr.InnerHtml = UiMsg.Login.NotAuthorized.ErrorWrap();
                        }
                    }
                } //dataset not null
                else
                {
                    divLoginErr.InnerHtml = UiMsg.Global.Error.ErrorWrap();
                }
            } //valid mail & pwd
        }     //btn login