LIMB
Вход Регистрация

тема

Извлекаем ценные данные с Android и месседжеров

Angust · · 0 ответов · 105 просмотров

Cегодня рассмотрим методы извлечения и анализа баз данных из Android-устройств. Основной фокус — работа с SQLite базами данных приложений через root доступ для получения ценной информации.

Важно: Статья фокусируется на Android 11-15. Для доступа к базам данных требуется root доступ.




Требования

Обязательные условия:


  • Root доступ на устройстве
  • USB debugging включен
  • Устройство разблокировано
  • ADB установлен на компьютере
Что НЕ работает без root:

  • Прямой доступ к /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;"
Вложение 4779 недоступно


Извлечение статусов доставки сообщений
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;"
 
Пример!
[email protected]|0x1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b<br>[email protected]|0x2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c
С этими ключами можно расшифровать зашифрованные сообщения и .crypt14 файлы из backup.



Метод 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;" &gt; messages_export.csv
 




Итоги
Начните с полного дампа приложения, затем анализируйте базы данных через SQLite. Используйте SQL запросы для поиска ценной информации.
Действия проделанные в этой статье тестировались на тестовом личном смартфоне и моих личных аккаунтах. Все имена, номера и аккаунты это придуманные значения.

Материал предназначен для сотрудников, которые занимаются криминалистикой, то есть исключительно для легального использования. Автор не несет ответственности за неправомерное использование.
👍5 🔥2

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.