• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

sqlite3 decrypte error 0xcccccc

WhoopZee

New member
25.08.2020
1
0
BIT
0
Здравствуйте, решил сделать дешифратор sqlite3, для примера взял допустим пароли от хрома. И появилась проблема, а конкретно в функции CryptUnprotectData . Типа вот выделяется память под pbData для зашифрованного пароля encrypted далее для CryptUnprotectData мы передаём данные с encrypted и decrypted, под decrypted память должна выделится внутри CryptUnprotectData , так как мы длину не знаем. В итоге CryptUnprotectData ничего не делает и выдает ошибку 0xcccccc

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 поменял метод шифрования....
 

Вложения

  • библеотеки.zip
    2,1 МБ · Просмотры: 161

pp11

Green Team
16.09.2018
201
82
BIT
1
Какая странная у вас комбинация C и C++ в коде)))
А вообще я присоединяюсь к вопросу. Месяца три назад делал похожую вещь, не помню была ошибка или нет, но вот CryptUnprotectData у меня работал криво.

Мб Chrome поменял метод шифрования....

Не думаю, так как WebPassView отображает пароли корректно.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!