Exemplo n.º 1
0
        public byte[] LoadKeyBlock(string timestamp, string ski, string hash, byte[] sessionKey)
        {
            var unencryptedMsgPart = $"{_settings.MessageFormat}~{_settings.Company}~{timestamp}~{_settings.MachineId}~";
            var encryptedMsgPart   = $"{_settings.ClientId}~GetAllChannelKeys~{_settings.Company}~{ski.ToUpper()}~{hash}~{_settings.MachineId}~ ~ ~";

            var msg = Encoding.ASCII.GetBytes(unencryptedMsgPart).ToList();

            msg.AddRange(RC4.Encrypt(sessionKey, Encoding.ASCII.GetBytes(encryptedMsgPart)));

            _logger.Debug($"GetAllChannelKeys from server: {unencryptedMsgPart}{encryptedMsgPart}");

            return(msg.ToArray());
        }
Exemplo n.º 2
0
        public byte[] GetEncryptedPassword(string timestamp, string ski, byte[] sessionKey)
        {
            var unencryptedMsgPart = $"{_settings.MessageFormat}~{_settings.Company}~{timestamp}~{_settings.MachineId}~";
            var encryptedMsgPart   = $"{_settings.ClientId}~GetEncryptedPassword~{_settings.Company}~{ski}~";

            _logger.Debug($"Get encryption password: {unencryptedMsgPart}{encryptedMsgPart}");

            var msg = Encoding.ASCII.GetBytes(unencryptedMsgPart).ToList();

            msg.AddRange(RC4.Encrypt(sessionKey, Encoding.ASCII.GetBytes(encryptedMsgPart)));

            return(msg.ToArray());
        }
Exemplo n.º 3
0
        private byte[] Rc4Encrypt(string unencryptedMsgPart, string encryptedMsgPart, byte[] sessionKey, string debugMessage)
        {
            var encryptedData = RC4.Encrypt(sessionKey, Encoding.ASCII.GetBytes(encryptedMsgPart));

            unencryptedMsgPart = Add1155Header(unencryptedMsgPart, encryptedData.Length);

            _logger.Debug($"{debugMessage}: {unencryptedMsgPart}{encryptedMsgPart}");

            var msg = Encoding.ASCII.GetBytes(unencryptedMsgPart).ToList();

            msg.AddRange(encryptedData);

            return(msg.ToArray());
        }
Exemplo n.º 4
0
        bool GetEncryptedPassword()
        {
            var msg      = Protocol.GetEncryptedPassword(_timestamp, _ski, _sessionKey);
            var response = _sslClient.SendAndReceive(msg, _settings.VcasServer, _settings.VcasPort + 1, false);

            if (response == null || response.Length <= 8)
            {
                _logger.Error("Failed to GetEncryptedPassword, no valid response!");
                return(false);
            }

            var encryptedPassword = response.Skip(4).Take(response.Length - 4).ToArray();
            var decrypted         = RC4.Decrypt(_sessionKey, encryptedPassword);
            var passwordHex       = Encoding.ASCII.GetString(decrypted.Skip(4).ToArray());

            _logger.Info($"GetEncryptedPassword completed: {passwordHex}");
            return(true);
        }
Exemplo n.º 5
0
        bool SaveEncryptedPassword()
        {
            _password = new byte[32];
            new Random().NextBytes(_password);

            var encodedBytes = RC4.Encrypt(_sessionKey, _password);
            var password     = BytesAsHex(encodedBytes);
            var msg          = Protocol.SaveEncryptedPassword(_timestamp, _ski, password, _sessionKey);

            var response = _sslClient.SendAndReceive(msg, _settings.VcasServer, _settings.VcasPort + 1, false);

            if (response == null || response.Length < 8)
            {
                _logger.Error("Failed to SaveEncryptedPassword, no valid response!");
                return(false);
            }

            _logger.Info($"SaveEncryptedPassword completed, size: {response.Length}");
            return(true);
        }
Exemplo n.º 6
0
        bool LoadKeyBlock()
        {
            var hash = GenerateSignedHash();
            var msg  = Protocol.LoadKeyBlock(_timestamp, _ski, hash, _sessionKey);

            var response = _sslClient.SendAndReceive(msg, _settings.VksServer, _settings.VksPort, false);

            if (response == null || response.Length < 10)
            {
                _logger.Error("Failed to GetAllChannelKeys, no valid response!");
                return(false);
            }

            var encrypted = response.Skip(4).ToArray();
            var decrypted = RC4.Decrypt(_sessionKey, encrypted);

            File.WriteAllBytes(KeyblockFile, decrypted);

            _logger.Info($"GetAllChannelKeys completed: {decrypted.Length} bytes");

            return(true);
        }