Что такое » cookies.sqlite » ?
В нашей базе содержится 11 разных файлов с именем cookies.sqlite . You can also check most distributed file variants with name cookies.sqlite.

Подробности о наиболее часто используемом файле с именем «cookies.sqlite»
Продукт: (Пустое значение) Компания: (Пустое значение) Описание: (Пустое значение) Версия: (Пустое значение) MD5: 00000000000000000000000000000000 SHA1: da39a3ee5e6b4b0d3255bfef95601890afd80709 SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 Размер: 0 Папка: %SystemDiskRoot% ОС: Windows Vista Частота: Высокая ![]()

System Explorer это наша бесплатная, удостоенная наград программа для быстрой проверки всех работающих процессов с помощью нашей базы данных. Эта программа поможет вам держать систему под контролем.
«cookies.sqlite» безопасный или опасный?
Файл с именем «cookies.sqlite» может быть безопасным или опасным. Чтобы дать правильную оценку, вы должны определить больше атрибутов файла. Самый простой способ это сделать — воспользоваться нашей бесплатной утилитой для проверки файлов посредством нашей базы данных. Эта утилита содержит множество функций для контролирования вашего ПК и потребляет минимум системных ресурсов.
Щёлкните здесь, чтобы загрузить System Explorer.
Анатомия Огненного лиса
Захотел мой друг установить себе FireFox. И не просто установить, а так чтобы было «как у тебя». У FireFox есть встроенный инструмент, для публикации списка установленных дополнении. Я тут же им воспользовался и опубликовал свои дополнения. Но так как друг человек к ИТ не сильно близкий, хотя такой же ленивый, то куда-то там заходить, скачивать, устанавливать, настраивать ему совсем не хотелось. Говорит «зачем все это, у тебя же все на флешке, просто скопируй мне».
Пришлось призадуматься: просто скопировать нельзя, кроме настроек FireFox и его плагинов, там еще есть пароли, история посещении, избранное. Зачем ему знать по каких порносайтам я бродил. Вручную чистить не хочется. Хранится все это в файлах, а не в реестре — FireFox кроссплатформенный, а в Линуксе реестра, насколько я знаю, нет. Значит файлы, в которых это все хранится, надо попробовать заменить на файлы из свежеустановленного FireFox-а.
Задача-минимум: выяснить где FireFox хранить сохраненные пароли и историю.
Задача-максимум: составить общее мнение о назначении файлов в каталоге FireFox.
Предупреждаю сразу, все что удалось узнать — это не результат дизассемблирования, дебагинга, перевода манулов, анализа кода. Это простое сравнение каталогов, чтение в блокноте конфигов и эксперименты с заменой файлов у двух установленных FireFox-ов.
Итак, пробуем включить интуицию, благо имена там вполне осмысленные, смотрим на каталог свежеустановленного FireFox-а и видим там такие подкаталоги:
Как видите, остались еще вопросы по некоторым файлам. По другим файлам я не уверен, что они выполняют именно ту роль, которая здесь им приписана. Надеюсь что кто-то сможет дополнить в комментариях или напишет свой пост о внутреннем устройстве любимого нами Огненного Лиса. И может новой его версии, которую нам обещают в феврале. Удачного все сёрфинга.
Статья ASM – работа с базами SQLite (часть 2. Читаем cookies браузеров)
Рассмотрев в предыдущей части формат и основные возможности подсистемы SQLite, перейдём к операциям с данными, которые осуществляются посредством вызова методов из библиотеки sqlite3.dll. Самая последняя версия 3.35.05 этой либы выдаёт на экспорт всего 329 функций, предоставляя нам широкий выбор действий. Некоторые из них могут иметь переменное число параметров, и автор не стал делать на них акцент. Он просто оформил все функции с соглашением о вызове "cdecl" (декларация языка С++), а не стандартным "stdcall". Это означает, что на выходе, ответственность за очистку аргументов функции в стеке полностью возложена на нас, для чего ассемблер FASM имеет макросы cinvoke и ccall (последний используется для вызовов по указателю). Экскурсии по часто используемым функциям и посвящена данная часть статьи.
Одним из недостатков компилятора FASM (по сравнению с тем-же масмом) является отсутствие в базовом его пакете большинства заголовочных файлов с описанием структур. Томас Грыштар ограничился лишь основными библиотеками типа User/Shell/Kernel32.dll, зато предусмотрел простую возможность добавления сторонних инклуд, по мере их необходимости. В частности, это относится к перечислению импорта из статически подключаемых библиотек при компиляции проектов. Применительно к указанным выше DLL, освобождают нас от этой рутины файлы из папки FASM\INCLUDE\API , в которых перечислены все функции экспорта каждой из DLL. Теперь, просто подключив их к своему исходному коду, нам не нужно импортировать функции явно – компилятор сам позаботится об этом.
Чтобы добавить красок в работу с базами-данных SQLite, я (придерживаясь рекомендаций автора fasm) создал точно такой-же инклуд импорта, только для библиотеки sqlite3.dll. Результат настолько воодушевил, что не поленился собрать аналогичный инклуд сразу и для консольной либы msvcrt.dll – оба этих файла можно будет найти в скрепке, в подвале статьи. В итоге, служебная часть исходника остаётся за его периметром во-внешних инклудах, что повышает читабельность кода.
1. Основные функции библиотеки sqlite 3.dll
Функции SQLite позволяют выполнять следующий набор операций:
Из этого списка, нашим интересам удовлетворяет только пункт(3), поскольку мы планируем вытягивать из баз-данных кукисы и пароли интернет-браузеров. Если рассматривать возможности программирования всех операций, то основной посыл статьи уйдёт на пятый план, так-что лучше остановимся на одном. По сути, поняв общий принцип формирования запросов, без особого труда можно будет выполнять любые операции – тут главное разобраться, что такое запрос и кто его выполняет.
1.1. sqlite3_open_v2(), sqlite3_close()
База – это файл данных. Согласно общепринятому алгоритму работы с файлами, для начала базу нужно открыть функцией sqlite3_open_v2() . Во-второй этой версии, в прототип были добавлены два дополнительных параметра: flags и zVfs . Последний означает Virtual-File-System (vfs) и нам не нужен. Зато флаг даёт возможность не только открывать базу, но и создавать её. Конкретное действие определяется перечисленными ниже константами:
Данная функция открытия базы проделывает огромный объём работы, подготавливая контент и окружение для всех последующих функций sqlite3.dll. Она копирует содержимое базы в оперативную память ОЗУ, выстраивает локальную таблицу указателей на инфо-ячейки таблицы и многое другое. Если open_v2() предоставляет программные ресурсы, то родственная ей функция sqlite3_close() наоборот освобождает их. Однако в её вызове нет необходимости, если далее закрывается сама программа, т.к. ExitProcess() на выходе в любом случае проделывает аналогичную работу, освобождая глобальные ресурсы процесса на более низком уровне.
1.2. Операторы запросов SQLite
Значит базу открыли, и теперь нужно произвести с ней какие-либо действия. Для этого, мы должны послать ядру соответствующий запрос, который состоит как-минимум из двух операторов: SELECT и FROM (рассматриваем чтение). Об этом, прямым текстом сообщает и название языка программирования "Structured Query Language", или язык структурированных запросов. Исторически, операторы любой СУБД делятся на 4 типа, и SQLite здесь не исключение:
Операторы определения данных (Data Definition Language, DDL):
Как видим, для обычного чтения данных используется оператор SELECT , которому передаются ещё несколько уточняющих запрос аргументов – это имена столбцов в таблице (т.е. что именно интересует), имя таблицы через оператор FROM (т.е.где искать, поскольку таблиц в одной базе может быть несколько), и если нужно условие, посредством оператора WHERE . Вот пара простых примеров оформления запросов:
Для начала нам этого хватит, а с диалектом более сложных запросов мы ознакомимся в конце этой статьи. Несколько линков по теме:
Основные запросы SQL, которые должен знать каждый программист:
1.3. prepare() и finalize () – подготовка оператора запроса
На следующем этапе, подготовленный запрос в виде текстовой строки необходимо скомпилировать в байт-код, чем занимается синтаксический анализатор функции sqlite3_prepare_v2() . Переварив строку, эта функция модифицирует её в соответствующий формат и помещает полученный бинарник в память, а нам возвращает лишь дескриптор на него. В документации, этот дескриптор называют "STMT" , что означает Prepared-Statement-Object (готовый объект заявления).
В последующих операциях чтения, мы должны будем передавать этот объект всем функциям-исполнения конкретно данного запроса. Если-же захотим сменить запрос на другой (с иными операторами), то сначала нужно аннулировать предыдущий функцией sqlite3_finalize() , и только потом оформлять новый, обратно функцией prepare_v2() . Вот её прототип:
В базовой версии этой функции необходимо было всегда финализировать запросы, перед тем-как оформлять новые. Но в усовершенствованной версии(2) необходимость в этом отпала, т.к. автор посчитал данное действо само-собой разумеющимся, и зашил его внутрь исполняющих запрос функций. Теперь, если запрос отрабатывает до конца, то сбрасывать его не нужно. Однако если мы хотим прервать запрос на половине исполнения (например планировали чтение всех строк базы, а потом решили остановиться на 10-ой), то вызов sqlite3_finalize() в этом случае обязателен. Данный нюанс способен изрядно попортить нервы, поэтому не сбрасывайте его со-счетов. По большому счёту, в финализации отработанных запросов нет ничего страшного, поэтому можно действовать по усмотрению.
1.4. step() и exec () – исполнение запроса
Непосредственным исполнением предписанных в запросах операций занимаются две функции – это sqlite3_step() и sqlite3_exec() . Первая немного предпочтительней, поскольку позволяет более тонко контролировать процесс исполнения, хотя для чтения каждой из строк таблицы её нужно вызывать в цикле. Это означает, что на каждом шаге Step, функция просто перемещает указатель на следующую строку, и если это не последняя, то возвращает в регистре EAX константу SQLITE_ROW=64h (есть ещё строки), иначе SQLITE_DONE=65h (выполнено и достигли конца таблицы).
Что делать дальше с этой строкой определяют уже
функции sqlite3_step() . Например, сместившись на очередную позицию, мы можем запросить внутри цикла следующие из них, которые будем использовать в примерах ниже:
Прототипы у всех этих методов одинаковые – в первом аргументе передаём дескриптор скомпилированного функцией sqlite3_prepare_v2() запроса, а во-втором – индекс столбца для чтения (он привязан к последовательности в запросе, а не к порядковому номеру столбца в глобальной таблице). Здесь уместным будет замечание, что столбцы в таблицах любой базы-данных нумеруются начиная с нуля, а строки с единицы. Метод sqlite3_column_type() может возвращать одну из перечисленных ниже констант:
Как видим, SQLite не имеет отдельного класса для хранения даты/времени – они определяются в виде значений INTEGER, FLOAT или TEXT. При этом предпочтительный вариант именно TEXT, поскольку при помощи операторов ASC/DESC позволяет сортировать строки по дате. В остальных вариантах, эта возможность не поддерживается. Вот как они представляются в ячейках таблицы. Здесь можно ознакомиться с деталями:
2.0. Практика – собираем информацию о базе-данных
Теперь посмотрим, как выглядит всё это хозяйство на практике. В примере я сброшу на консоль общую информацию о базе SQLite, в которой хранятся кукисы браузера Chrome. Чтобы не мешать работе браузера, сначала нужно будет сформировать путь до его кукисов, и скопировать их в свою директорию. Функция из shell32.dll SHGetFolderPathA() с ключом CSIDL_LOCAL_APPDATA возвратит нам папку юзера ..\AppData\Local , к которой добавим строку с адресом кукисов хрома. Не смотря на то, что функция устаревшая, её не оказалось в инклуде импорта FASM\INCLUDE\API\SHELL32.INC , поэтому добавим её туда самостоятельно. Вот исходник и результат его работы:
Так, не открывая базу в стороннем редакторе, мы получили имена столбцов и если это шелл-код, он может сформировать строку запроса прямо на-лету. Ясно, что структура таблицы кукисов известна всем, но если мы столкнёмся с какой-нибудь базой на удалённом узле, то "слепое" вычисление имени столбцов (и типов данных в них) может сыграть нам на руку. К примеру обнаружив поле BLOB (Binary-Long-Object, массив двоичных данных) можно сделать вывод, что перед нами зашифрованное содержимое, и это может быть пароль или другая конфиденциальная инфа.
2.1. Практика – чтение "cookies" браузеров
Теперь чуть усложним задачу, и попробуем изъять из этой базы все кукисы. Читать будем обозначенные на скрине выше поля, но сначала дадим короткое определение, что такое вообще "cookie", какие они бывают, и зачем нужны.
можно найти более развёрнутый ответ на эти вопросы, от самих разрабов Хром.
————————
Кукисы – это текстовые файлы у нас на компьютерах, в которых хранится инфа о наших предыдущих действиях на сайтах. Когда мы совершаем какое-то действие (например, вводим пароли входа в аккаунт), сервер сбрасывает эту информацию в куки и отправляет браузеру вместе со страницей. Теперь, когда мы следующий раз заходим на тот-же сайт или страницу, браузер отправляет куки обратно. Они бывают временными и постоянными – в браузерах Хром, время их жизни определяет значение в столбце "expires_utc" . Постоянные куки остаются на компьютере, когда мы закрываем вкладку сайта, а временные удаляются.
По сути куки не опасны – это обычный текст. Они не могут запускать процессы и взаимодействовать с ОС как-бы то нибыло. Но некоторые подозрительные личности в маске джокера могут попытаться украсть их, чтобы отследить наши действия в сети, или зайти в аккаунт без авторизации. Именно это и представляет потенциальную угрозу в хранение кукисов. Кроме входов в аккаунты они умеют запоминать:
Согласно общепринятым правилам, серверы могут высылать кукисы строго предопределённого типа, которые можно распознать по их именам: