gpt4 book ai didi

c++ - 解密 Firefox 密码数据库

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:56:53 48 4
gpt4 key购买 nike

我想编写一个简单的实用程序,从 Firefox 密码数据库中提取密码(相应的文件在配置文件文件夹中称为 signons.sqlite)。

到目前为止我所做的:使用 sqlite 打开数据库,检索加密的用户名、加密的密码和网站地址(全部存储为 std::string)。

因此,唯一剩下的就是解密用户名和密码字符串。

我尝试了以下(PK11Decrypt 应该将明文密码存储在 plaintext 中):

void Firefox_Importer::PK11Decrypt(string _cipheredBuffer, char **plaintext) {
// declarations needed
SECItem * request;
SECItem * reply;
unsigned int len = (unsigned int)_cipheredBuffer.length();
const char* cipheredBuffer = (const char*)_cipheredBuffer.c_str();

// generate request and reply SECItem; seems to work properly
reply = SECITEM_AllocItem(NULL, NULL, 0);
if (reply == NULL) cout << "Error allocating SECITEM." << endl;
request = NSSBase64_DecodeBuffer(NULL, NULL, cipheredBuffer, len);
if (request == NULL) cout << "Error decoding buffer." << endl;

// the following is not working
SECStatus tmp = PK11SDR_Decrypt(request, reply, NULL);
if(tmp != SECSuccess) cout << "Something went wrong during decrypting" << endl;

*plaintext = (char*)malloc(reply->len + 1);
strncpy(*plaintext, (const char*)reply->data, reply->len);
(*plaintext)[reply->len] = '\0';

SECITEM_FreeItem(request, true);
SECITEM_FreeItem(reply, true);
}

PK11Decrypt 被调用时,它打印出 Something went wrong during decrypting,表明对 PK11SDR_Decrypt 的调用没有正常工作。它始终返回 SECFailure(对应于 -1)。

有没有人有一些提示或知道我做错了什么?

最佳答案

可能是对 PK11_Authenticate() 的调用不是可选的,即使没有设置主密码(是的,NSS 相当困惑)。因此,您可能需要先执行以下操作:

PK11SlotInfo *slot = PK11_GetInternalKeySlot();
if (!slot) cout << "Error getting internal slot" << endl;

SECStatus tmp = PK11_Authenticate(slot, PR_TRUE, NULL);
if (tmp != SECSuccess) cout << "Authentication error" << endl;

请注意,我将 NULL 作为上下文传递给 PK11_Authenticate(),只有在应显示密码提示时才需要上下文。

编辑:没关系,我注意到 PK11SDR_Decrypt() 会在内部调用这两个函数。鉴于您得到 SECFailure 作为结果,PK11_GetInternalKeySlot() 可能会失败,这表明 NSS 未正确初始化。

关于c++ - 解密 Firefox 密码数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7274393/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com