У меня была такая же проблема.Ранее я использовал скрипт Python (с интеграцией sqlite) для извлечения данных из файлов cookies.sqlite и perms.sqlite.Последний по-прежнему работает нормально.Действительно, все остальные файлы .sqlite доступны для чтения ... за исключением cookies.sqlite и place.sqlite.Эти два сообщения приводят к ошибке «зашифровано или не является базой данных».
Вместо того, чтобы искать обновление для Python (или sqlite3), я создал патч для файлов .sqlite.Этот C-код изменяет байты со смещением 18 и 19 со 2 на 1. Я запускаю это в Windows под Cygwin, но он должен компилироваться и запускаться в Unix / Linux.
Предупреждение: не делайте этого дляоригинальный файл Firefox cookies.sqlite.Вместо этого скопируйте его во временный файл, а затем запустите исправление для копии.
// ffpatch.c
// Edits the specified Firefox .sqlite file.
// Changes 0x0202 to 0x0101 at offset 18/19.
// BEFORE
// 0000000 S Q L i t e f o r m a t 3 \0
// 0000020 004 \0 002 002 \0 @ \0 \0 005 034 \0 \0 \0 N
// AFTER
// 0000000 S Q L i t e f o r m a t 3 \0
// 0000020 004 \0 001 001 \0 @ \0 \0 005 034 \0 \0 \0 N
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <fcntl.h>
#define PROGNAME "ffpatch"
#define MY_OFFSET 18
int main (int argc, char *argv[])
{
int fd;
char buf[2];
off_t offset;
ssize_t wsize;
if (argc != 2)
{
fprintf(stderr, "usage: %s sqlite-file\n", PROGNAME);
exit(1);
}
if ((fd = open(argv[1], O_RDWR)) == -1)
{
fprintf(stderr, "cannot open %s\n", argv[1]);
exit(1);
}
if ((offset = lseek(fd, MY_OFFSET, SEEK_SET)) != MY_OFFSET)
{
fprintf(stderr, "lseek() failed\n");
exit(1);
}
buf[0] = 1;
buf[1] = 1;
wsize = write(fd, buf, 2);
close(fd);
exit(0);
}