Экспертиза SQLite исследует данные встроенных приложений: мобильных программ, браузеров, мессенджеров, настольного ПО, устройств и локальных сервисов. Объектом часто является не один файл с расширением .db, а согласованный комплект из основного файла базы, журнала упреждающей записи WAL, файла общей памяти SHM, журнала отката, резервных копий и контекста приложения. Специалист определяет структуру и данные, проверяет целостность, оценивает следы изменений и возможность восстановления. Это отдельное направление экспертизы баз данных и СУБД.
Предварительно можно оценить, достаточно ли материалов для ответа. Для первого обращения обычно хватает описания приложения и события, перечня файлов с размерами и временем получения, версии устройства или программы и указания спорного периода. Прогноз может показать, что нужные страницы ещё есть в WAL или копии, либо выявить отсутствие подходящего источника после контрольной точки, VACUUM, secure_delete или перезаписи. По итогам становится понятно, стоит ли начинать полное исследование или сначала искать дополнительные копии.
Не открывайте единственный файл SQLite обычным приложением и не отделяйте его от файлов с тем же именем и суффиксами -wal, -shm или -journal. Запуск программы может выполнить контрольную точку, изменить схему, служебные поля или удалить временные файлы. Сначала сохраните весь контейнер приложения либо образ носителя, зафиксируйте источник, время и часовой пояс, затем работайте с проверенной копией.
Отдельно о том, что будет, если ответить не удастся. Задачу, по которой уже из присланных материалов видно, что вывода не получится, мы просто не берём в работу и говорим об этом сразу. Это не обещание положительного вывода: отказ на входе означает лишь, что невозможность видна уже из перечня материалов. Если же невозможность выясняется по итогам полноценного исследования, это результат, а не пустой счёт: заключение объясняет, почему ответа нет и чего именно не хватило. В споре такой вывод часто закрывает вопрос: обоснованный ответ, что страницы удалённых записей уже переиспользованы приложением, показывает суду границы имеющихся источников. Назначать ли после этого дополнительную или повторную экспертизу, решает назначивший её орган. Бывает и частичная невозможность: тогда указывают, на какие вопросы ответ получен, а на какие нет и по какой причине.
Кто снимает копию, решают по объекту. Иногда это делает сам заказчик или его администратор по согласованному плану; иногда — наш специалист, удалённо или с выездом, как отдельная консультация; иногда фиксация входит в саму экспертизу. Выбор зависит от объекта и от того, чей он: комплект файлов приложения снимают иначе, чем образ всего носителя, а с изъятого устройства — иначе, чем с рабочего компьютера сотрудника. Если инфраструктурой управляет другая сторона, порядок доступа определяет суд, и фиксацию проводят с участием эксперта.
Копировать устройство или контейнер приложения можно, только имея на это право. Образ носителя телефона или рабочего компьютера — это переписка, документы и сведения о людях целиком, а не один спорный файл, поэтому объём копирования, круг допущенных лиц, срок хранения и порядок удаления рабочих копий определяют до начала работ. Если устройство принадлежит другой стороне или третьему лицу, копию получают через суд — ходатайством об истребовании или об обеспечении доказательств.
Особенность SQLite как объекта исследования
SQLite — встраиваемая библиотека, а не отдельный сервер с обязательными пользователями и централизованным аудитом. Значение таблиц, идентификаторов и временных полей задаёт приложение. Одинаковый формат файла может использоваться совершенно разными программами, а конкретная сборка SQLite, параметры компиляции, расширения, PRAGMA и ключ шифрования влияют на чтение и интерпретацию.
Чтобы определить состав и происхождение базы:
- идентифицируют приложение, пакет, профиль пользователя, путь и назначение каждой базы;
- устанавливают версию SQLite и при возможности параметры компиляции, размер страницы, кодировку, версию схемы и режим журналирования;
- проверяют, является ли файл обычной SQLite, зашифрованным контейнером либо производным форматом;
- связывают технические таблицы с интерфейсом и логикой конкретной версии приложения;
- отделяют состояние на момент изъятия от данных, восстановленных из свободных областей или иных копий.
Что может и чего не может установить эксперт
При достаточных материалах можно описать схему и содержимое, проверить внутренние связи, сопоставить несколько состояний, извлечь из WAL кадры подтверждённых транзакций, исследовать журнал отката, оценить повреждение и восстановить часть доступных фрагментов. Вывод должен различать активные данные, ранее удалённые страницы, неподтверждённые кандидаты и сведения из внешних источников.
При достаточных материалах эксперт может установить:
- какие таблицы, индексы, триггеры и представления существовали и какие записи читаются в представленном состоянии;
- какие кадры подтверждённых транзакций содержит согласованный WAL, какую границу состояния они позволяют воспроизвести и какие изменения ещё не отражены в основном файле базы;
- различаются ли версии базы и какие строки или поля изменились между согласованными снимками;
- имеются ли структурные нарушения, признаки неполного копирования или несогласованности основного файла базы и WAL;
- сохранились ли кандидаты на ранее удалённые сведения и насколько надёжна их интерпретация;
- соответствует ли база измеримым требованиям приложения или миграции.
SQLite не хранит универсальный ответ о физическом пользователе и времени каждой операции. Файловые метки времени отражают действия файловой системы и могут меняться при копировании, синхронизации или выполнении контрольной точки. Поля created_at и updated_at имеют смысл только после проверки кода и правил приложения. Эксперт может сопоставить событие с техническими идентификаторами по учётной записи, журналам программы, ОС, облачной синхронизации и другим устройствам; вопрос о том, какое физическое лицо действовало и с каким умыслом, разрешает суд или иной уполномоченный орган.
Какие материалы сохранить
Лучший объект — криминалистическая копия всего носителя или контейнера приложения, полученная документированным способом. Когда это невозможно, основной файл базы собирают одновременно с соседними служебными файлами. Для каждого объекта фиксируют исходный путь и устройство, средство получения и его версию, дату, время и часовой пояс, размер и SHA-256 завершённой мастер-копии. Мастер-копию сохраняют неизменной, исследование ведут на рабочей копии; после каждой передачи повторно проверяют SHA-256 и записывают отправителя, получателя, время и носитель.
В комплект обычно включают:
- основной файл базы и файлы с суффиксами
-wal,-shm,-journal, а также иные временные файлы в каталоге; - предыдущие версии, резервные и синхронизированные копии, снимки и экспорт приложения;
- контейнер приложения, настройки, кэш, журналы, данные учётной записи и файлы конфигурации;
- версия приложения, ОС и устройства, установочный пакет, библиотеки и при наличии исходный код запросов и миграций;
- ключи или параметры шифрования — отдельно и только через согласованный защищённый канал;
- описание спорных действий, локальное время, часовой пояс и известные перезапуски, обновления, очистки или синхронизации;
- техническое задание, модель данных, правила формирования полей и схема переноса.
Копирование только основного файла базы во время работы программы может дать несогласованный результат. Если сбор с работающей системы неизбежен, способ выбирают с учётом режима журналирования: API оперативного резервного копирования (Online Backup API), VACUUM INTO или согласованный снимок хранилища решают разные задачи и создают производный объект, поэтому действия и их влияние протоколируют.
Передача копии, в которой есть сведения о людях или охраняемая законом тайна, требует законного основания. По назначенной экспертизе объекты поступают от назначившего органа; вне процесса — от обладателя сведений и в объёме, необходимом для ответа на поставленные вопросы. Обезличивание при этом обсуждают не как уступку, а как способ передать меньше, чем есть. Эксперт не разглашает сведения, ставшие известными ему в связи с исследованием, а рабочие копии удаляет по окончании работы.
Журнал отката, WAL и SHM
В режиме журнала отката до изменения основного файла базы в журнал записываются прежние версии страниц активной транзакции. Для восстановления после незавершённой транзакции важен именно «горячий» журнал, признаки которого проверяют по правилам SQLite. После фиксации, отката или восстановления файл в зависимости от режима может быть удалён, усечён, обнулён либо остаться как неактивный постоянный журнал; само наличие файла не означает сохранность истории операций.
В режиме WAL новые версии страниц добавляются в -wal, а основной файл базы обновляется при выполнении контрольной точки. Кадры WAL содержат номера страниц, признаки фиксации и контрольные суммы; корректная последовательность позволяет построить состояния на подтверждённых границах транзакций. WAL — циклически используемый рабочий файл, а не бессрочная история. Отделение WAL от базы или открытие базы без него может привести к потере уже подтверждённых изменений либо к повреждению.
Файл -shm содержит индекс WAL (wal-index) для координации доступа и обычно может быть построен заново из WAL, однако при изъятии его сохраняют вместе с комплектом как часть исходного состояния. Нельзя просто объединять страницы или считать любой кадр последним значением: проверяются заголовки, служебные значения salt, контрольная сумма, граница подтверждённой транзакции, размер страницы и принадлежность именно этой базе.
Удалённые данные и границы восстановления
Следы могут находиться в списке свободных страниц (freelist), незанятых областях и страницах переполнения, WAL, журнале отката, старой копии или образе носителя. Результат зависит от повторного использования страниц, auto_vacuum, VACUUM, secure_delete, последующей записи, контрольной точки и поведения приложения. Удаление логической строки не гарантирует ни немедленного физического стирания, ни обязательной сохранности.
Команда .recover и API восстановления предназначены для извлечения доступного содержимого из повреждённой базы. Официальная документация предупреждает: восстановленные данные могут быть неполными или изменёнными, нарушать ограничения, а ранее удалённые значения — появиться снова. Поэтому извлечение выполняют в отдельный новый файл, сохраняют исходник и маркируют происхождение каждой группы данных. Такой результат нельзя без проверки выдавать за точную прежнюю базу. Если спор целиком о том, что и когда изменилось в записях, его разбирает экспертиза изменений и удаления данных.
Целостность и причины повреждения
PRAGMA integrity_check проверяет формат страниц, структуру B-tree, список свободных страниц, индексы и ряд внутренних согласований. quick_check выполняет более быстрый и менее полный вариант, а внешние ключи проверяются отдельно через foreign_key_check. Успешный результат не подтверждает смысловую правильность записей, полноту истории или соответствие бизнес-правилам приложения.
Повреждение возможно из-за некорректного копирования открытой базы, удаления либо перемещения WAL, дефектов хранилища, нарушения блокировок на сетевой файловой системе, одновременной работы несовместимых процессов, переименования файлов, восстановления несогласованных компонентов или ошибок вне SQLite. Для SQLite 3.7.0–3.51.2 как редкую версионную гипотезу учитывают также ошибку самой библиотеки: при сбросе журнала упреждающей записи часть подтверждённых изменений могла теряться. Она исправлена в версии 3.51.3 и в отдельных обратных переносах исправления. Чтобы различить причины, сопоставляют сообщения приложения и ОС, файловые события, режим журналирования, точную версию библиотеки и воспроизводимые тесты на копии.
Как проверить миграцию SQLite
SQLite использует динамическую типизацию и type affinity (сродство типов), поэтому совпадения DDL или количества строк недостаточно. Проверяют фактические классы хранения значений, ключи и rowid, таблицы WITHOUT ROWID и STRICT, ограничения, значения по умолчанию, вычисляемые столбцы, правила сортировки, триггеры, представления, индексы и миграции приложения.
Особое внимание уделяют представлению дат и времени, часовым поясам, логическим и десятичным значениям, JSON и BLOB, нормализации текста, NULL, кодировке и преобразованию идентификаторов. Сверка указывает контрольный момент, запросы, правила канонизации, отклонённые строки и изменения после среза. Поведение приложения проверяют отдельно: часть ограничений и каскадов могла обеспечиваться кодом либо зависеть от PRAGMA foreign_keys. Когда предметом спора становится сам перенос, а не устройство базы, задачу закрывает экспертиза миграции баз данных.
Примеры вопросов на экспертизу
При судебной экспертизе окончательный круг вопросов определяет суд, а в иных предусмотренных законом процедурах — орган или лицо, назначившие экспертизу. Вопросы о виновности, умысле, правовой квалификации события, нарушении договора и ответственности разрешает суд или иной уполномоченный орган. Эксперт отвечает на поставленные вопросы в пределах специальных знаний и представленных материалов; о неясности вопроса, выходе за пределы компетенции или недостаточности материалов он в установленном порядке сообщает суду, органу или лицу, назначившим экспертизу.
До назначения стороны могут использовать приведённые ниже формулировки как предложения о технических вопросах. Для SQLite полезно указать приложение и его версию, комплект файлов, таблицу или сущность, период, часовой пояс и проверяемый технический признак. Например, можно предложить исследовать, отражают ли основной файл базы, WAL и журналы приложения удаление записи X и какие временные значения связаны с событием, либо сохранились ли фрагменты ранее удалённых записей таблицы Y. Дополнительные примеры:
- Является ли представленный файл базой SQLite и каковы его основные параметры?
- Какие таблицы и записи читаются в согласованном состоянии основного файла базы и WAL?
- Какие кадры подтверждённых транзакций содержит согласованный WAL, какую границу состояния они позволяют воспроизвести и какие изменения ещё не отражены в основном файле базы?
- Чем различаются представленные версии базы на указанные моменты?
- Имеются ли структурные нарушения и как они влияют на чтение конкретных данных?
- Сохранились ли фрагменты ранее удалённых записей и с какой уверенностью они интерпретируются?
- Что означают конкретные поля времени и идентификаторы с учётом логики приложения?
- Соответствует ли структура базы указанным требованиям или версии программы?
- Полностью ли перенесены перечисленные сущности в целевую систему?
- Какие ограничения материалов препятствуют определённому ответу?
Порядок исследования и результат
Исходный комплект сохраняют как мастер-копию, проверяют SHA-256 и исследуют рабочие копии. Специалист идентифицирует формат и приложение, разбирает схему и страницы, сопоставляет основной файл базы с WAL, выполняет документированные запросы, проверяет целостность, сравнивает версии и испытывает альтернативные объяснения. Изменяющие команды восстановления выполняются только на отдельной рабочей копии.
Результатом может быть консультация, внесудебное исследование, заключение специалиста, судебная экспертиза или рецензия. Ориентир по стоимости — от 100 000 ₽, срок — от 10 рабочих дней; расчёт зависит от числа файлов и приложений, объёма, повреждения, шифрования, восстановления, периода и вопросов. Процессуальный статус задаёт документ о назначении, а доказательственное значение определяет суд. Если судебная экспертиза уже назначена, назначенный по делу эксперт не принимает от одной стороны напрямую дополнительные файлы приложения, образы носителей и выгрузки и не даёт ей частную оценку по существу поручения: вопросы, доступ и новые материалы идут через назначивший орган. Это не исключает обращения стороны к другому, не назначенному по делу специалисту — за консультацией или рецензией по законно полученным материалам. Готовое чужое заключение проверяет рецензия на заключение экспертизы баз данных и СУБД.
Проведение экспертизы по уголовному делу
Судебная экспертиза по уголовному делу производится государственными судебными экспертами и иными экспертами из числа лиц, обладающих специальными знаниями.
Негосударственными судебно-экспертными учреждениями постановление Пленума Верховного Суда Российской Федерации от 21 декабря 2010 г. № 28 «О судебной экспертизе по уголовным делам» признаёт некоммерческие организации, созданные в соответствии с Гражданским кодексом Российской Федерации и Федеральным законом «О некоммерческих организациях» и осуществляющие судебно-экспертную деятельность в соответствии с принятыми ими уставами.
По сведениям организации, проведение судебных экспертиз предусмотрено её уставом (см. действующую редакцию в разделе «Документы организации»). Это само по себе не означает автоматического поручения любой экспертизы. Возможность поручить конкретное исследование определяет назначающий орган с учётом предмета дела, квалификации эксперта, оснований для отвода и действующего перечня экспертиз, выполняемых только государственными судебно-экспертными организациями.