Здравствуйте, решил сделать дешифратор sqlite3, для примера взял допустим пароли от хрома. И появилась проблема, а конкретно в функции CryptUnprotectData . Типа вот выделяется память под pbData для зашифрованного пароля encrypted далее для CryptUnprotectData мы передаём данные с encrypted и decrypted, под decrypted память должна выделится внутри CryptUnprotectData , так как мы длину не знаем. В итоге CryptUnprotectData ничего не делает и выдает ошибку 0xcccccc
Библиотеки я приложил.
Мб Chrome поменял метод шифрования....
C++:
// ConsoleApplication2.cpp : Этот файл содержит функцию "main". Здесь начинается и заканчивается выполнение программы.
//
#pragma comment(lib, "crypt32.lib")
#include <iostream>
#include <sstream>
#include <algorithm>
#include <windows.h>
#include <Wincrypt.h>
#include "sqlite3.h"
class Chrome {
public:
std::stringstream getPasswords(sqlite3* db) {
std::string sql = "SELECT action_url, username_value, password_value FROM logins";
std::stringstream dump(std::string(""));
sqlite3_stmt* pStmt;
int rc;
rc = sqlite3_prepare(db, sql.c_str(), -1, &pStmt, 0);
if (rc != SQLITE_OK) {
dump << "statement failed rc = " << rc;
return dump;
}
rc = sqlite3_step(pStmt);
while (rc == SQLITE_ROW) {
dump << sqlite3_column_text(pStmt, 0) << std::endl;
dump << (char*)sqlite3_column_text(pStmt, 1) << std::endl;
DATA_BLOB encryptedPass, decryptedPass;
encryptedPass.cbData = (DWORD)sqlite3_column_bytes(pStmt, 2);
encryptedPass.pbData = (byte*)malloc((int)encryptedPass.cbData);
memcpy(encryptedPass.pbData, sqlite3_column_blob(pStmt, 2), (int)encryptedPass.cbData);
CryptUnprotectData(
&encryptedPass,
NULL,
NULL,
NULL,
NULL,
0,
&decryptedPass);
char* password = (char*)decryptedPass.pbData;
while (isprint(*password)) {
dump << *password;
password++;
}
dump << std::endl;
free(encryptedPass.pbData);
rc = sqlite3_step(pStmt);
}
rc = sqlite3_finalize(pStmt);
return dump;
}
};
int main() {
sqlite3* db;
std::stringstream dump;
std::string appData = getenv("APPDATA");
std::string path = appData + "/../Local/Google/Chrome/User Data/Default/Login Data";
std::replace(appData.begin(), appData.end(), '\\', '/');
if (sqlite3_open(path.c_str(), &db)) {
std::cout << "Can't open database";
return 0;
}
Chrome ste = Chrome();
dump = ste.getPasswords(db);
std::cout << dump.str();
sqlite3_close(db);
return 0;
}
Библиотеки я приложил.
Мб Chrome поменял метод шифрования....