Chrome 80 как расшифровывать пароли и куки - PullRequest
0 голосов
/ 06 мая 2020

До Chrome 80 пароли и файлы cookie могут быть расшифрованы только с помощью функции WindowsAPI CryptUnprotectData (например, используется здесь ). Но с Chrome 80 безопасность изменилась, например, объяснение здесь . Но у меня есть некоторые трудности при переходе от теории к практике.

Как уже объяснялось, я начал с получения ключа из файла Local State. Я декодирую его из base64 и расшифровываю с помощью cryptUnprotectData. Но мне сложно понять, что будет дальше. Я не понимаю, что подразумевает история 12-byte random IV data и v10, и как это сделать с практической точки зрения. Как работает этот шаг? Я пробовал использовать Sodium lib, но это не удалось:

void decrypt(const unsigned char *cryptedPassword, std::string &masterKey){
    std::string str{reinterpret_cast<const char*>(cryptedPassword)};
    const std::string iv = str.substr(3, 12);
    const std::string payload{str.substr(15)};
    unsigned char decrypted[payload.length()];
    unsigned long long decrypted_len;
    crypto_aead_aes256gcm_decrypt(
            decrypted, &decrypted_len,
            NULL,
            reinterpret_cast<const unsigned char *>(payload.c_str()), payload.length(),
            reinterpret_cast<const unsigned char *>(iv.c_str()), iv.length(),
            reinterpret_cast<const unsigned char *>(crypto_aead_aes256gcm_NPUBBYTES),
            reinterpret_cast<const unsigned char *>(masterKey.c_str())
    );
    std::cout << "decrypted: " << decrypted << std::endl;
}
Error C2131: expression did not evaluate to a constant (it is about the definition of decrypted)

Но я не могу установить, что он имеет постоянную величину, потому что длина неизвестна перед запуском.

Более того , Я очень сомневаюсь в успехе этого алгоритма, даже без этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...