예제 #1
0
파일: Program.cs 프로젝트: Afr0/GonzoNet
        private static void RunAsClient()
        {
            GonzoNet.PacketHandlers.Register(0x02, false, 0, new OnPacketReceive(PacketHandlers.HandleServerChallenge));
            //GonzoNet requires a log output stream to function correctly. This is built in behavior.
            GonzoNet.Logger.OnMessageLogged += new MessageLoggedDelegate(Logger_OnMessageLogged);

            NetworkFacade.Client              = new NetworkClient("127.0.0.1", 12345);
            NetworkFacade.Client.OnConnected += new OnConnectedDelegate(m_Client_OnConnected);

            LoginArgsContainer LoginArgs = new LoginArgsContainer();

            LoginArgs.Enc      = new AESEncryptor("test");
            LoginArgs.Username = "******";
            LoginArgs.Password = "******";
            LoginArgs.Client   = NetworkFacade.Client;

            SaltedHash Hash = new SaltedHash(new SHA512Managed(), LoginArgs.Username.Length);

            PacketHandlers.PasswordHash = Hash.ComputePasswordHash(LoginArgs.Username, LoginArgs.Password);

            NetworkFacade.Client.Connect(LoginArgs);

            while (true)
            {
                Thread.Sleep(1000);
            }
        }
예제 #2
0
        /// <summary>
        /// User clicked button to log in.
        /// </summary>
        private void BtnLogin_Click(object sender, EventArgs e)
        {
            LoginArgsContainer Args = new LoginArgsContainer();

            if (TxtPassword.Text != "" && TxtUsername.Text != "")
            {
                NetworkFacade.Client = new NetworkClient(GlobalSettings.Default.LoginServerIP, 2106,
                                                         GonzoNet.Encryption.EncryptionMode.AESCrypto);
                NetworkFacade.Client.OnConnected += new OnConnectedDelegate(NetworkController.Client_OnConnected);

                Args.Username = TxtUsername.Text.ToUpper();
                Args.Password = TxtPassword.Text.ToUpper();

                SaltedHash Hash    = new SaltedHash(new SHA512Managed(), Args.Username.Length);
                byte[]     HashBuf = Hash.ComputePasswordHash(Args.Username.ToUpper(), Args.Password.ToUpper());
                Args.Enc    = new AESEncryptor(Convert.ToBase64String(HashBuf));
                Args.Client = NetworkFacade.Client;

                PlayerAccount.Username = TxtUsername.Text;

                LblStatus.Invoke(new MethodInvoker(delegate { LblStatus.Visible = true; }));
                LblStatus.Invoke(new MethodInvoker(delegate { LblStatus.Text = "Connecting..."; }));

                NetworkController.OnReceivedCharacters += new OnReceivedCharactersDelegate(NetworkController_OnReceivedCharacters);

                NetworkFacade.Client.Connect(Args);
            }
            else
            {
                MessageBox.Show("Please enter a username and password!");
            }
        }
        public static void SendLoginRequest(LoginArgsContainer Args)
        {
            //Variable length...
            PacketStream Packet = new PacketStream((byte)PacketType.LOGIN_REQUEST, 0);

            Packet.WriteByte(0x00);

            SaltedHash Hash = new SaltedHash(new SHA512Managed(), Args.Username.Length);

            MemoryStream MemStream = new MemoryStream();

            DecryptionArgsContainer DecryptionArgs = Args.Enc.GetDecryptionArgsContainer();

            MemStream.WriteByte((byte)Args.Username.Length);
            MemStream.Write(Encoding.ASCII.GetBytes(Args.Username), 0, Encoding.ASCII.GetBytes(Args.Username).Length);

            byte[] HashBuf = Hash.ComputePasswordHash(Args.Username, Args.Password);
            PlayerAccount.Hash = HashBuf;

            MemStream.WriteByte((byte)HashBuf.Length);
            MemStream.Write(HashBuf, 0, HashBuf.Length);

            Packet.WriteUInt16((ushort)(PacketHeaders.UNENCRYPTED + MemStream.ToArray().Length + 4));
            Packet.WriteBytes(MemStream.ToArray());

            string[] Version = GlobalSettings.Default.ClientVersion.Split('.');

            Packet.WriteByte((byte)int.Parse(Version[0])); //Version 1
            Packet.WriteByte((byte)int.Parse(Version[1])); //Version 2
            Packet.WriteByte((byte)int.Parse(Version[2])); //Version 3
            Packet.WriteByte((byte)int.Parse(Version[3])); //Version 4

            Args.Client.Send(Packet.ToArray());
        }
        /// <summary>
        /// Authenticate with the service client to get a token,
        /// Then get info about avatars & cities
        /// </summary>
        /// <param name="username"></param>
        /// <param name="password"></param>
        public void InitialConnect(string username, string password)
        {
            var client = NetworkFacade.Client;
            LoginArgsContainer Args = new LoginArgsContainer();

            Args.Username = username;
            Args.Password = password;

            //Doing the encryption this way eliminates the need to send key across the wire! :D
            SaltedHash Hash = new SaltedHash(new SHA512Managed(), Args.Username.Length);

            byte[] HashBuf = Hash.ComputePasswordHash(Args.Username, Args.Password);
            Args.Enc    = new GonzoNet.Encryption.ARC4Encryptor(Convert.ToBase64String(HashBuf));
            Args.Client = client;

            client.Connect(Args);
        }
        public static void SendLoginRequest(NetworkClient Client, string Username, string Password)
        {
            //Variable length...
            PacketStream Packet = new PacketStream(0x00, 0);

            Packet.WriteByte(0x00);

            SaltedHash Hash = new SaltedHash(new SHA512Managed(), Username.Length);

            byte[] HashBuf = new byte[Encoding.ASCII.GetBytes(Password).Length +
                                      Encoding.ASCII.GetBytes(Username).Length];

            MemoryStream MemStream = new MemoryStream();

            PasswordDeriveBytes Pwd = new PasswordDeriveBytes(Encoding.ASCII.GetBytes(Password),
                                                              Encoding.ASCII.GetBytes("SALT"), "SHA1", 10);

            byte[] EncKey = Pwd.GetBytes(8);
            PlayerAccount.EncKey = EncKey;

            MemStream.WriteByte((byte)Username.Length);
            MemStream.Write(Encoding.ASCII.GetBytes(Username), 0, Encoding.ASCII.GetBytes(Username).Length);

            HashBuf            = Hash.ComputePasswordHash(Username, Password);
            PlayerAccount.Hash = HashBuf;

            MemStream.WriteByte((byte)HashBuf.Length);
            MemStream.Write(HashBuf, 0, HashBuf.Length);

            MemStream.WriteByte((byte)EncKey.Length);
            MemStream.Write(EncKey, 0, EncKey.Length);

            Packet.WriteByte((byte)(2 + MemStream.ToArray().Length + 4));
            Packet.WriteBytes(MemStream.ToArray());
            //TODO: Change this to write a global client version.
            Packet.WriteByte(0x00); //Version 1
            Packet.WriteByte(0x00); //Version 2
            Packet.WriteByte(0x00); //Version 3
            Packet.WriteByte(0x01); //Version 4

            Client.Send(Packet.ToArray());
        }
예제 #6
0
        public static void SendLoginRequest(LoginArgsContainer Args)
        {
            PacketStream InitialPacket = new PacketStream((byte)PacketType.LOGIN_REQUEST, 0);

            InitialPacket.WriteHeader();

            ECDiffieHellmanCng PrivateKey = Args.Client.ClientEncryptor.GetDecryptionArgsContainer()
                                            .AESDecryptArgs.PrivateKey;

            //IMPORTANT: Public key must derive from the private key!
            byte[] ClientPublicKey = PrivateKey.PublicKey.ToByteArray();

            byte[] NOnce = Args.Client.ClientEncryptor.GetDecryptionArgsContainer().AESDecryptArgs.NOnce;

            InitialPacket.WriteInt32(((byte)PacketHeaders.UNENCRYPTED +
                                      /*4 is for version*/ 4 + (ClientPublicKey.Length + 1) + (NOnce.Length + 1)));

            SaltedHash Hash = new SaltedHash(new SHA512Managed(), Args.Username.Length);

            byte[] HashBuf = Hash.ComputePasswordHash(Args.Username, Args.Password);
            PlayerAccount.Hash = HashBuf;

            string[] Version = GlobalSettings.Default.ClientVersion.Split('.');

            InitialPacket.WriteByte((byte)int.Parse(Version[0])); //Version 1
            InitialPacket.WriteByte((byte)int.Parse(Version[1])); //Version 2
            InitialPacket.WriteByte((byte)int.Parse(Version[2])); //Version 3
            InitialPacket.WriteByte((byte)int.Parse(Version[3])); //Version 4

            InitialPacket.WriteByte((byte)ClientPublicKey.Length);
            InitialPacket.WriteBytes(ClientPublicKey);

            InitialPacket.WriteByte((byte)NOnce.Length);
            InitialPacket.WriteBytes(NOnce);

            Args.Client.Send(InitialPacket.ToArray());
        }
예제 #7
0
    public static string GetPasswordHash(string password, string salt)
    {
        SaltedHash SHash = new SaltedHash(new SHA512Managed(), salt.Length);

        return(Convert.ToBase64String(SHash.ComputePasswordHash(salt.ToUpper(), password.ToUpper())));
    }