Cегодня рассмотрим методы извлечения и анализа баз данных из Android-устройств. Основной фокус — работа с SQLite базами данных приложений через root доступ для получения ценной информации.
Важно: Статья фокусируется на Android 11-15. Для доступа к базам данных требуется root доступ.
Требования
Обязательные условия:
Подготовка окружения
Установка ADB
macOS:
Linux:
Windows: Скачать Platform Tools с https://developer.android.com/studio/releases/platform-tools
Установка SQLite для анализа
macOS:
Linux:
Проверка подключения и root
Перед началом работы необходимо убедиться, что устройство правильно подключено и у нас есть root доступ. Это критически важно, так как без root мы не сможем получить доступ к базам данных приложений.
Сначала проверим подключение устройства:
Если устройство отображается как device, значит USB debugging включен и все работает корректно. Если вы видите unauthorized, нужно подтвердить разрешение на экране устройства.
Теперь проверим наличие root доступа:
Если команда возвращает
Метод 1: Поиск и извлечение баз данных
Первый шаг в анализе данных — найти все базы данных на устройстве. Android приложения хранят свои данные в SQLite базах данных, которые находятся в директории
Поиск всех баз данных на устройстве
Начнем с поиска всех баз данных на устройстве. Это даст нам общее представление о том, какие приложения установлены и какие данные можно извлечь.
Как видно из результата, на устройстве установлены популярные мессенджеры (WhatsApp, Telegram) и социальные сети (Instagram). Каждое приложение имеет свои базы данных, которые хранят различную информацию. Например, msgstore.db в WhatsApp содержит все сообщения, а cache4.db в Telegram — кэш сообщений и медиафайлов.
Поиск баз данных конкретного приложения
Если нас интересует конкретное приложение, можно сузить поиск. Например, для WhatsApp:
Здесь мы видим несколько важных баз данных:
Извлечение баз данных
После того как мы нашли нужные базы данных, их нужно скопировать на компьютер для анализа. Прямое копирование из /data/data/ может быть медленным, поэтому сначала копируем на sdcard/, а затем извлекаем через ADB.
В результате мы получили все базы данных WhatsApp на нашем компьютере. Теперь можно анализировать их локально, не нагружая устройство
Полный дамп приложения
Если нужно сохранить абсолютно все данные приложения (не только базы данных, но и файлы, настройки, кэш), лучше сделать полный дамп. Это особенно полезно, когда нужно сохранить состояние приложения для последующего восстановления или глубокого анализа.
Полный дамп занимает значительно больше места (2.5 GB против 125 MB баз данных), так как включает в себя все медиафайлы, кэш, временные файлы и другую информацию. Это самый надежный способ сохранить все данные приложения, но требует больше времени и места на диске.
Метод 2: Анализ баз данных WhatsApp
WhatsApp хранит всю информацию в нескольких SQLite базах данных. Основная база msgstore.db содержит все сообщения, контакты, группы и другую информацию. Давайте разберемся в структуре этой базы и научимся извлекать из нее ценную информацию.
Структура базы msgstore.db
Перед тем как извлекать данные, нужно понять структуру базы. Каждая таблица хранит определенный тип информации:
Ключевые таблицы:
Извлечение всех сообщений
Самая ценная информация — это сами сообщения. В таблице message хранятся все текстовые сообщения с временными метками, отправителями и получателями.
Как видно из результата, мы получаем полную историю сообщений с датами, контактами и содержимым. Временные метки хранятся в миллисекундах с 1 января 1970 года (Unix epoch), поэтому делим на 1000 и конвертируем в читаемый формат. Поле key_remote_jid содержит идентификатор контакта в формате номер@s.whatsapp.net
Извлечение контактов и номеров телефонов
Помимо сообщений, в базе wa.db хранятся все контакты с их номерами телефонов и именами. Это позволяет связать идентификаторы из сообщений с реальными людьми.
Поиск сообщений с ключевыми словами
Один из самых полезных способов извлечения ценной информации — поиск сообщений по ключевым словам. Это позволяет быстро найти пароли, токены, адреса и другую чувствительную информацию, которая может быть отправлена в сообщениях
Как видно, мы нашли несколько сообщений с паролями. Это критически важная информация, которая часто передается через мессенджеры. Используя оператор LIKE с различными вариантами написания (английский и русский), мы можем найти практически все упоминания паролей, даже если они написаны на разных языках.
Извлечение медиафайлов (пути к файлам)
Помимо текстовых сообщений, в базе данных хранятся пути к медиафайлам (фото, видео, документы), которые были отправлены или получены. Это позволяет не только увидеть, какие файлы передавались, но и извлечь их, если они еще находятся на устройстве.
Вложение 4779 недоступно
Извлечение статусов доставки сообщений
Метод 3: Анализ баз данных Telegram
Telegram использует другую структуру баз данных по сравнению с WhatsApp. Основная база cache4.db хранит кэш сообщений, контактов и медиафайлов. В отличие от WhatsApp, Telegram может хранить сообщения в облаке, но локальный кэш все равно содержит много полезной информации.
Структура базы cache4.db
Telegram использует более простую структуру базы данных, но это не означает, что информации меньше. Давайте посмотрим на структуру:
Ключевые таблицы:
В Telegram сообщения хранятся в таблице messages с временными метками и идентификаторами пользователей. В отличие от WhatsApp, здесь используется числовой идентификатор пользователя вместо JID.
Извлечение информации о пользователях
Извлечение информации о чатах
Поиск удаленных сообщений (если не очищены)
Извлечение медиафайлов (пути)
Метод 4: Анализ баз данных Instagram
Структура базы main_db
Извлечение прямых сообщений
Извлечение информации о пользователях
Метод 5: Извлечение ключей шифрования
Извлечение ключа WhatsApp
Извлечение базы ключей axolotl.db
Извлечение ключей идентификации
sqlite3 whatsapp_databases/axolotl.db "SELECT id, identity FROM identity_key_store;"
Пример!
Метод 6: Извлечение системных данных
Извлечение контактов
Извлечение SMS
Извлечение истории звонков
Метод 7: Практические SQL запросы для извлечения ценной информации
Поиск всех паролей и токенов
Поиск номеров телефонов и email
Поиск адресов
Экспорт всех сообщений в CSV
Итоги
Начните с полного дампа приложения, затем анализируйте базы данных через SQLite. Используйте SQL запросы для поиска ценной информации.
Действия проделанные в этой статье тестировались на тестовом личном смартфоне и моих личных аккаунтах. Все имена, номера и аккаунты это придуманные значения.
Материал предназначен для сотрудников, которые занимаются криминалистикой, то есть исключительно для легального использования. Автор не несет ответственности за неправомерное использование.
Важно: Статья фокусируется на Android 11-15. Для доступа к базам данных требуется root доступ.
Требования
Обязательные условия:
- Root доступ на устройстве
- USB debugging включен
- Устройство разблокировано
- ADB установлен на компьютере
- Прямой доступ к /data/data/ (базы данных приложений)
- Извлечение ключей шифрования
- Полный дамп приложений
Подготовка окружения
Установка ADB
macOS:
Code:
brew install android-platform-tools
Linux:
Code:
sudo apt-get install android-tools-adb android-tools-fastboot sqlite3
Windows: Скачать Platform Tools с https://developer.android.com/studio/releases/platform-tools
Установка SQLite для анализа
macOS:
Code:
brew install sqlite
Linux:
Code:
sudo apt-get install sqlite3
Проверка подключения и root
Перед началом работы необходимо убедиться, что устройство правильно подключено и у нас есть root доступ. Это критически важно, так как без root мы не сможем получить доступ к базам данных приложений.
Сначала проверим подключение устройства:
Code:
adb devices
Если устройство отображается как device, значит USB debugging включен и все работает корректно. Если вы видите unauthorized, нужно подтвердить разрешение на экране устройства.
Теперь проверим наличие root доступа:
Code:
adb shell su -c "id"
Не удалось прогрузить медиа
Если команда возвращает
uid=0(root), значит root доступ есть и мы можем продолжать. Без root доступа большинство методов из этой статьи работать не будут.Метод 1: Поиск и извлечение баз данных
Первый шаг в анализе данных — найти все базы данных на устройстве. Android приложения хранят свои данные в SQLite базах данных, которые находятся в директории
/data/data/<package_name>/databases/. Эти базы содержат всю информацию: сообщения, контакты, настройки, медиафайлы и многое другое.Поиск всех баз данных на устройстве
Начнем с поиска всех баз данных на устройстве. Это даст нам общее представление о том, какие приложения установлены и какие данные можно извлечь.
Code:
adb shell su -c "find /data/data -name '*.db' 2>/dev/null" | head -30
Не удалось прогрузить медиа
Как видно из результата, на устройстве установлены популярные мессенджеры (WhatsApp, Telegram) и социальные сети (Instagram). Каждое приложение имеет свои базы данных, которые хранят различную информацию. Например, msgstore.db в WhatsApp содержит все сообщения, а cache4.db в Telegram — кэш сообщений и медиафайлов.
Поиск баз данных конкретного приложения
Если нас интересует конкретное приложение, можно сузить поиск. Например, для WhatsApp:
Code:
adb shell su -c "find /data/data/com.whatsapp -name '*.db' 2>/dev/null"
Не удалось прогрузить медиа
Здесь мы видим несколько важных баз данных:
msgstore.db — основная база сообщений WhatsApp
wa.db — база контактов и настроек
axolotl.db — база ключей шифрования (критически важна для расшифровки)
chatsettings.db — настройки чатов
msgstore.db-wal — Write-Ahead Log файл (временные изменения базы)
Извлечение баз данных
После того как мы нашли нужные базы данных, их нужно скопировать на компьютер для анализа. Прямое копирование из /data/data/ может быть медленным, поэтому сначала копируем на sdcard/, а затем извлекаем через ADB.
Code:
adb shell su -c "cp -r /data/data/com.whatsapp/databases /sdcard/whatsapp_db"<br>angust@linux-pc:~$ adb pull /sdcard/whatsapp_db ./whatsapp_databases
В результате мы получили все базы данных WhatsApp на нашем компьютере. Теперь можно анализировать их локально, не нагружая устройство
Полный дамп приложения
Если нужно сохранить абсолютно все данные приложения (не только базы данных, но и файлы, настройки, кэш), лучше сделать полный дамп. Это особенно полезно, когда нужно сохранить состояние приложения для последующего восстановления или глубокого анализа.
Code:
adb shell su -c "tar -czf /sdcard/whatsapp_full.tar.gz /data/data/com.whatsapp"<br>angust@linux-pc:~$ adb pull /sdcard/whatsapp_full.tar.gz ./
Не удалось прогрузить медиа
Полный дамп занимает значительно больше места (2.5 GB против 125 MB баз данных), так как включает в себя все медиафайлы, кэш, временные файлы и другую информацию. Это самый надежный способ сохранить все данные приложения, но требует больше времени и места на диске.
Метод 2: Анализ баз данных WhatsApp
WhatsApp хранит всю информацию в нескольких SQLite базах данных. Основная база msgstore.db содержит все сообщения, контакты, группы и другую информацию. Давайте разберемся в структуре этой базы и научимся извлекать из нее ценную информацию.
Структура базы msgstore.db
Перед тем как извлекать данные, нужно понять структуру базы. Каждая таблица хранит определенный тип информации:
Code:
sqlite3 whatsapp_databases/msgstore.db ".tables"
Ключевые таблицы:
- message — все текстовые сообщения
- message_media — информация о медиафайлах (фото, видео, документы)
- chat_list — список всех чатов и групп
- group_participants — участники групп
- receipts — статусы доставки и прочтения сообщений
- messages_fts — полнотекстовый поиск по сообщениям
Извлечение всех сообщений
Самая ценная информация — это сами сообщения. В таблице message хранятся все текстовые сообщения с временными метками, отправителями и получателями.
Code:
sqlite3 whatsapp_databases/msgstore.db "SELECT datetime(timestamp/1000, 'unixepoch') as date, key_remote_jid, data, media_wa_type FROM message ORDER BY timestamp DESC LIMIT 20;" | head -20
Не удалось прогрузить медиа
Как видно из результата, мы получаем полную историю сообщений с датами, контактами и содержимым. Временные метки хранятся в миллисекундах с 1 января 1970 года (Unix epoch), поэтому делим на 1000 и конвертируем в читаемый формат. Поле key_remote_jid содержит идентификатор контакта в формате номер@s.whatsapp.net
Извлечение контактов и номеров телефонов
Помимо сообщений, в базе wa.db хранятся все контакты с их номерами телефонов и именами. Это позволяет связать идентификаторы из сообщений с реальными людьми.
Code:
sqlite3 whatsapp_databases/wa.db "SELECT jid, display_name, number FROM wa_contacts WHERE number IS NOT NULL;" | head -20
Не удалось прогрузить медиа
Поиск сообщений с ключевыми словами
Один из самых полезных способов извлечения ценной информации — поиск сообщений по ключевым словам. Это позволяет быстро найти пароли, токены, адреса и другую чувствительную информацию, которая может быть отправлена в сообщениях
Code:
sqlite3 whatsapp_databases/msgstore.db "SELECT datetime(timestamp/1000, 'unixepoch') as date, key_remote_jid, data FROM message WHERE data LIKE '%password%' OR data LIKE '%пароль%' OR data LIKE '%login%' ORDER BY timestamp DESC;"
Не удалось прогрузить медиа
Как видно, мы нашли несколько сообщений с паролями. Это критически важная информация, которая часто передается через мессенджеры. Используя оператор LIKE с различными вариантами написания (английский и русский), мы можем найти практически все упоминания паролей, даже если они написаны на разных языках.
Извлечение медиафайлов (пути к файлам)
Помимо текстовых сообщений, в базе данных хранятся пути к медиафайлам (фото, видео, документы), которые были отправлены или получены. Это позволяет не только увидеть, какие файлы передавались, но и извлечь их, если они еще находятся на устройстве.
Code:
sqlite3 whatsapp_databases/msgstore.db "SELECT datetime(timestamp/1000, 'unixepoch') as date, key_remote_jid, media_name, media_path FROM message_media WHERE media_path IS NOT NULL LIMIT 20;"
Извлечение статусов доставки сообщений
Code:
sqlite3 whatsapp_databases/msgstore.db "SELECT datetime(timestamp/1000, 'unixepoch') as date, key_remote_jid, receipt_server_timestamp, receipt_device_timestamp FROM receipts WHERE receipt_server_timestamp IS NOT NULL LIMIT 20;"
Не удалось прогрузить медиа
Метод 3: Анализ баз данных Telegram
Telegram использует другую структуру баз данных по сравнению с WhatsApp. Основная база cache4.db хранит кэш сообщений, контактов и медиафайлов. В отличие от WhatsApp, Telegram может хранить сообщения в облаке, но локальный кэш все равно содержит много полезной информации.
Структура базы cache4.db
Telegram использует более простую структуру базы данных, но это не означает, что информации меньше. Давайте посмотрим на структуру:
Code:
sqlite3 telegram_databases/cache4.db ".tables"
Ключевые таблицы:
Извлечение всех сообщений
- messages — все сообщения из кэша
- users — информация о пользователях (имена, телефоны)
- chats — информация о группах и каналах
- encrypted_chats — зашифрованные секретные чаты
- dialogs — список всех диалогов
В Telegram сообщения хранятся в таблице messages с временными метками и идентификаторами пользователей. В отличие от WhatsApp, здесь используется числовой идентификатор пользователя вместо JID.
Code:
sqlite3 telegram_databases/cache4.db "SELECT datetime(date, 'unixepoch') as date, uid, message FROM messages ORDER BY date DESC LIMIT 20;"
Не удалось прогрузить медиа
Извлечение информации о пользователях
Code:
sqlite3 telegram_databases/cache4.db "SELECT uid, first_name, last_name, phone FROM users WHERE phone IS NOT NULL;"
Извлечение информации о чатах
Code:
sqlite3 telegram_databases/cache4.db "SELECT uid, title, participants_count FROM chats;"
Не удалось прогрузить медиа
Поиск удаленных сообщений (если не очищены)
Code:
sqlite3 telegram_databases/cache4.db "SELECT datetime(date, 'unixepoch') as date, uid, message FROM messages WHERE message LIKE '%deleted%' OR message IS NULL ORDER BY date DESC;"
Извлечение медиафайлов (пути)
Code:
sqlite3 telegram_databases/cache4.db "SELECT datetime(date, 'unixepoch') as date, uid, media_path FROM messages WHERE media_path IS NOT NULL LIMIT 20;"
Не удалось прогрузить медиа
Метод 4: Анализ баз данных Instagram
Структура базы main_db
Code:
sqlite3 instagram_databases/main_db ".tables"
Извлечение прямых сообщений
Code:
sqlite3 instagram_databases/main_db "SELECT datetime(timestamp, 'unixepoch') as date, thread_id, text FROM direct_messages WHERE text IS NOT NULL ORDER BY timestamp DESC LIMIT 20;"
Не удалось прогрузить медиа
Извлечение информации о пользователях
Code:
sqlite3 instagram_databases/main_db "SELECT user_id, username, full_name, phone_number FROM users WHERE phone_number IS NOT NULL;"
Не удалось прогрузить медиа
Метод 5: Извлечение ключей шифрования
Извлечение ключа WhatsApp
Code:
adb shell su -c "cp /data/data/com.whatsapp/files/key /sdcard/whatsapp_key"
Не удалось прогрузить медиа
Извлечение базы ключей axolotl.db
Code:
sqlite3 whatsapp_databases/axolotl.db ".tables"
Не удалось прогрузить медиа
Извлечение ключей идентификации
sqlite3 whatsapp_databases/axolotl.db "SELECT id, identity FROM identity_key_store;"
Пример!
С этими ключами можно расшифровать зашифрованные сообщения и .crypt14 файлы из backup.[email protected]|0x1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b<br>[email protected]|0x2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c
Метод 6: Извлечение системных данных
Извлечение контактов
Code:
adb shell su -c "cp /data/data/com.android.providers.contacts/databases/contacts2.db /sdcard/contacts.db"<br>angust@linux-pc:~$ adb pull /sdcard/contacts.db ./
Code:
sqlite3 contacts.db "SELECT display_name, number FROM contacts WHERE number IS NOT NULL LIMIT 20;"
Извлечение SMS
Code:
adb shell su -c "cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/sms.db"<br>angust@linux-pc:~$ adb pull /sdcard/sms.db ./
Code:
sqlite3 sms.db "SELECT datetime(date/1000, 'unixepoch') as date, address, body FROM sms ORDER BY date DESC LIMIT 20;"
Извлечение истории звонков
Code:
adb shell su -c "cp /data/data/com.android.providers.contacts/databases/calllog.db /sdcard/calllog.db"<br>angust@linux-pc:~$ adb pull /sdcard/calllog.db ./
Code:
sqlite3 calllog.db "SELECT datetime(date/1000, 'unixepoch') as date, number, duration, type FROM calls ORDER BY date DESC LIMIT 20;"
Метод 7: Практические SQL запросы для извлечения ценной информации
Поиск всех паролей и токенов
Code:
sqlite3 whatsapp_databases/msgstore.db "SELECT datetime(timestamp/1000, 'unixepoch') as date, key_remote_jid, data FROM message WHERE data LIKE '%password%' OR data LIKE '%token%' OR data LIKE '%key%' OR data LIKE '%secret%' OR data LIKE '%пароль%' OR data LIKE '%ключ%' ORDER BY timestamp DESC;"
Поиск номеров телефонов и email
Code:
sqlite3 whatsapp_databases/msgstore.db "SELECT datetime(timestamp/1000, 'unixepoch') as date, key_remote_jid, data FROM message WHERE data LIKE '%+%' OR data LIKE '%@%' OR data GLOB '[i][0-9][0-9][0-9]-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][/i]' ORDER BY timestamp DESC;"
Поиск адресов
Code:
sqlite3 whatsapp_databases/msgstore.db "SELECT datetime(timestamp/1000, 'unixepoch') as date, key_remote_jid, data FROM message WHERE data LIKE '%street%' OR data LIKE '%address%' OR data LIKE '%адрес%' OR data LIKE '%улица%' ORDER BY timestamp DESC;"
Экспорт всех сообщений в CSV
Code:
sqlite3 -header -csv whatsapp_databases/msgstore.db "SELECT datetime(timestamp/1000, 'unixepoch') as date, key_remote_jid, data FROM message ORDER BY timestamp DESC;" > messages_export.csv
Итоги
Начните с полного дампа приложения, затем анализируйте базы данных через SQLite. Используйте SQL запросы для поиска ценной информации.
Действия проделанные в этой статье тестировались на тестовом личном смартфоне и моих личных аккаунтах. Все имена, номера и аккаунты это придуманные значения.
Материал предназначен для сотрудников, которые занимаются криминалистикой, то есть исключительно для легального использования. Автор не несет ответственности за неправомерное использование.
👍5
🔥2
LIMB