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()); }
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()); }
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()); }
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); }
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); }
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); }