
Содержание
1. Что такое ADB и зачем он нужен
2. Установка ADB
3. Основные команды ADB
4. Подключение Android устройств
5. Извлечение основных данных
6. Работа с файловой системой
7. Извлечение приложений и данных
8. Продвинутые техники извлечения
9. Работа с rooted устройствами
10. Интеграция с другими инструментами
11. Ограничения и подводные камни
12. Реальный кейс расследования
13. Часто задаваемые вопросы
14. Заключение
Введение
В эпоху мобильных технологий смартфоны стали основным хранилищем личной информации, коммуникаций и цифровых следов. Android устройства содержат огромный объем данных: от SMS и контактов до геолокации, приложений и зашифрованных файлов. Для специалистов по цифровой криминалистике извлечение этих данных становится критически важной задачей.
Android Debug Bridge (ADB) - это универсальный инструмент командной строки, разработанный Google для взаимодействия с Android устройствами. ADB позволяет не только отлаживать приложения, но и извлекать практически любые данные с подключенного устройства. Этот инструмент стал стандартом де-факто для мобильной форензики и широко используется правоохранительными органами, частными детективами и специалистами по кибербезопасности.
Проблема заключается в том, что многие специалисты не используют ADB в полной мере из-за сложности команд и отсутствия систематизированных знаний. Большинство руководств ограничиваются базовыми командами, не раскрывая продвинутые техники извлечения данных из защищенных разделов, приложений и системных областей.
В этой статье мы подробно рассмотрим все аспекты работы с ADB для извлечения данных с Android устройств. Вы узнаете, как правильно подключать устройства, использовать основные и продвинутые команды, обходить ограничения безопасности и интегрировать ADB с другими инструментами форензики. Материал включает практические примеры с реальными командами и сценариями использования в расследованиях.
Статья предназначена как для начинающих специалистов, так и для опытных экспертов, желающих углубить свои знания в области мобильной криминалистики. Мы рассмотрим работу как с rooted, так и с unrooted устройствами, различные методы извлечения данных и лучшие практики обеспечения судебной достоверности.
К концу чтения вы сможете самостоятельно извлекать данные с Android устройств в рамках расследований, соблюдая все требования цифровой криминалистики.
Что такое ADB и зачем он нужен
ADB (Android Debug Bridge) представляет собой многофункциональный инструмент командной строки, который служит мостом между компьютером разработчика и Android устройством. Разработанный компанией Google, ADB стал неотъемлемой частью экосистемы Android разработки и мобильной форензики.
Архитектура и компоненты ADB
ADB состоит из трех основных компонентов:
ADB Client - программа на компьютере разработчика, которая отправляет команды
ADB Server - фоновый процесс на компьютере, управляющий коммуникацией
ADB Daemon (adbd) - служба на Android устройстве, выполняющая команды
Возможности ADB для извлечения данных
ADB предоставляет доступ к множеству функций Android устройства:
- Shell доступ - выполнение команд в среде Android
- File transfer - копирование файлов между устройством и компьютером
- Application management - установка, удаление и управление приложениями
- Device information - получение информации об устройстве и его состоянии
- Backup and restore - создание резервных копий данных
- Screen recording - запись экрана устройства
- Input simulation - имитация нажатий и жестов
Применение в цифровой криминалистике
В контексте мобильной форензики ADB используется для:
- Извлечения контактов, SMS и MMS сообщений
- Получения истории звонков и браузера
- Анализа установленных приложений и их данных
- Извлечения медиафайлов (фото, видео, аудио)
- Получения геолокационных данных
- Анализа системных логов и настроек
- Создания полных резервных копий данных
Преимущества и ограничения
Преимущества ADB:
- Полностью бесплатный и официальный инструмент
- Поддержка всех версий Android
- Богатый набор команд и функций
- Возможность автоматизации процессов
Ограничения:
- Требует включенной отладки по USB
- На новых версиях Android ограничен по соображениям безопасности
- Не работает с заблокированными устройствами
- Некоторые данные требуют root доступа
Версии ADB и совместимость
ADB постоянно развивается вместе с Android:
- ADB 1.0.x - базовая версия для Android 1.0-4.0
- ADB 1.1.x - улучшенная поддержка устройств
- ADB 1.2.x - поддержка Android 4.1+
- ADB 1.3.x+ - современные версии с расширенными функциями
Важно использовать актуальную версию ADB для обеспечения совместимости с новыми версиями Android.
Безопасность и судебная достоверность
При использовании ADB в расследованиях важно соблюдать принципы цифровой криминалистики:
- Документировать все выполняемые команды
- Сохранять цепочку хранения доказательств
- Избегать модификации данных на устройстве
- Использовать write-blocker устройства при необходимости
- Создавать хэш-суммы извлекаемых данных
В следующих разделах мы подробно рассмотрим установку ADB и основные техники извлечения данных с Android устройств.
Установка ADB
Установка ADB - первый и важный шаг для работы с Android устройствами. ADB входит в состав Android SDK Platform-Tools и может быть установлен на Windows, Linux и macOS. В этом разделе мы рассмотрим различные способы установки для каждой платформы.
Установка на Windows
Для Windows существует несколько способов установки ADB.
Способ 1: Установка через Android SDK Platform-Tools (рекомендуемый)
1. Скачивание Platform-Tools:
Перейдите на страницу https://developer.android.com/studio/releases/platform-tools
Скачайте архив `platform-tools-latest-windows.zip`
2. Распаковка:
cmd
# Создайте папку для Android инструментов
mkdir C:\Android\platform-tools
# Распакуйте архив в эту папку
3. Добавление в PATH:
- Откройте "Параметры системы" → "Дополнительные параметры системы"
- Нажмите "Переменные среды"
- В разделе "Системные переменные" найдите "Path" и нажмите "Изменить"
- Добавьте путь: `C:\Android\platform-tools`
- Перезагрузите командную строку
4. Проверка установки:
cmd
adb version
# Вывод должен содержать версию ADB
Способ 2: Установка через Chocolatey (для продвинутых пользователей)
powershell
<h2 id="ustanovka-chocolatey-esli-ne-ustanovlen">Установка Chocolatey (если не установлен)</h2>
<h2 id="sleduyte-instruktsiyam-na-https-chocolatey-org">Следуйте инструкциям на https://chocolatey.org/</h2>
<h2 id="ustanovka-adb">Установка ADB</h2>
choco install adb
Способ 3: Установка через Android Studio
1. Скачайте и установите Android Studio с https://developer.android.com/studio
2. Во время установки выберите "SDK Platform-Tools"
3. ADB будет установлен автоматически в папку SDK
Установка на Linux (Ubuntu/Debian)
Способ 1: Установка через apt (рекомендуемый)
bash
<h2 id="obnovlenie-spiska-paketov">Обновление списка пакетов</h2>
sudo apt update
<h2 id="ustanovka-android-platform-tools">Установка Android Platform Tools</h2>
sudo apt install android-tools-adb android-tools-fastboot
<h2 id="proverka-ustanovki">Проверка установки</h2>
adb version
fastboot --version
Способ 2: Установка через Android SDK Platform-Tools
bash
<h2 id="skachivanie-platform-tools">Скачивание Platform-Tools</h2>
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
<h2 id="raspakovka">Распаковка</h2>
unzip platform-tools-latest-linux.zip
sudo mv platform-tools /opt/android/
<h2 id="dobavlenie-v-path">Добавление в PATH</h2>
echo 'export PATH=$PATH:/opt/android/platform-tools' >> ~/.bashrc
source ~/.bashrc
<h2 id="proverka">Проверка</h2>
adb version
Способ 3: Сборка из исходного кода
bash
<h2 id="ustanovka-zavisimostey">Установка зависимостей</h2>
sudo apt install git build-essential openjdk-11-jdk
<h2 id="klonirovanie-repozitoriya">Клонирование репозитория</h2>
git clone https://android.googlesource.com/platform/system/core
git clone https://android.googlesource.com/platform/system/extras
<h2 id="sborka-trebuet-znachitelnyh-resursov">Сборка (требует значительных ресурсов)</h2>
<h2 id="protsess-slozhnyy-i-ne-rekomenduetsya-dlya-bolshinstva-polzovateley">Процесс сложный и не рекомендуется для большинства пользователей</h2>Установка на macOS
Способ 1: Установка через Homebrew (рекомендуемый)
bash
<h2 id="ustanovka-homebrew-esli-ne-ustanovlen">Установка Homebrew (если не установлен)</h2>
<h2 id="sleduyte-instruktsiyam-na-https-brew-sh">Следуйте инструкциям на https://brew.sh/</h2>
<h2 id="ustanovka-android-platform-tools">Установка Android Platform Tools</h2>
brew install android-platform-tools
<h2 id="proverka">Проверка</h2>
adb version
Способ 2: Установка через Android SDK Platform-Tools
bash
<h2 id="skachivanie-platform-tools">Скачивание Platform-Tools</h2>
curl -O https://dl.google.com/android/repository/platform-tools-latest-darwin.zip
<h2 id="raspakovka">Распаковка</h2>
unzip platform-tools-latest-darwin.zip
sudo mv platform-tools /opt/android/
<h2 id="dobavlenie-v-path">Добавление в PATH</h2>
echo 'export PATH=$PATH:/opt/android/platform-tools' >> ~/.zshrc
source ~/.zshrc
<h2 id="proverka">Проверка</h2>
adb version
Способ 3: Установка через Android Studio
1. Скачайте Android Studio для macOS
2. Установите и запустите
3. В SDK Manager установите "Android SDK Platform-Tools"
4. ADB будет доступен в папке SDK
Настройка ADB для работы с устройствами
После установки ADB нужно настроить систему для работы с Android устройствами.
Включение режима разработчика на Android устройстве:
1. Перейдите в "Настройки" → "О телефоне"
2. Найдите "Номер сборки" и нажмите 7 раз (появится сообщение "Вы стали разработчиком")
3. Вернитесь в "Настройки" → "Для разработчиков"
4. Включите "Отладка по USB"
Установка USB драйверов (Windows):
Для Windows необходимы USB драйверы для корректного распознавания устройств:
1. Скачайте Google USB Driver с Android SDK
2. Установите драйвер через Диспетчер устройств
3. Или используйте универсальные драйверы от производителей устройств
Настройка udev правил (Linux):
bash
<h2 id="sozdanie-pravila-dlya-ustroystv">Создание правила для устройств</h2>
sudo nano /etc/udev/rules.d/51-android.rules
<h2 id="dobavte-stroki-dlya-vashego-ustroystva">Добавьте строки для вашего устройства:</h2>
SUBSYSTEM=="usb", ATTR{idVendor}=="VENDOR_ID", MODE="0666", GROUP="plugdev"
<h2 id="primer-dlya-samsung">Пример для Samsung:</h2>
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"
<h2 id="perezagruzka-pravil">Перезагрузка правил</h2>
sudo udevadm control --reload-rules
sudo udevadm trigger
Проверка установки и подключения устройства
Проверка версии ADB:
bash
adb version
<h2 id="android-debug-bridge-version-1-0-41">Android Debug Bridge version 1.0.41</h2>
<h2 id="version-34-0-4-10411341">Version 34.0.4-10411341</h2>
<h2 id="installed-as-usr-bin-adb">Installed as /usr/bin/adb</h2>Запуск ADB сервера:
bash
<h2 id="zapusk-servera">Запуск сервера</h2>
adb start-server
<h2 id="ostanovka-servera">Остановка сервера</h2>
adb kill-server
Подключение устройства:
bash
<h2 id="prosmotr-podklyuchennyh-ustroystv">Просмотр подключенных устройств</h2>
adb devices
<h2 id="vyvod">Вывод:</h2>
<h2 id="list-of-devices-attached">List of devices attached</h2>
<h2 id="r58n123abcd-device">R58N123ABCD device</h2>
<h2 id="poluchenie-informatsii-ob-ustroystve">Получение информации об устройстве</h2>
adb shell getprop ro.product.model
adb shell getprop ro.build.version.release
Решение проблем с подключением:
Проблема: "unauthorized" или "no permissions"
bash
<h2 id="na-ustroystve-podtverdite-otladku">На устройстве подтвердите отладку</h2>
<h2 id="ili-perepodklyuchite-usb-kabel">Или переподключите USB кабель</h2>
<h2 id="na-linux-proverte-prava-dostupa">На Linux проверьте права доступа</h2>
ls -la /dev/bus/usb/
sudo usermod -a -G plugdev $USER
Проблема: устройство не распознается
bash
<h2 id="perezagruzite-adb-server">Перезагрузите ADB сервер</h2>
adb kill-server
adb start-server
<h2 id="proverte-usb-podklyuchenie">Проверьте USB подключение</h2>
lsusb | grep -i android
<h2 id="na-windows-proverte-dispetcher-ustroystv">На Windows проверьте Диспетчер устройств</h2>Проблема: "device offline"
bash
<h2 id="perepodklyuchite-usb-kabel">Переподключите USB кабель</h2>
<h2 id="perezagruzite-ustroystvo">Перезагрузите устройство</h2>
<h2 id="proverte-zaryad-batarei">Проверьте заряд батареи</h2>
<h2 id="otklyuchite-i-vklyuchite-otladku-po-usb">Отключите и включите отладку по USB</h2>Настройка беспроводного ADB (Wi-Fi)
ADB можно использовать через Wi-Fi без USB кабеля:
bash
<h2 id="podklyuchenie-ustroystva-po-usb">Подключение устройства по USB</h2>
adb devices
<h2 id="vklyuchenie-tcp-ip-rezhima">Включение TCP/IP режима</h2>
adb tcpip 5555
<h2 id="otklyuchenie-usb-kabelya">Отключение USB кабеля</h2>
<h2 id="podklyuchenie-po-wi-fi-zamenite-ip-na-ip-ustroystva">Подключение по Wi-Fi (замените IP на IP устройства)</h2>
adb connect 192.168.1.100:5555
<h2 id="proverka-podklyucheniya">Проверка подключения</h2>
adb devices
<h2 id="192-168-1-100-5555-device">192.168.1.100:5555 device</h2>Автоматизация беспроводного подключения:
bash
#!/bin/bash
<h2 id="skript-dlya-besprovodnogo-podklyucheniya-adb">Скрипт для беспроводного подключения ADB</h2>
DEVICE_IP="192.168.1.100"
PORT="5555"
<h2 id="proverka-dostupnosti-ustroystva">Проверка доступности устройства</h2>
ping -c 1 $DEVICE_IP > /dev/null
if [ $? -eq 0 ]; then
echo "Устройство доступно, подключаюсь..."
adb connect $DEVICE_IP:$PORT
# Проверка успешного подключения
adb devices | grep $DEVICE_IP > /dev/null
if [ $? -eq 0 ]; then
echo "Подключение успешно!"
else
echo "Ошибка подключения"
fi
else
echo "Устройство недоступно"
fi
Обновление ADB
ADB регулярно обновляется вместе с новыми версиями Android:
bash
<h2 id="skachivanie-posledney-versii">Скачивание последней версии</h2>
wget https://dl.google.com/android/repository/platform-tools-latest-linux.zip
<h2 id="rezervnoe-kopirovanie-staroy-versii">Резервное копирование старой версии</h2>
sudo mv /opt/android/platform-tools /opt/android/platform-tools-old
<h2 id="ustanovka-novoy-versii">Установка новой версии</h2>
unzip platform-tools-latest-linux.zip
sudo mv platform-tools /opt/android/
<h2 id="proverka">Проверка</h2>
adb version
Безопасность при использовании ADB
При работе с ADB в форензическом контексте важно соблюдать меры безопасности:
- Используйте ADB только в изолированной сети
- Не устанавливайте неизвестные приложения через ADB
- Документируйте все выполняемые команды
- Регулярно обновляйте ADB для устранения уязвимостей
- Используйте VPN при беспроводном подключении
Рекомендуемая конфигурация рабочей станции
Для эффективной работы с ADB рекомендуется:
Аппаратное обеспечение:
- Процессор: минимум 4 ядра
- Оперативная память: 8 GB
- Свободное место на диске: 50 GB для образов и извлекаемых данных
Программное обеспечение:
- ОС: Linux (Ubuntu) или macOS
- ADB: последняя версия
- Python 3.6+ для скриптов
- SQLite browser для анализа баз данных
- Hex editor для анализа бинарных данных
Дополнительные инструменты:
- USB хаб с питанием для одновременной работы с несколькими устройствами
- Write-blocker устройства для судебной работы
- Внешние накопители для хранения извлекаемых данных
Теперь, когда ADB установлен и настроен, можно переходить к изучению основных команд и работе с подключенными устройствами.
Основные команды ADB
ADB предоставляет богатый набор команд для взаимодействия с Android устройствами. Команды делятся на несколько категорий: управление устройством, передача файлов, работа с приложениями, отладка и форензический анализ. В этом разделе мы рассмотрим основные команды с практическими примерами.
Команды управления устройством
adb devices - просмотр подключенных устройств:
bash
<h2 id="bazovyy-sintaksis">Базовый синтаксис</h2>
adb devices [-l]
<h2 id="primery-ispolzovaniya">Примеры использования</h2>
adb devices
<h2 id="list-of-devices-attached">List of devices attached</h2>
<h2 id="r58n123abcd-device">R58N123ABCD device</h2>
adb devices -l
<h2 id="list-of-devices-attached">List of devices attached</h2>
<h2 id="r58n123abcd-device-usb-2-1-2-product-bullhead-model-nexus-5x-device-bullhead">R58N123ABCD device usb:2-1.2 product:bullhead model:Nexus_5X device:bullhead</h2>adb reboot - перезагрузка устройства:
bash
<h2 id="perezagruzka-v-obychnyy-rezhim">Перезагрузка в обычный режим</h2>
adb reboot
<h2 id="perezagruzka-v-recovery-rezhim">Перезагрузка в recovery режим</h2>
adb reboot recovery
<h2 id="perezagruzka-v-bootloader">Перезагрузка в bootloader</h2>
adb reboot bootloader
<h2 id="perezagruzka-v-bezopasnyy-rezhim-esli-podderzhivaetsya">Перезагрузка в безопасный режим (если поддерживается)</h2>
adb reboot safe
adb shell - выполнение команд в оболочке Android:
bash
<h2 id="vhod-v-shell">Вход в shell</h2>
adb shell
<h2 id="vypolnenie-odinochnoy-komandy">Выполнение одиночной команды</h2>
adb shell getprop ro.product.model
<h2 id="nexus-5x">Nexus 5X</h2>
adb shell date
<h2 id="mon-dec-16-14-30-25-utc-2024">Mon Dec 16 14:30:25 UTC 2024</h2>
adb shell uptime
<h2 id="14-30-25-up-2-days-3-45-0-users-load-average-0-50-0-60-0-70">14:30:25 up 2 days, 3:45, 0 users, load average: 0.50, 0.60, 0.70</h2>adb push/pull - передача файлов:
bash
<h2 id="kopirovanie-fayla-na-ustroystvo">Копирование файла на устройство</h2>
adb push local_file.txt /sdcard/Download/
<h2 id="kopirovanie-fayla-s-ustroystva">Копирование файла с устройства</h2>
adb pull /sdcard/Download/remote_file.txt .
<h2 id="rekursivnoe-kopirovanie-papki">Рекурсивное копирование папки</h2>
adb pull /sdcard/DCIM/Camera/ ./camera_photos/
<h2 id="kopirovanie-s-sohraneniem-prav-dostupa">Копирование с сохранением прав доступа</h2>
adb pull -a /system/bin/ls ./ls_binary
Команды для получения информации об устройстве
adb shell getprop - получение свойств устройства:
bash
<h2 id="model-ustroystva">Модель устройства</h2>
adb shell getprop ro.product.model
<h2 id="versiya-android">Версия Android</h2>
adb shell getprop ro.build.version.release
<h2 id="build-number">Build number</h2>
adb shell getprop ro.build.display.id
<h2 id="imei-trebuet-root-ili-opredelennyh-razresheniy">IMEI (требует root или определенных разрешений)</h2>
adb shell service call iphonesubinfo 1 | awk -F "'" '{print $2}' | sed '1 d' | tr -d '.' | awk '{print}' ORS=
<h2 id="seriynyy-nomer">Серийный номер</h2>
adb shell getprop ro.serialno
<h2 id="uroven-api">Уровень API</h2>
adb shell getprop ro.build.version.sdk
adb shell dumpsys - подробная информация о системных сервисах:
bash
<h2 id="informatsiya-o-batarei">Информация о батареи</h2>
adb shell dumpsys battery
<h2 id="informatsiya-o-pamyati">Информация о памяти</h2>
adb shell dumpsys meminfo
<h2 id="spisok-zapuschennyh-protsessov">Список запущенных процессов</h2>
adb shell dumpsys activity processes
<h2 id="informatsiya-o-setevyh-interfeysah">Информация о сетевых интерфейсах</h2>
adb shell dumpsys netstats
<h2 id="spisok-ustanovlennyh-prilozheniy">Список установленных приложений</h2>
adb shell dumpsys package list packages
adb shell pm - управление пакетами (приложениями):
bash
<h2 id="spisok-ustanovlennyh-prilozheniy">Список установленных приложений</h2>
adb shell pm list packages
<h2 id="spisok-sistemnyh-prilozheniy">Список системных приложений</h2>
adb shell pm list packages -s
<h2 id="spisok-polzovatelskih-prilozheniy">Список пользовательских приложений</h2>
adb shell pm list packages -3
<h2 id="informatsiya-o-konkretnom-prilozhenii">Информация о конкретном приложении</h2>
adb shell pm list packages -i com.android.chrome
<h2 id="put-k-apk-faylu">Путь к APK файлу</h2>
adb shell pm path com.android.chrome
Команды для работы с данными
adb backup - создание резервной копии:
bash
<h2 id="rezervnaya-kopiya-vseh-dannyh">Резервная копия всех данных</h2>
adb backup -all -f backup.ab
<h2 id="rezervnaya-kopiya-konkretnogo-prilozheniya">Резервная копия конкретного приложения</h2>
adb backup -f whatsapp_backup.ab com.whatsapp
<h2 id="rezervnaya-kopiya-bez-sistemnyh-prilozheniy">Резервная копия без системных приложений</h2>
adb backup -all -system -f full_backup.ab
<h2 id="rezervnaya-kopiya-s-parolem">Резервная копия с паролем</h2>
adb backup -all -f encrypted_backup.ab
<h2 id="pri-zaprose-vvedite-parol">При запросе введите пароль</h2>adb restore - восстановление из резервной копии:
bash
<h2 id="vosstanovlenie-rezervnoy-kopii">Восстановление резервной копии</h2>
adb restore backup.ab
<h2 id="vosstanovlenie-s-parolem">Восстановление с паролем</h2>
adb restore encrypted_backup.ab
Команды для работы с экраном и вводом
adb screencap - снимок экрана:
bash
<h2 id="snimok-ekrana-v-fayl-na-ustroystve">Снимок экрана в файл на устройстве</h2>
adb shell screencap /sdcard/screen.png
<h2 id="skachivanie-snimka">Скачивание снимка</h2>
adb pull /sdcard/screen.png .
<h2 id="snimok-ekrana-s-ukazaniem-kachestva">Снимок экрана с указанием качества</h2>
adb shell screencap -p /sdcard/screen.jpg
adb screenrecord - запись видео экрана:
bash
<h2 id="zapis-video-30-sekund">Запись видео 30 секунд</h2>
adb shell screenrecord /sdcard/demo.mp4
<h2 id="zapis-s-ukazaniem-vremeni-maksimum-180-sekund">Запись с указанием времени (максимум 180 секунд)</h2>
adb screenrecord --time-limit 60 /sdcard/demo.mp4
<h2 id="zapis-s-ukazaniem-kachestva">Запись с указанием качества</h2>
adb shell screenrecord --bit-rate 8000000 /sdcard/high_quality.mp4
adb input - имитация пользовательского ввода:
bash
<h2 id="imitatsiya-nazhatiya-klavishi">Имитация нажатия клавиши</h2>
adb shell input keyevent 26 # Power button
adb shell input keyevent 82 # Menu button
<h2 id="imitatsiya-kasaniya-ekrana">Имитация касания экрана</h2>
adb shell input tap 500 800 # Касание в координатах x=500, y=800
<h2 id="imitatsiya-svaypa">Имитация свайпа</h2>
adb shell input swipe 300 800 800 800 # Свайп вправо
<h2 id="vvod-teksta">Ввод текста</h2>
adb shell input text "Hello World"
<h2 id="imitatsiya-dlinnogo-nazhatiya">Имитация длинного нажатия</h2>
adb shell input swipe 500 800 500 800 1000
Команды для работы с логами
adb logcat - просмотр системных логов:
bash
<h2 id="prosmotr-vseh-logov-v-realnom-vremeni">Просмотр всех логов в реальном времени</h2>
adb logcat
<h2 id="sohranenie-logov-v-fayl">Сохранение логов в файл</h2>
adb logcat > device_logs.txt
<h2 id="filtratsiya-po-urovnyu-error-warning-info-debug-verbose">Фильтрация по уровню (ERROR, WARNING, INFO, DEBUG, VERBOSE)</h2>
adb logcat *:E # Только ошибки
<h2 id="filtratsiya-po-tegu">Фильтрация по тегу</h2>
adb logcat -s "ActivityManager"
<h2 id="ogranichenie-kolichestva-strok">Ограничение количества строк</h2>
adb logcat -d | head -50
<h2 id="prosmotr-buferov-main-system-crash">Просмотр буферов (main, system, crash)</h2>
adb logcat -b system
Команды для работы с разделами и файловой системой
adb shell ls - просмотр содержимого каталогов:
bash
<h2 id="soderzhimoe-kornevoy-direktorii">Содержимое корневой директории</h2>
adb shell ls /
<h2 id="podrobnaya-informatsiya">Подробная информация</h2>
adb shell ls -la /sdcard/
<h2 id="sortirovka-po-razmeru">Сортировка по размеру</h2>
adb shell ls -S /sdcard/Download/
<h2 id="rekursivnyy-vyvod">Рекурсивный вывод</h2>
adb shell find /sdcard/ -name "*.jpg" | head -10
adb shell df - информация о дисковом пространстве:
bash
<h2 id="obzor-vseh-razdelov">Обзор всех разделов</h2>
adb shell df -h
<h2 id="vyvod">Вывод:</h2>
<h2 id="filesystem-size-used-avail-use-mounted-on">Filesystem Size Used Avail Use% Mounted on</h2>
<h2 id="dev-block-dm-0-55g-32g-23g-59">/dev/block/dm-0 55G 32G 23G 59% /</h2>
<h2 id="dev-block-dm-1-3-9g-2-1g-1-7g-56-vendor">/dev/block/dm-1 3.9G 2.1G 1.7G 56% /vendor</h2>
<h2 id="data-media-55g-32g-23g-59-storage-emulated-0">/data/media 55G 32G 23G 59% /storage/emulated/0</h2>adb shell mount - информация о смонтированных разделах:
bash
<h2 id="spisok-smontirovannyh-faylovyh-sistem">Список смонтированных файловых систем</h2>
adb shell mount
<h2 id="proverka-tipa-faylovoy-sistemy">Проверка типа файловой системы</h2>
adb shell mount | grep -E "(ext4|f2fs|vfat)"
Продвинутые команды ADB
adb shell am - управление активностями и сервисами:
bash
<h2 id="zapusk-prilozheniya">Запуск приложения</h2>
adb shell am start -n com.android.chrome/.MainActivity
<h2 id="zapusk-aktivnosti-s-parametrami">Запуск активности с параметрами</h2>
adb shell am start -a android.intent.action.VIEW -d https://www.google.com
<h2 id="zapusk-servisa">Запуск сервиса</h2>
adb shell am startservice -n com.example/.MyService
<h2 id="prinuditelnoe-zavershenie-prilozheniya">Принудительное завершение приложения</h2>
adb shell am force-stop com.android.chrome
<h2 id="ochistka-dannyh-prilozheniya">Очистка данных приложения</h2>
adb shell pm clear com.android.chrome
adb shell dumpsys - углубленный анализ системных сервисов:
bash
<h2 id="detalnaya-informatsiya-o-prilozhenii">Детальная информация о приложении</h2>
adb shell dumpsys package com.whatsapp
<h2 id="informatsiya-o-wi-fi-soedineniyah">Информация о Wi-Fi соединениях</h2>
adb shell dumpsys wifi
<h2 id="statistika-ispolzovaniya-batarei">Статистика использования батареи</h2>
adb shell dumpsys batterystats
<h2 id="informatsiya-o-zapuschennyh-protsessah">Информация о запущенных процессах</h2>
adb shell dumpsys activity pids
Скрипты автоматизации ADB команд
Скрипт для комплексного сбора информации:
bash
#!/bin/bash
<h2 id="skript-dlya-sbora-bazovoy-informatsii-ob-ustroystve">Скрипт для сбора базовой информации об устройстве</h2>
OUTPUT_DIR="device_info_$(date +%Y%m%d_%H%M%S)"
mkdir -p $OUTPUT_DIR
echo "Сбор информации об устройстве..."
echo "Дата и время: $(date)" > $OUTPUT_DIR/device_report.txt
<h2 id="informatsiya-ob-ustroystve">Информация об устройстве</h2>
echo -e "\n=== ИНФОРМАЦИЯ ОБ УСТРОЙСТВЕ ===" >> $OUTPUT_DIR/device_report.txt
adb shell getprop ro.product.model >> $OUTPUT_DIR/device_report.txt
adb shell getprop ro.build.version.release >> $OUTPUT_DIR/device_report.txt
adb shell getprop ro.serialno >> $OUTPUT_DIR/device_report.txt
<h2 id="informatsiya-o-pamyati">Информация о памяти</h2>
echo -e "\n=== ИНФОРМАЦИЯ О ПАМЯТИ ===" >> $OUTPUT_DIR/device_report.txt
adb shell df -h >> $OUTPUT_DIR/device_report.txt
<h2 id="spisok-ustanovlennyh-prilozheniy">Список установленных приложений</h2>
echo -e "\n=== СПИСОК ПРИЛОЖЕНИЙ ===" >> $OUTPUT_DIR/device_report.txt
adb shell pm list packages -3 >> $OUTPUT_DIR/device_report.txt
<h2 id="snimok-ekrana">Снимок экрана</h2>
echo "Создание снимка экрана..."
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png $OUTPUT_DIR/
adb shell rm /sdcard/screen.png
<h2 id="sbor-logov">Сбор логов</h2>
echo "Сбор системных логов..."
adb logcat -d > $OUTPUT_DIR/system_logs.txt
echo "Сбор информации завершен. Результаты в $OUTPUT_DIR"
Скрипт для массового извлечения файлов:
bash
#!/bin/bash
<h2 id="skript-dlya-izvlecheniya-faylov-po-maske">Скрипт для извлечения файлов по маске</h2>
DEVICE_PATH=$1 # Путь на устройстве, например /sdcard/DCIM/Camera/
LOCAL_PATH=$2 # Локальный путь для сохранения
FILE_MASK=$3 # Маска файлов, например "*.jpg"
if [ $# -ne 3 ]; then
echo "Использование: $0 <device_path> <local_path> <file_mask>"
exit 1
fi
mkdir -p "$LOCAL_PATH"
echo "Извлечение файлов $FILE_MASK из $DEVICE_PATH..."
<h2 id="poluchenie-spiska-faylov">Получение списка файлов</h2>
adb shell find "$DEVICE_PATH" -name "$FILE_MASK" | while read file; do
filename=$(basename "$file")
echo "Извлечение: $filename"
adb pull "$file" "$LOCAL_PATH/$filename"
done
echo "Извлечение завершено."
Обработка ошибок и отладка
Анализ ошибок ADB:
bash
<h2 id="podrobnyy-vyvod-oshibok">Подробный вывод ошибок</h2>
adb devices -l
<h2 id="proverka-logov-adb">Проверка логов ADB</h2>
adb kill-server
adb start-server -a # Включение verbose режима
Восстановление после сбоев:
bash
<h2 id="perezapusk-adb-servera">Перезапуск ADB сервера</h2>
adb kill-server && adb start-server
<h2 id="ochistka-vremennyh-faylov">Очистка временных файлов</h2>
adb shell rm -rf /data/local/tmp/*
<h2 id="proverka-tselostnosti-ustanovki">Проверка целостности установки</h2>
adb version
which adb
Эти основные команды ADB формируют фундамент для работы с Android устройствами. В следующих разделах мы рассмотрим подключение устройств и извлечение конкретных типов данных.
Подключение Android устройств
Правильное подключение Android устройств - критически важный шаг для успешной работы с ADB. Существуют различные способы подключения, каждый из которых имеет свои преимущества и ограничения. В этом разделе мы рассмотрим все методы подключения и решения типичных проблем.
USB подключение
USB подключение является наиболее надежным и распространенным способом работы с ADB.
Подготовка устройства:
1. Включение режима разработчика:
- Перейдите в "Настройки" → "О телефоне"
- Найдите "Номер сборки" и нажмите 7 раз
- Появится уведомление "Вы стали разработчиком"
2. Включение отладки по USB:
- Перейдите в "Настройки" → "Для разработчиков"
- Включите "Отладка по USB"
- Опционально: включите "Установка через USB" для установки APK
3. Настройка параметров разработчика:
- "Не выключать экран" - полезно для длительных операций
- "Сохранять заряд" - оптимизация для работы через USB
- "Отладка беспроводной сети" - для Wi-Fi подключения
Подключение устройства:
bash
<h2 id="proverka-podklyucheniya">Проверка подключения</h2>
adb devices
<h2 id="vyvod-dolzhen-pokazat">Вывод должен показать:</h2>
<h2 id="list-of-devices-attached">List of devices attached</h2>
<h2 id="r58n123abcd-device">R58N123ABCD device</h2>
<h2 id="esli-ustroystvo-ne-raspoznaetsya">Если устройство не распознается:</h2>
adb devices
<h2 id="list-of-devices-attached">List of devices attached</h2>
<h2 id="r58n123abcd-unauthorized">R58N123ABCD unauthorized</h2>
<h2 id="na-ustroystve-podtverdite-zapros-na-otladku">На устройстве подтвердите запрос на отладку</h2>Решение проблем с USB подключением:
Проблема: "device not found" или пустой список устройств
bash
<h2 id="proverte-usb-kabel">Проверьте USB кабель</h2>
lsusb | grep -i android
<h2 id="perezapustite-adb-server">Перезапустите ADB сервер</h2>
adb kill-server
adb start-server
<h2 id="proverte-prava-dostupa-linux">Проверьте права доступа (Linux)</h2>
ls -la /dev/bus/usb/
sudo usermod -a -G plugdev $USER
<h2 id="na-windows-proverte-dispetcher-ustroystv">На Windows проверьте Диспетчер устройств</h2>
<h2 id="dolzhen-byt-ustanovlen-android-composite-adb-interface">Должен быть установлен "Android Composite ADB Interface"</h2>Проблема: "insufficient permissions"
bash
<h2 id="na-linux-dobavte-udev-pravila">На Linux добавьте udev правила</h2>
sudo nano /etc/udev/rules.d/51-android.rules
<h2 id="dobavte-stroki-dlya-vashego-ustroystva">Добавьте строки для вашего устройства:</h2>
SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev" # Samsung
SUBSYSTEM=="usb", ATTR{idVendor}=="0e79", MODE="0666", GROUP="plugdev" # HTC
SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev" # Motorola
SUBSYSTEM=="usb", ATTR{idVendor}=="1004", MODE="0666", GROUP="plugdev" # LG
<h2 id="perezagruzka-pravil">Перезагрузка правил</h2>
sudo udevadm control --reload-rules
sudo udevadm trigger
Проблема: "device offline"
bash
<h2 id="perepodklyuchite-usb-kabel">Переподключите USB кабель</h2>
<h2 id="perezagruzite-ustroystvo">Перезагрузите устройство</h2>
<h2 id="proverte-uroven-zaryada-batarei-20">Проверьте уровень заряда батареи (>20%)</h2>
<h2 id="otklyuchite-i-vklyuchite-otladku-po-usb">Отключите и включите отладку по USB</h2>
<h2 id="poprobuyte-drugoy-usb-port">Попробуйте другой USB порт</h2>Беспроводное подключение (Wi-Fi ADB)
Wi-Fi подключение позволяет работать с устройством без USB кабеля, что полезно для удаленной работы.
Настройка беспроводного ADB:
bash
<h2 id="1-podklyuchite-ustroystvo-po-usb">1. Подключите устройство по USB</h2>
adb devices
<h2 id="2-vklyuchite-tcp-ip-rezhim-na-portu-5555">2. Включите TCP/IP режим на порту 5555</h2>
adb tcpip 5555
<h2 id="3-poluchite-ip-adres-ustroystva">3. Получите IP адрес устройства</h2>
adb shell ip addr show wlan0 | grep "inet "
<h2 id="4-otklyuchite-usb-kabel">4. Отключите USB кабель</h2>
<h2 id="5-podklyuchites-po-wi-fi">5. Подключитесь по Wi-Fi</h2>
adb connect 192.168.1.100:5555
<h2 id="6-proverte-podklyuchenie">6. Проверьте подключение</h2>
adb devices
<h2 id="192-168-1-100-5555-device">192.168.1.100:5555 device</h2>Автоматизация беспроводного подключения:
bash
#!/bin/bash
<h2 id="skript-dlya-avtomaticheskogo-besprovodnogo-podklyucheniya">Скрипт для автоматического беспроводного подключения</h2>
DEVICE_IP=$1
PORT=${2:-5555}
if [ -z "$DEVICE_IP" ]; then
echo "Использование: $0 <IP_адрес> [порт]"
exit 1
fi
echo "Подключение к $DEVICE_IP:$PORT..."
<h2 id="proverka-dostupnosti">Проверка доступности</h2>
ping -c 1 -W 1 $DEVICE_IP > /dev/null 2>&1
if [ $? -ne 0 ]; then
echo "Устройство недоступно по сети"
exit 1
fi
<h2 id="popytka-podklyucheniya">Попытка подключения</h2>
adb connect $DEVICE_IP:$PORT
<h2 id="proverka-uspeshnosti">Проверка успешности</h2>
sleep 2
adb devices | grep "$DEVICE_IP:$PORT" > /dev/null
if [ $? -eq 0 ]; then
echo "Подключение успешно!"
adb shell getprop ro.product.model
else
echo "Ошибка подключения"
exit 1
fi
Проблемы с беспроводным подключением:
bash
<h2 id="ustroystvo-i-kompyuter-dolzhny-byt-v-odnoy-seti">Устройство и компьютер должны быть в одной сети</h2>
<h2 id="proverte-firewall-nastroyki">Проверьте firewall настройки</h2>
<h2 id="ubedites-chto-port-5555-otkryt">Убедитесь, что порт 5555 открыт</h2>
<h2 id="otklyuchenie-firewall-dlya-testirovaniya">Отключение firewall для тестирования</h2>
sudo ufw allow 5555
<h2 id="ili-nastroyka-iptables">Или настройка iptables</h2>
sudo iptables -A INPUT -p tcp --dport 5555 -j ACCEPT
Подключение через эмулятор Android
ADB можно использовать для работы с Android эмуляторами (Android Studio, Genymotion).
Работа с Android Emulator:
bash
<h2 id="spisok-zapuschennyh-emulyatorov">Список запущенных эмуляторов</h2>
adb devices
<h2 id="vyvod">Вывод:</h2>
<h2 id="list-of-devices-attached">List of devices attached</h2>
<h2 id="emulator-5554-device">emulator-5554 device</h2>
<h2 id="ustanovka-apk-na-emulyator">Установка APK на эмулятор</h2>
adb -s emulator-5554 install app.apk
<h2 id="rabota-s-konkretnym-emulyatorom">Работа с конкретным эмулятором</h2>
adb -s emulator-5554 shell
Работа с Genymotion:
bash
<h2 id="genymotion-ispolzuet-porty-5555">Genymotion использует порты 5555+</h2>
adb devices
<h2 id="192-168-56-101-5555-device">192.168.56.101:5555 device</h2>
<h2 id="podklyuchenie-k-genymotion-ustroystvu">Подключение к Genymotion устройству</h2>
adb connect 192.168.56.101:5555
Подключение к устройствам с кастомными ROM
Устройства с кастомными ROM (LineageOS, Paranoid Android) могут иметь специфические особенности.
Особенности кастомных ROM:
bash
<h2 id="proverka-versii-android">Проверка версии Android</h2>
adb shell getprop ro.build.version.release
<h2 id="proverka-tipa-sborki">Проверка типа сборки</h2>
adb shell getprop ro.build.type
<h2 id="dlya-lineageos-spetsificheskie-komandy">Для LineageOS специфические команды</h2>
adb shell getprop ro.lineage.version
<h2 id="proverka-root-dostupa">Проверка root доступа</h2>
adb shell su -c 'id'
Подключение к устройствам с поврежденным экраном
Для устройств с неработающим экраном можно использовать специальные методы.
ADB через recovery режим:
bash
<h2 id="perezagruzka-v-recovery">Перезагрузка в recovery</h2>
adb reboot recovery
<h2 id="v-recovery-rezhime-nekotorye-komandy-adb-rabotayut">В recovery режиме некоторые команды ADB работают</h2>
adb devices
<h2 id="sideload-dlya-ustanovki-zip">sideload для установки ZIP</h2>
adb sideload update.zip
Использование OTG адаптеров:
Для устройств с полностью неработающим экраном можно использовать:
- OTG кабель + USB клавиатура
- Специализированные инструменты (например, Broken Android Data Extraction)
Множественные устройства
Работа с несколькими подключенными устройствами одновременно.
Указание конкретного устройства:
bash
<h2 id="poluchenie-spiska-ustroystv">Получение списка устройств</h2>
adb devices
<h2 id="rabota-s-konkretnym-ustroystvom-po-seriynomu-nomeru">Работа с конкретным устройством по серийному номеру</h2>
adb -s R58N123ABCD shell getprop ro.product.model
<h2 id="rabota-s-konkretnym-ustroystvom-po-ip">Работа с конкретным устройством по IP</h2>
adb -s 192.168.1.100:5555 push file.txt /sdcard/
Скрипт для работы с множественными устройствами:
bash
#!/bin/bash
<h2 id="skript-dlya-vypolneniya-komandy-na-vseh-podklyuchennyh-ustroystvah">Скрипт для выполнения команды на всех подключенных устройствах</h2>
COMMAND=$1
if [ -z "$COMMAND" ]; then
echo "Использование: $0 'команда'"
exit 1
fi
<h2 id="poluchenie-spiska-ustroystv">Получение списка устройств</h2>
adb devices | grep -v "List" | grep "device" | while read line; do
device=$(echo $line | awk '{print $1}')
echo "Выполнение на устройстве $device: $COMMAND"
adb -s $device shell $COMMAND
done
Безопасность подключения
Рекомендации по безопасности:
- Используйте ADB только в доверенных сетях
- Отключайте отладку по USB после завершения работы
- Регулярно обновляйте ADB для устранения уязвимостей
- Используйте VPN при беспроводном подключении
- Не оставляйте устройства подключенными без присмотра
Проверка целостности соединения:
bash
<h2 id="monitoring-sostoyaniya-soedineniya">Мониторинг состояния соединения</h2>
adb shell date
adb shell uptime
<h2 id="proverka-na-podmenu-ustroystva">Проверка на подмену устройства</h2>
adb shell getprop ro.serialno
adb shell getprop ro.build.fingerprint
Устранение неисправностей
Распространенные проблемы и решения:
| Проблема | Возможные причины | Решения |
|---|---|---|
| Device not found | USB драйверы, кабель | Проверить кабель, установить драйверы |
| Unauthorized | Не подтвержден запрос | Подтвердить на устройстве |
| Offline | Низкий заряд, настройки | Перезагрузить, зарядить батарею |
| No permissions | Права доступа | Настроить udev правила (Linux) |
| Connection refused | Firewall, порт занят | Проверить firewall, сменить порт |
Диагностический скрипт:
bash
#!/bin/bash
<h2 id="diagnostika-problem-s-adb-podklyucheniem">Диагностика проблем с ADB подключением</h2>
echo "=== ADB Диагностика ==="
echo "Дата: $(date)"
echo ""
echo "1. Версия ADB:"
adb version
echo ""
echo "2. Статус сервера:"
adb devices
echo ""
echo "3. USB устройства:"
lsusb | grep -i -E "(android|google|samsung|lg|htc|motorola)" || echo "Android устройств не найдено"
echo ""
echo "4. Процессы ADB:"
ps aux | grep adb | grep -v grep || echo "ADB сервер не запущен"
echo ""
echo "5. Права доступа (Linux):"
if [ -e /dev/bus/usb ]; then
ls -la /dev/bus/usb/ | head -5
fi
echo ""
echo "Рекомендации:"
echo "- Переподключите USB кабель"
echo "- Перезагрузите устройство"
echo "- Проверьте заряд батареи"
echo "- Подтвердите запрос на отладку на устройстве"
Правильное подключение устройств - залог успешной работы с ADB. В следующем разделе мы рассмотрим извлечение основных типов данных с подключенных устройств.
Извлечение основных данных
Извлечение основных данных - основная задача мобильной форензики. ADB позволяет получить доступ к контактам, SMS сообщениям, истории звонков, медиафайлам и другим важным данным. В этом разделе мы рассмотрим методы извлечения различных типов данных с практическими примерами.
Извлечение контактов
Контакты хранятся в базе данных SQLite и могут быть извлечены через content provider.
Извлечение всех контактов:
bash
<h2 id="sozdanie-skripta-dlya-izvlecheniya-kontaktov">Создание скрипта для извлечения контактов</h2>
adb shell content query --uri content://contacts/phones --projection display_name:number:contact_id | while read line; do
echo "$line" >> contacts.txt
done
<h2 id="bolee-chitaemyy-format">Более читаемый формат</h2>
adb shell content query --uri content://contacts/phones --projection display_name:number | sed 's/.*display_name=\([^,]*\), number=\([^)]*\).*/\1: \2/' > contacts_formatted.txt
Извлечение детальной информации о контактах:
bash
<h2 id="izvlechenie-bazy-dannyh-kontaktov">Извлечение базы данных контактов</h2>
adb shell pm path com.android.contacts
<h2 id="package-system-priv-app-contacts-contacts-apk">package:/system/priv-app/Contacts/Contacts.apk</h2>
<h2 id="poisk-fayla-bazy-dannyh">Поиск файла базы данных</h2>
adb shell find /data/data/com.android.providers.contacts -name "*.db" 2>/dev/null
<h2 id="izvlechenie-bazy-dannyh-trebuetsya-root-ili-backup">Извлечение базы данных (требуется root или backup)</h2>
adb backup -f contacts.ab com.android.providers.contacts
<h2 id="raspakovka-backup-fayla-trebuet-dopolnitelnyh-instrumentov">Распаковка backup файла требует дополнительных инструментов</h2>Извлечение контактов через backup:
bash
<h2 id="sozdanie-backup-kontaktov">Создание backup контактов</h2>
adb backup -f contacts.ab com.android.contacts
<h2 id="konvertatsiya-v-tar-format-trebuetsya-android-backup-extractor">Конвертация в tar формат (требуется Android Backup Extractor)</h2>
<h2 id="java-jar-abe-jar-unpack-contacts-ab-contacts-tar">java -jar abe.jar unpack contacts.ab contacts.tar</h2>
<h2 id="tar-tf-contacts-tar">tar -tf contacts.tar</h2>Извлечение SMS и MMS сообщений
SMS и MMS хранятся в базе данных MMS/SMS приложения.
Извлечение SMS сообщений:
bash
<h2 id="pryamoy-zapros-cherez-content-provider">Прямой запрос через content provider</h2>
adb shell content query --uri content://sms --projection address:body:date:type | while read line; do
echo "$line" >> sms.txt
done
<h2 id="formatirovannyy-vyvod">Форматированный вывод</h2>
adb shell content query --uri content://sms/inbox --projection address:body:date | sed 's/.*address=\([^,]*\), body=\([^,]*\), date=\([0-9]*\).*/\1: \2 (\3)/' > sms_formatted.txt
Извлечение MMS сообщений:
bash
<h2 id="izvlechenie-mms">Извлечение MMS</h2>
adb shell content query --uri content://mms --projection subject:date | while read line; do
echo "$line" >> mms.txt
done
<h2 id="izvlechenie-mms-chastey-vlozheniya">Извлечение MMS частей (вложения)</h2>
adb shell content query --uri content://mms/part --projection mid:ct:_data | grep "_data=" | while read line; do
# Извлечение вложений требует дополнительных шагов
echo "$line" >> mms_parts.txt
done
Извлечение базы данных SMS:
bash
<h2 id="poisk-sms-bazy-dannyh">Поиск SMS базы данных</h2>
adb shell find /data/data/com.android.providers.telephony -name "*sms*.db" 2>/dev/null
<h2 id="izvlechenie-cherez-backup">Извлечение через backup</h2>
adb backup -f sms.ab com.android.providers.telephony
<h2 id="ili-cherez-pryamoy-dostup-trebuetsya-root">Или через прямой доступ (требуется root)</h2>
adb shell cp /data/data/com.android.providers.telephony/databases/mmssms.db /sdcard/
adb pull /sdcard/mmssms.db .
Извлечение истории звонков
История звонков доступна через CallLog content provider.
Извлечение истории звонков:
bash
<h2 id="izvlechenie-vseh-zvonkov">Извлечение всех звонков</h2>
adb shell content query --uri content://call_log/calls --projection number:date:duration:type | while read line; do
echo "$line" >> call_log.txt
done
<h2 id="formatirovannyy-vyvod-s-tipami-zvonkov">Форматированный вывод с типами звонков</h2>
adb shell content query --uri content://call_log/calls --projection number:date:duration:type:name | sed 's/.*number=\([^,]*\), date=\([^,]*\), duration=\([^,]*\), type=\([^,]*\), name=\([^)]*\).*/\5 (\1): \4 \3 сек (\2)/' > call_log_formatted.txt
Расшифровка типов звонков:
- `1` - входящий звонок
- `2` - исходящий звонок
- `3` - пропущенный звонок
- `4` - голосовая почта
- `5` - отклоненный звонок
- `6` - заблокированный звонок
Извлечение детальной информации:
bash
<h2 id="izvlechenie-s-geolokatsiey-esli-dostupno">Извлечение с геолокацией (если доступно)</h2>
adb shell content query --uri content://call_log/calls --projection geocoded_location | while read line; do
echo "$line" >> call_locations.txt
done
Извлечение медиафайлов
Медиафайлы включают фотографии, видео, аудио и документы.
Извлечение фотографий и видео:
bash
<h2 id="poisk-mediafaylov">Поиск медиафайлов</h2>
adb shell find /sdcard/DCIM -name "*.jpg" -o -name "*.png" -o -name "*.mp4" -o -name "*.avi" | while read file; do
filename=$(basename "$file")
echo "Извлечение: $filename"
adb pull "$file" ./media/
done
<h2 id="izvlechenie-iz-skrytyh-papok">Извлечение из скрытых папок</h2>
adb shell find /sdcard -name ".*" -type d | while read dir; do
adb shell find "$dir" -name "*.jpg" -o -name "*.mp4"
done
Извлечение WhatsApp медиа:
bash
<h2 id="whatsapp-mediafayly">WhatsApp медиафайлы</h2>
adb shell find /sdcard/WhatsApp -name "*.jpg" -o -name "*.mp4" -o -name "*.opus" | while read file; do
adb pull "$file" ./whatsapp_media/
done
<h2 id="whatsapp-bazy-dannyh">WhatsApp базы данных</h2>
adb shell find /sdcard/WhatsApp -name "*.db" -o -name "*.crypt*"
Извлечение загруженных файлов:
bash
<h2 id="download-papka">Download папка</h2>
adb shell ls -la /sdcard/Download/
<h2 id="rekursivnoe-izvlechenie">Рекурсивное извлечение</h2>
adb pull /sdcard/Download ./downloads/
Извлечение данных приложений
Извлечение данных популярных приложений:
bash
<h2 id="telegram">Telegram</h2>
adb shell find /data/data/org.telegram.messenger -name "*.db" 2>/dev/null
<h2 id="viber">Viber</h2>
adb shell find /data/data/com.viber.voip -name "*.db" 2>/dev/null
<h2 id="skype">Skype</h2>
adb shell find /data/data/com.skype.raider -name "*.db" 2>/dev/null
<h2 id="chrome-istoriya">Chrome история</h2>
adb shell find /data/data/com.android.chrome -name "History" 2>/dev/null
Извлечение через backup:
bash
<h2 id="backup-konkretnogo-prilozheniya">Backup конкретного приложения</h2>
adb backup -f telegram.ab org.telegram.messenger
<h2 id="backup-s-sistemnymi-dannymi">Backup с системными данными</h2>
adb backup -all -system -f full_backup.ab
<h2 id="konvertatsiya-backup-v-chitaemyy-format-trebuet-dopolnitelnyh-instrumentov">Конвертация backup в читаемый формат требует дополнительных инструментов</h2>Извлечение системных данных
Извлечение системных логов:
bash
<h2 id="tekuschie-logi">Текущие логи</h2>
adb logcat -d > system_logs.txt
<h2 id="logi-sobytiy">Логи событий</h2>
adb shell find /data/system -name "*.log" 2>/dev/null
<h2 id="bug-reports">Bug reports</h2>
adb bugreport > bugreport.zip
Извлечение настроек устройства:
bash
<h2 id="wi-fi-seti">Wi-Fi сети</h2>
adb shell cat /data/misc/wifi/wpa_supplicant.conf 2>/dev/null
<h2 id="bluetooth-ustroystva">Bluetooth устройства</h2>
adb shell cat /data/misc/bluetooth/* 2>/dev/null
<h2 id="ustanovlennye-prilozheniya">Установленные приложения</h2>
adb shell pm list packages -f > installed_apps.txt
Извлечение геолокационных данных
Извлечение GPS истории:
bash
<h2 id="google-maps-istoriya">Google Maps история</h2>
adb shell find /data/data/com.google.android.apps.maps -name "*.db" 2>/dev/null | while read db; do
adb pull "$db" ./maps_data/
done
<h2 id="gps-kesh">GPS кэш</h2>
adb shell find /data/data -name "*location*" -type f 2>/dev/null
Извлечение данных о сетях Wi-Fi:
bash
<h2 id="sohranennye-wi-fi-seti">Сохраненные Wi-Fi сети</h2>
adb shell cat /data/misc/wifi/WifiConfigStore.xml 2>/dev/null > wifi_networks.xml
Автоматизированное извлечение данных
Комплексный скрипт извлечения:
bash
#!/bin/bash
<h2 id="skript-dlya-kompleksnogo-izvlecheniya-dannyh-s-android-ustroystva">Скрипт для комплексного извлечения данных с Android устройства</h2>
OUTPUT_DIR="android_forensic_$(date +%Y%m%d_%H%M%S)"
mkdir -p $OUTPUT_DIR/{contacts,sms,calls,media,apps,system}
echo "=== Извлечение данных с Android устройства ==="
echo "Выходная директория: $OUTPUT_DIR"
<h2 id="kontakty">Контакты</h2>
echo "Извлечение контактов..."
adb shell content query --uri content://contacts/phones --projection display_name:number > $OUTPUT_DIR/contacts/contacts_raw.txt
<h2 id="sms">SMS</h2>
echo "Извлечение SMS..."
adb shell content query --uri content://sms --projection address:body:date:type > $OUTPUT_DIR/sms/sms_raw.txt
<h2 id="istoriya-zvonkov">История звонков</h2>
echo "Извлечение истории звонков..."
adb shell content query --uri content://call_log/calls --projection number:date:duration:type > $OUTPUT_DIR/calls/calls_raw.txt
<h2 id="mediafayly">Медиафайлы</h2>
echo "Извлечение медиафайлов..."
mkdir -p $OUTPUT_DIR/media
adb shell find /sdcard/DCIM -type f \( -name "*.jpg" -o -name "*.png" -o -name "*.mp4" \) | while read file; do
filename=$(basename "$file")
adb pull "$file" "$OUTPUT_DIR/media/" 2>/dev/null
done
<h2 id="prilozheniya">Приложения</h2>
echo "Извлечение списка приложений..."
adb shell pm list packages -f > $OUTPUT_DIR/apps/installed_apps.txt
<h2 id="sistemnaya-informatsiya">Системная информация</h2>
echo "Извлечение системной информации..."
adb shell getprop > $OUTPUT_DIR/system/device_properties.txt
adb shell df -h > $OUTPUT_DIR/system/disk_usage.txt
adb shell dumpsys battery > $OUTPUT_DIR/system/battery_info.txt
<h2 id="logi">Логи</h2>
echo "Извлечение логов..."
adb logcat -d > $OUTPUT_DIR/system/logs.txt
echo "Извлечение завершено!"
echo "Результаты сохранены в $OUTPUT_DIR"
Скрипт для обработки извлеченных данных:
bash
#!/bin/bash
<h2 id="skript-dlya-obrabotki-i-analiza-izvlechennyh-dannyh">Скрипт для обработки и анализа извлеченных данных</h2>
INPUT_DIR=$1
if [ -z "$INPUT_DIR" ]; then
echo "Использование: $0 <директория_с_данными>"
exit 1
fi
echo "=== Анализ извлеченных данных ==="
<h2 id="analiz-kontaktov">Анализ контактов</h2>
if [ -f "$INPUT_DIR/contacts/contacts_raw.txt" ]; then
echo "Контактов найдено: $(wc -l < $INPUT_DIR/contacts/contacts_raw.txt)"
fi
<h2 id="analiz-sms">Анализ SMS</h2>
if [ -f "$INPUT_DIR/sms/sms_raw.txt" ]; then
echo "SMS сообщений: $(wc -l < $INPUT_DIR/sms/sms_raw.txt)"
echo "Входящих SMS: $(grep "type=1" $INPUT_DIR/sms/sms_raw.txt | wc -l)"
echo "Исходящих SMS: $(grep "type=2" $INPUT_DIR/sms/sms_raw.txt | wc -l)"
fi
<h2 id="analiz-zvonkov">Анализ звонков</h2>
if [ -f "$INPUT_DIR/calls/calls_raw.txt" ]; then
echo "Записей звонков: $(wc -l < $INPUT_DIR/calls/calls_raw.txt)"
echo "Входящих звонков: $(grep "type=1" $INPUT_DIR/calls/calls_raw.txt | wc -l)"
echo "Исходящих звонков: $(grep "type=2" $INPUT_DIR/calls/calls_raw.txt | wc -l)"
fi
<h2 id="analiz-media">Анализ медиа</h2>
if [ -d "$INPUT_DIR/media" ]; then
echo "Медиафайлов извлечено: $(find $INPUT_DIR/media -type f | wc -l)"
echo "Изображений: $(find $INPUT_DIR/media -name "*.jpg" -o -name "*.png" | wc -l)"
echo "Видео: $(find $INPUT_DIR/media -name "*.mp4" -o -name "*.avi" | wc -l)"
fi
echo "Анализ завершен!"
Форензика извлеченных данных
Проверка целостности данных:
bash
<h2 id="sozdanie-hesh-summ-izvlechennyh-faylov">Создание хэш-сумм извлеченных файлов</h2>
find extracted_data/ -type f -exec sha256sum {} \; > extracted_hashes.txt
<h2 id="sravnenie-s-etalonnymi-heshami">Сравнение с эталонными хэшами</h2>
sha256sum -c extracted_hashes.txt
Анализ временных меток:
bash
<h2 id="konvertatsiya-unix-timestamp-v-chitaemyy-format">Конвертация Unix timestamp в читаемый формат</h2>
awk -F',' '{print strftime("%Y-%m-%d %H:%M:%S", $3/1000), $0}' calls_raw.txt > calls_readable.txt
Поиск ключевых слов:
bash
<h2 id="poisk-v-sms">Поиск в SMS</h2>
grep -i -E "(password|login|account|secret)" sms_raw.txt > sensitive_sms.txt
<h2 id="poisk-v-kontaktah">Поиск в контактах</h2>
grep -i -E "(police|lawyer|bank)" contacts_raw.txt > important_contacts.txt
Эти методы позволяют извлечь основные типы данных с Android устройств. В следующих разделах мы рассмотрим работу с файловой системой и более продвинутые техники извлечения.
Работа с файловой системой
Понимание структуры файловой системы Android критически важно для эффективного извлечения данных. Android использует сложную иерархию разделов и директорий, где разные типы данных хранятся в различных местах. В этом разделе мы рассмотрим структуру Android файловой системы и методы доступа к различным областям.
Структура разделов Android
Современные Android устройства используют несколько разделов для хранения данных.
Основные разделы:
- `/boot` - ядро Linux и ramdisk
- `/system` - системные файлы Android (read-only)
- `/vendor` - файлы производителя устройства
- `/data` - пользовательские данные и приложения
- `/cache` - временные файлы
- `/recovery` - recovery режим
- `/misc` - miscellaneous системные данные
Внешнее хранилище:
- `/sdcard` или `/storage/emulated/0` - эмулированное внешнее хранилище
- `/storage/XXXX-XXXX` - реальные SD карты
Извлечение информации о разделах:
bash
<h2 id="prosmotr-vseh-smontirovannyh-razdelov">Просмотр всех смонтированных разделов</h2>
adb shell mount
<h2 id="detalnaya-informatsiya-o-razdelah">Детальная информация о разделах</h2>
adb shell df -h
<h2 id="informatsiya-o-blochnyh-ustroystvah">Информация о блочных устройствах</h2>
adb shell ls -la /dev/block/
<h2 id="prosmotr-fstab-fayla">Просмотр fstab файла</h2>
adb shell cat /system/etc/fstab
Доступ к системным директориям
Директория /system:
bash
<h2 id="prosmotr-sistemnyh-prilozheniy">Просмотр системных приложений</h2>
adb shell ls /system/app/
adb shell ls /system/priv-app/
<h2 id="sistemnye-nastroyki">Системные настройки</h2>
adb shell cat /system/build.prop
<h2 id="prosmotr-sistemnyh-binarnyh-faylov">Просмотр системных бинарных файлов</h2>
adb shell ls /system/bin/
Директория /data:
bash
<h2 id="polzovatelskie-prilozheniya">Пользовательские приложения</h2>
adb shell ls /data/app/
<h2 id="dannye-prilozheniy">Данные приложений</h2>
adb shell ls /data/data/
<h2 id="sistemnye-dannye">Системные данные</h2>
adb shell ls /data/system/
<h2 id="kesh-prilozheniy">Кэш приложений</h2>
adb shell ls /data/data/*/cache/
Работа с внешним хранилищем
Доступ к SD карте:
bash
<h2 id="proverka-sostoyaniya-vneshnego-hranilischa">Проверка состояния внешнего хранилища</h2>
adb shell sm list-volumes
<h2 id="montirovanie-vneshnego-hranilischa">Монтирование внешнего хранилища</h2>
adb shell sm set-force-adoptable true # Для Android 6.0+
<h2 id="prosmotr-soderzhimogo">Просмотр содержимого</h2>
adb shell ls /storage/emulated/0/
adb shell ls /sdcard/
<h2 id="izvlechenie-vseh-faylov">Извлечение всех файлов</h2>
adb pull /sdcard/ ./sdcard_backup/
Работа с несколькими хранилищами:
bash
<h2 id="spisok-vseh-hranilisch">Список всех хранилищ</h2>
adb shell sm list-volumes all
<h2 id="informatsiya-o-konkretnom-tome">Информация о конкретном томе</h2>
adb shell sm get-volume-state 1234-5678
Извлечение скрытых и системных файлов
Доступ к скрытым файлам:
bash
<h2 id="poisk-skrytyh-faylov-i-papok">Поиск скрытых файлов и папок</h2>
adb shell find /sdcard -name ".*" -type f
<h2 id="skrytye-sistemnye-fayly">Скрытые системные файлы</h2>
adb shell find /data -name ".*" 2>/dev/null
<h2 id="fayly-s-rasshirennymi-atributami">Файлы с расширенными атрибутами</h2>
adb shell ls -la /data/data/*/ | grep "^-"
Извлечение системных логов:
bash
<h2 id="osnovnye-logi">Основные логи</h2>
adb shell ls /data/system/dropbox/
adb shell ls /data/tombstones/
<h2 id="recovery-logi">Recovery логи</h2>
adb shell cat /cache/recovery/last_log
<h2 id="kernel-logi">Kernel логи</h2>
adb shell dmesg > kernel_log.txt
Работа с базами данных
SQLite базы данных приложений:
bash
<h2 id="poisk-sqlite-baz-dannyh">Поиск SQLite баз данных</h2>
adb shell find /data/data -name "*.db" 2>/dev/null
<h2 id="izvlechenie-bazy-kontaktov">Извлечение базы контактов</h2>
adb shell cp /data/data/com.android.providers.contacts/databases/contacts2.db /sdcard/
adb pull /sdcard/contacts2.db .
<h2 id="rabota-s-sqlite-trebuetsya-sqlite3">Работа с SQLite (требуется sqlite3)</h2>
adb shell sqlite3 /data/data/com.android.providers.contacts/databases/contacts2.db ".tables"
adb shell sqlite3 /data/data/com.android.providers.contacts/databases/contacts2.db "SELECT * FROM contacts;"
Анализ структуры базы данных:
bash
<h2 id="prosmotr-shemy-tablitsy">Просмотр схемы таблицы</h2>
adb shell sqlite3 /data/data/com.whatsapp/databases/msgstore.db ".schema messages"
<h2 id="podschet-zapisey">Подсчет записей</h2>
adb shell sqlite3 /data/data/com.whatsapp/databases/msgstore.db "SELECT COUNT(*) FROM messages;"
<h2 id="izvlechenie-poslednih-soobscheniy">Извлечение последних сообщений</h2>
adb shell sqlite3 /data/data/com.whatsapp/databases/msgstore.db "SELECT * FROM messages ORDER BY _id DESC LIMIT 10;"
Работа с разделами и образами
Создание образа раздела:
bash
<h2 id="sozdanie-obraza-data-razdela-trebuetsya-root">Создание образа data раздела (требуется root)</h2>
adb shell su -c "dd if=/dev/block/by-name/userdata of=/sdcard/data.img bs=4M"
<h2 id="skachivanie-obraza">Скачивание образа</h2>
adb pull /sdcard/data.img .
<h2 id="analiz-obraza-s-pomoschyu-vneshnih-instrumentov">Анализ образа с помощью внешних инструментов</h2>
<h2 id="autopsy-ftkimager-etc">autopsy, ftkimager, etc.</h2>Монтирование образов:
bash
<h2 id="montirovanie-obraza-cherez-loop-device-linux">Монтирование образа через loop device (Linux)</h2>
sudo losetup /dev/loop0 data.img
sudo mount /dev/loop0 /mnt/android_data
<h2 id="prosmotr-soderzhimogo">Просмотр содержимого</h2>
ls -la /mnt/android_data/
Извлечение удаленных файлов
Восстановление из нераспределенного пространства:
bash
<h2 id="sozdanie-obraza-neraspredelennogo-prostranstva">Создание образа нераспределенного пространства</h2>
adb shell su -c "dd if=/dev/block/by-name/userdata of=/sdcard/unallocated.bin bs=4M skip=10000 count=1000"
<h2 id="skachivanie-dlya-analiza">Скачивание для анализа</h2>
adb pull /sdcard/unallocated.bin .
<h2 id="analiz-s-pomoschyu-instrumentov-vosstanovleniya">Анализ с помощью инструментов восстановления</h2>
<h2 id="foremost-scalpel-testdisk">foremost, scalpel, testdisk</h2>Поиск остатков удаленных файлов:
bash
<h2 id="poisk-strok-v-neraspredelennom-prostranstve">Поиск строк в нераспределенном пространстве</h2>
adb shell su -c "strings /dev/block/by-name/userdata | grep -i 'deleted_file'" | head -10
<h2 id="poisk-izvestnyh-signatur-faylov">Поиск известных сигнатур файлов</h2>
adb shell su -c "hexdump -C /dev/block/by-name/userdata | grep 'ffd8ffe0'" | head -5 # JPEG signature
Работа с шифрованными разделами
Android шифрование (File-Based Encryption):
bash
<h2 id="proverka-statusa-shifrovaniya">Проверка статуса шифрования</h2>
adb shell getprop ro.crypto.state
<h2 id="dlya-fbe-file-based-encryption">Для FBE (File-Based Encryption)</h2>
adb shell getprop ro.crypto.type
<h2 id="izvlechenie-klyuchey-trebuetsya-spetsialnyy-dostup">Извлечение ключей (требуется специальный доступ)</h2>
<h2 id="obychno-nevozmozhno-bez-root-i-pravilnyh-klyuchey">Обычно невозможно без root и правильных ключей</h2>Полнодисковое шифрование (FDE):
bash
<h2 id="proverka-fde-statusa">Проверка FDE статуса</h2>
adb shell getprop ro.crypto.fde_algorithm
<h2 id="dlya-fde-dannye-zashifrovany-na-urovne-blochnogo-ustroystva">Для FDE данные зашифрованы на уровне блочного устройства</h2>
<h2 id="trebuetsya-parol-klyuch-dlya-dostupa">Требуется пароль/ключ для доступа</h2>Анализ структуры APK файлов
Извлечение и анализ приложений:
bash
<h2 id="spisok-ustanovlennyh-apk">Список установленных APK</h2>
adb shell pm list packages -f
<h2 id="izvlechenie-apk-fayla">Извлечение APK файла</h2>
adb shell pm path com.whatsapp
<h2 id="package-data-app-com-whatsapp-1-base-apk">package:/data/app/com.whatsapp-1/base.apk</h2>
adb pull /data/app/com.whatsapp-1/base.apk .
<h2 id="analiz-apk-s-pomoschyu-apktool-jadx">Анализ APK (с помощью apktool, jadx)</h2>
<h2 id="apktool-d-base-apk-o-whatsapp-decoded">apktool d base.apk -o whatsapp_decoded</h2>Извлечение данных приложения:
bash
<h2 id="dannye-prilozheniya">Данные приложения</h2>
adb shell ls -la /data/data/com.whatsapp/
<h2 id="kesh-prilozheniya">Кэш приложения</h2>
adb shell ls -la /data/data/com.whatsapp/cache/
<h2 id="shared-preferences">Shared preferences</h2>
adb shell ls -la /data/data/com.whatsapp/shared_prefs/
Скрипты для комплексного анализа ФС
Скрипт картирования файловой системы:
bash
#!/bin/bash
<h2 id="skript-dlya-kartirovaniya-struktury-android-fs">Скрипт для картирования структуры Android ФС</h2>
OUTPUT_FILE="filesystem_map_$(date +%Y%m%d_%H%M%S).txt"
echo "=== КАРТИРОВАНИЕ ФАЙЛОВОЙ СИСТЕМЫ ANDROID ===" > $OUTPUT_FILE
echo "Дата: $(date)" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
<h2 id="sistemnye-razdely">Системные разделы</h2>
echo "=== СИСТЕМНЫЕ РАЗДЕЛЫ ===" >> $OUTPUT_FILE
adb shell mount | grep -E "(system|data|cache)" >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
<h2 id="struktura-system">Структура /system</h2>
echo "=== /SYSTEM ДИРЕКТОРИЯ ===" >> $OUTPUT_FILE
adb shell find /system -maxdepth 2 -type d 2>/dev/null | head -20 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
<h2 id="struktura-data">Структура /data</h2>
echo "=== /DATA ДИРЕКТОРИЯ ===" >> $OUTPUT_FILE
adb shell find /data -maxdepth 2 -type d 2>/dev/null | grep -v "/data/data" | head -20 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
<h2 id="polzovatelskie-prilozheniya">Пользовательские приложения</h2>
echo "=== ПОЛЬЗОВАТЕЛЬСКИЕ ПРИЛОЖЕНИЯ ===" >> $OUTPUT_FILE
adb shell pm list packages -3 | wc -l >> $OUTPUT_FILE
adb shell pm list packages -3 | head -10 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
<h2 id="sistemnye-prilozheniya">Системные приложения</h2>
echo "=== СИСТЕМНЫЕ ПРИЛОЖЕНИЯ ===" >> $OUTPUT_FILE
adb shell pm list packages -s | wc -l >> $OUTPUT_FILE
adb shell pm list packages -s | head -10 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
<h2 id="vneshnee-hranilische">Внешнее хранилище</h2>
echo "=== ВНЕШНЕЕ ХРАНИЛИЩЕ ===" >> $OUTPUT_FILE
adb shell df -h | grep -E "(sdcard|storage)" >> $OUTPUT_FILE
adb shell ls -la /sdcard/ | head -10 >> $OUTPUT_FILE
echo "" >> $OUTPUT_FILE
echo "Картирование завершено: $OUTPUT_FILE"
Скрипт поиска интересных файлов:
bash
#!/bin/bash
<h2 id="skript-poiska-interesnyh-faylov-v-android-fs">Скрипт поиска интересных файлов в Android ФС</h2>
OUTPUT_DIR="interesting_files_$(date +%Y%m%d_%H%M%S)"
mkdir -p $OUTPUT_DIR
echo "Поиск интересных файлов..."
<h2 id="bazy-dannyh">Базы данных</h2>
echo "Базы данных:" > $OUTPUT_DIR/databases.txt
adb shell find /data/data -name "*.db" 2>/dev/null | head -20 >> $OUTPUT_DIR/databases.txt
<h2 id="sqlite-fayly">SQLite файлы</h2>
echo "SQLite файлы:" > $OUTPUT_DIR/sqlite_files.txt
adb shell find /data/data -name "*.sqlite" 2>/dev/null >> $OUTPUT_DIR/sqlite_files.txt
<h2 id="kripto-fayly">Крипто файлы</h2>
echo "Крипто файлы:" > $OUTPUT_DIR/crypto_files.txt
adb shell find /data -name "*.key" -o -name "*.pem" -o -name "*.crt" 2>/dev/null >> $OUTPUT_DIR/crypto_files.txt
<h2 id="logi">Логи</h2>
echo "Файлы логов:" > $OUTPUT_DIR/log_files.txt
adb shell find /data -name "*.log" -o -name "*.txt" | grep -v "/data/data" >> $OUTPUT_DIR/log_files.txt
<h2 id="media-fayly">Медиа файлы</h2>
echo "Медиа файлы:" > $OUTPUT_DIR/media_files.txt
adb shell find /sdcard -name "*.jpg" -o -name "*.png" -o -name "*.mp4" | wc -l >> $OUTPUT_DIR/media_files.txt
adb shell find /sdcard -name "*.jpg" -o -name "*.png" -o -name "*.mp4" | head -10 >> $OUTPUT_DIR/media_files.txt
<h2 id="skrytye-fayly">Скрытые файлы</h2>
echo "Скрытые файлы:" > $OUTPUT_DIR/hidden_files.txt
adb shell find /sdcard -name ".*" -type f | head -20 >> $OUTPUT_DIR/hidden_files.txt
echo "Поиск завершен. Результаты в $OUTPUT_DIR"
Понимание структуры файловой системы Android позволяет эффективно извлекать данные из различных источников. В следующем разделе мы рассмотрим извлечение данных приложений и их анализ.
Извлечение приложений и данных
Приложения - один из основных источников данных в мобильной форензике. Социальные сети, мессенджеры, браузеры и другие приложения хранят огромное количество информации. В этом разделе мы рассмотрим методы извлечения данных из популярных приложений Android.
Извлечение данных WhatsApp
WhatsApp - одно из наиболее распространенных приложений для извлечения данных.
Извлечение сообщений WhatsApp:
bash
<h2 id="poisk-whatsapp-dannyh">Поиск WhatsApp данных</h2>
adb shell pm path com.whatsapp
<h2 id="izvlechenie-bazy-dannyh-soobscheniy">Извлечение базы данных сообщений</h2>
adb shell cp /data/data/com.whatsapp/databases/msgstore.db /sdcard/
adb pull /sdcard/msgstore.db .
<h2 id="izvlechenie-kontaktov-whatsapp">Извлечение контактов WhatsApp</h2>
adb shell cp /data/data/com.whatsapp/databases/wa.db /sdcard/
adb pull /sdcard/wa.db .
<h2 id="izvlechenie-mediafaylov">Извлечение медиафайлов</h2>
adb pull /sdcard/WhatsApp/Media ./whatsapp_media/
Анализ WhatsApp базы данных:
bash
<h2 id="prosmotr-tablits">Просмотр таблиц</h2>
sqlite3 msgstore.db ".tables"
<h2 id="izvlechenie-soobscheniy">Извлечение сообщений</h2>
sqlite3 msgstore.db "SELECT * FROM messages ORDER BY timestamp DESC LIMIT 10;"
<h2 id="poisk-po-klyuchevym-slovam">Поиск по ключевым словам</h2>
sqlite3 msgstore.db "SELECT * FROM messages WHERE data LIKE '%password%';"
Извлечение зашифрованных резервных копий:
bash
<h2 id="whatsapp-sozdaet-zashifrovannye-backup-fayly">WhatsApp создает зашифрованные backup файлы</h2>
adb shell find /sdcard/WhatsApp -name "*.crypt*"
<h2 id="dlya-rasshifrovki-trebuetsya-parol-ot-uchetnoy-zapisi">Для расшифровки требуется пароль от учетной записи</h2>
<h2 id="ispolzovanie-instrumentov-vrode-whatsapp-viewer-ili-whatcrypt">Использование инструментов вроде whatsapp-viewer или whatcrypt</h2>Извлечение данных Telegram
Telegram использует более сложную структуру хранения данных.
Извлечение Telegram данных:
bash
<h2 id="poisk-telegram-direktorii">Поиск Telegram директории</h2>
adb shell find /data/data -name "*telegram*" -type d
<h2 id="izvlechenie-bazy-dannyh">Извлечение базы данных</h2>
adb shell cp /data/data/org.telegram.messenger/databases/cache4.db /sdcard/
adb pull /sdcard/cache4.db .
<h2 id="izvlechenie-mediafaylov">Извлечение медиафайлов</h2>
adb pull /sdcard/Telegram ./telegram_data/
Работа с Telegram базами данных:
bash
<h2 id="prosmotr-struktury">Просмотр структуры</h2>
sqlite3 cache4.db ".schema"
<h2 id="izvlechenie-soobscheniy">Извлечение сообщений</h2>
sqlite3 cache4.db "SELECT * FROM messages WHERE date > strftime('%s', '2024-01-01');"
<h2 id="poisk-sekretnyh-chatov">Поиск секретных чатов</h2>
sqlite3 cache4.db "SELECT * FROM chats WHERE flags & 0x1000 != 0;"
Извлечение данных браузеров
Google Chrome:
bash
<h2 id="izvlechenie-istorii-brauzera">Извлечение истории браузера</h2>
adb shell cp /data/data/com.android.chrome/app_chrome/Default/History /sdcard/
adb pull /sdcard/History .
<h2 id="izvlechenie-kukisov">Извлечение кукисов</h2>
adb shell cp /data/data/com.android.chrome/app_chrome/Default/Cookies /sdcard/
adb pull /sdcard/Cookies .
<h2 id="izvlechenie-sohranennyh-paroley">Извлечение сохраненных паролей</h2>
adb shell cp /data/data/com.android.chrome/app_chrome/Default/Login\ Data /sdcard/
adb pull /sdcard/Login\ Data .
Анализ Chrome данных:
bash
<h2 id="prosmotr-istorii-posescheniy">Просмотр истории посещений</h2>
sqlite3 History "SELECT url, title, visit_count FROM urls ORDER BY last_visit_time DESC LIMIT 20;"
<h2 id="analiz-kukisov">Анализ кукисов</h2>
sqlite3 Cookies "SELECT host_key, name, value FROM cookies WHERE host_key LIKE '%google%';"
Mozilla Firefox:
bash
<h2 id="firefox-dannye">Firefox данные</h2>
adb shell find /data/data/org.mozilla.firefox -name "*.sqlite"
<h2 id="izvlechenie-profiley">Извлечение профилей</h2>
adb pull /data/data/org.mozilla.firefox/files/mozilla ./firefox_data/
Извлечение данных социальных сетей
Facebook/Messenger:
bash
<h2 id="poisk-facebook-dannyh">Поиск Facebook данных</h2>
adb shell find /data/data -name "*facebook*" -type d
<h2 id="izvlechenie-kesha">Извлечение кэша</h2>
adb pull /data/data/com.facebook.katana ./facebook_data/
<h2 id="messenger-dannye">Messenger данные</h2>
adb pull /data/data/com.facebook.orca ./messenger_data/
Instagram:
bash
<h2 id="instagram-direktoriya">Instagram директория</h2>
adb shell ls /data/data/com.instagram.android/
<h2 id="izvlechenie-bazy-dannyh">Извлечение базы данных</h2>
adb shell cp /data/data/com.instagram.android/databases/direct.db /sdcard/
adb pull /sdcard/direct.db .
<h2 id="mediafayly">Медиафайлы</h2>
adb pull /sdcard/Instagram ./instagram_data/
Twitter/X:
bash
<h2 id="twitter-dannye">Twitter данные</h2>
adb shell find /data/data -name "*twitter*" -type d
<h2 id="izvlechenie-kesha-i-dannyh">Извлечение кэша и данных</h2>
adb pull /data/data/com.twitter.android ./twitter_data/
Извлечение данных почтовых клиентов
Gmail:
bash
<h2 id="gmail-dannye">Gmail данные</h2>
adb shell find /data/data/com.google.android.gm -name "*.db"
<h2 id="izvlechenie-bazy-dannyh">Извлечение базы данных</h2>
adb shell cp /data/data/com.google.android.gm/databases/mailstore*.db /sdcard/
adb pull /sdcard/mailstore*.db .
Outlook:
bash
<h2 id="microsoft-outlook">Microsoft Outlook</h2>
adb shell find /data/data -name "*outlook*" -type d
<h2 id="izvlechenie-dannyh">Извлечение данных</h2>
adb pull /data/data/com.microsoft.office.outlook ./outlook_data/
Извлечение данных облачных хранилищ
Google Drive:
bash
<h2 id="google-drive-kesh">Google Drive кэш</h2>
adb shell find /data/data/com.google.android.apps.docs -name "*.db"
<h2 id="izvlechenie-sinhronizirovannyh-faylov">Извлечение синхронизированных файлов</h2>
adb pull /sdcard/Android/data/com.google.android.apps.docs ./drive_data/
Dropbox:
bash
<h2 id="dropbox-dannye">Dropbox данные</h2>
adb shell ls /data/data/com.dropbox.android/
<h2 id="izvlechenie-bazy-dannyh">Извлечение базы данных</h2>
adb shell cp /data/data/com.dropbox.android/databases/*.db /sdcard/
adb pull /sdcard/*.db ./dropbox_data/
OneDrive:
bash
<h2 id="microsoft-onedrive">Microsoft OneDrive</h2>
adb shell find /data/data -name "*onedrive*" -type d
<h2 id="izvlechenie-dannyh">Извлечение данных</h2>
adb pull /data/data/com.microsoft.skydrive ./onedrive_data/
Извлечение данных платежных приложений
Google Pay/Samsung Pay:
bash
<h2 id="poisk-platezhnyh-prilozheniy">Поиск платежных приложений</h2>
adb shell pm list packages | grep -i pay
<h2 id="izvlechenie-dannyh-ogranichennyy-dostup">Извлечение данных (ограниченный доступ)</h2>
adb shell find /data/data -name "*pay*" -type d
Банковские приложения:
bash
<h2 id="poisk-bankovskih-prilozheniy">Поиск банковских приложений</h2>
adb shell pm list packages | grep -E "(bank|finance|money)"
<h2 id="izvlechenie-dannyh-zavisit-ot-prilozheniya">Извлечение данных (зависит от приложения)</h2>
<h2 id="bolshinstvo-bankovskih-prilozheniy-ispolzuyut-shifrovanie">Большинство банковских приложений используют шифрование</h2>Извлечение данных VPN и прокси
VPN приложения:
bash
<h2 id="poisk-vpn-prilozheniy">Поиск VPN приложений</h2>
adb shell pm list packages | grep -i vpn
<h2 id="izvlechenie-konfiguratsiy-naprimer-openvpn">Извлечение конфигураций (например, OpenVPN)</h2>
adb shell find /data/data -name "*.ovpn" -o -name "*.conf"
Скрипт комплексного извлечения приложений
bash
#!/bin/bash
<h2 id="skript-dlya-izvlecheniya-dannyh-populyarnyh-prilozheniy">Скрипт для извлечения данных популярных приложений</h2>
OUTPUT_DIR="app_data_$(date +%Y%m%d_%H%M%S)"
mkdir -p $OUTPUT_DIR/{whatsapp,telegram,browsers,social,cloud}
echo "=== ИЗВЛЕЧЕНИЕ ДАННЫХ ПРИЛОЖЕНИЙ ==="
<h2 id="whatsapp">WhatsApp</h2>
echo "Извлечение WhatsApp..."
if adb shell pm list packages | grep -q whatsapp; then
adb shell cp /data/data/com.whatsapp/databases/msgstore.db /sdcard/ 2>/dev/null
adb pull /sdcard/msgstore.db $OUTPUT_DIR/whatsapp/ 2>/dev/null
adb pull /sdcard/WhatsApp/Media $OUTPUT_DIR/whatsapp/ 2>/dev/null
fi
<h2 id="telegram">Telegram</h2>
echo "Извлечение Telegram..."
if adb shell pm list packages | grep -q telegram; then
adb shell cp /data/data/org.telegram.messenger/databases/cache4.db /sdcard/ 2>/dev/null
adb pull /sdcard/cache4.db $OUTPUT_DIR/telegram/ 2>/dev/null
adb pull /sdcard/Telegram $OUTPUT_DIR/telegram/ 2>/dev/null
fi
<h2 id="chrome">Chrome</h2>
echo "Извлечение Chrome..."
if adb shell pm list packages | grep -q chrome; then
mkdir -p $OUTPUT_DIR/browsers/chrome
adb shell cp /data/data/com.android.chrome/app_chrome/Default/History /sdcard/ 2>/dev/null
adb pull /sdcard/History $OUTPUT_DIR/browsers/chrome/ 2>/dev/null
fi
<h2 id="facebook">Facebook</h2>
echo "Извлечение Facebook..."
if adb shell pm list packages | grep -q facebook; then
adb pull /data/data/com.facebook.katana $OUTPUT_DIR/social/ 2>/dev/null
fi
<h2 id="google-drive">Google Drive</h2>
echo "Извлечение Google Drive..."
if adb shell pm list packages | grep -q "docs"; then
adb pull /sdcard/Android/data/com.google.android.apps.docs $OUTPUT_DIR/cloud/ 2>/dev/null
fi
echo "Извлечение завершено: $OUTPUT_DIR"
Анализ извлеченных данных приложений
Парсинг WhatsApp баз данных:
bash
#!/bin/bash
<h2 id="skript-analiza-whatsapp-bazy-dannyh">Скрипт анализа WhatsApp базы данных</h2>
DB_FILE=$1
if [ ! -f "$DB_FILE" ]; then
echo "Файл базы данных не найден: $DB_FILE"
exit 1
fi
echo "=== АНАЛИЗ WHATSAPP БАЗЫ ДАННЫХ ==="
<h2 id="kolichestvo-chatov">Количество чатов</h2>
CHAT_COUNT=$(sqlite3 "$DB_FILE" "SELECT COUNT(*) FROM chat_list;")
echo "Всего чатов: $CHAT_COUNT"
<h2 id="kolichestvo-soobscheniy">Количество сообщений</h2>
MSG_COUNT=$(sqlite3 "$DB_FILE" "SELECT COUNT(*) FROM messages;")
echo "Всего сообщений: $MSG_COUNT"
<h2 id="poslednie-soobscheniya">Последние сообщения</h2>
echo "Последние 5 сообщений:"
sqlite3 "$DB_FILE" "SELECT datetime(timestamp/1000, 'unixepoch'), data FROM messages ORDER BY timestamp DESC LIMIT 5;"
<h2 id="poisk-mediafaylov">Поиск медиафайлов</h2>
echo "Сообщения с медиафайлами:"
sqlite3 "$DB_FILE" "SELECT COUNT(*) FROM messages WHERE media_name IS NOT NULL;"
<h2 id="poisk-udalennyh-soobscheniy">Поиск удаленных сообщений</h2>
echo "Удаленные сообщения:"
sqlite3 "$DB_FILE" "SELECT COUNT(*) FROM messages WHERE quoted_row_id IS NOT NULL;"
Парсинг браузерной истории:
bash
#!/bin/bash
<h2 id="analiz-istorii-brauzera-chrome">Анализ истории браузера Chrome</h2>
HISTORY_FILE=$1
if [ ! -f "$HISTORY_FILE" ]; then
echo "Файл истории не найден: $HISTORY_FILE"
exit 1
fi
echo "=== АНАЛИЗ ИСТОРИИ CHROME ==="
<h2 id="obschaya-statistika">Общая статистика</h2>
VISIT_COUNT=$(sqlite3 "$HISTORY_FILE" "SELECT COUNT(*) FROM urls;")
echo "Всего посещений: $VISIT_COUNT"
<h2 id="top-saytov">Топ сайтов</h2>
echo "Топ 10 сайтов:"
sqlite3 "$HISTORY_FILE" "SELECT url, COUNT(*) as count FROM visits GROUP BY url ORDER BY count DESC LIMIT 10;"
<h2 id="poslednie-posescheniya">Последние посещения</h2>
echo "Последние 10 посещений:"
sqlite3 "$HISTORY_FILE" "SELECT datetime(last_visit_time/1000000-11644473600, 'unixepoch'), url FROM urls ORDER BY last_visit_time DESC LIMIT 10;"
<h2 id="poisk-po-klyuchevym-slovam">Поиск по ключевым словам</h2>
echo "Посещения с 'password' в URL:"
sqlite3 "$HISTORY_FILE" "SELECT url FROM urls WHERE url LIKE '%password%';"
Судебная ценность данных приложений
Классификация по важности:
- Критически важные: WhatsApp, Telegram, Signal (сообщения)
- Высокой важности: Chrome/Firefox (история, кукисы, пароли)
- Средней важности: Социальные сети (посты, сообщения)
- Низкой важности: Игры, утилиты (кэш, настройки)
Цепочка хранения:
bash
<h2 id="dokumentirovanie-izvlecheniya-dannyh-prilozheniy">Документирование извлечения данных приложений</h2>
echo "$(date): Извлечение данных $APP_NAME с устройства $DEVICE_ID" >> chain_of_custody.log
echo "Метод: ADB pull из /data/data/$PACKAGE_NAME" >> chain_of_custody.log
echo "Хэш-сумма: $(sha256sum extracted_file)" >> chain_of_custody.log
Извлечение данных приложений позволяет получить доступ к коммуникациям, истории активности и другим важным артефактам. В следующих разделах мы рассмотрим продвинутые техники извлечения и работу с rooted устройствами.
Продвинутые техники извлечения
Продвинутые техники извлечения данных требуют глубокого понимания Android архитектуры и использования специализированных инструментов. Эти методы позволяют получить доступ к защищенным данным и системным областям.
Работа с Android Backup
Создание полных backup с системными данными:
bash
<h2 id="backup-s-sistemnymi-prilozheniyami">Backup с системными приложениями</h2>
adb backup -all -system -f full_system.ab
<h2 id="backup-konkretnyh-prilozheniy">Backup конкретных приложений</h2>
adb backup -f whatsapp.ab com.whatsapp
adb backup -f chrome.ab com.android.chrome
<h2 id="backup-bez-apk-tolko-dannye">Backup без APK (только данные)</h2>
adb backup -noapk -f data_only.ab com.whatsapp
Распаковка Android Backup:
Android Backup имеет специфический формат и требует конвертации:
bash
<h2 id="ispolzovanie-android-backup-extractor-abe">Использование Android Backup Extractor (ABE)</h2>
java -jar abe.jar unpack full_system.ab full_system.tar
<h2 id="raspakovka-tar-arhiva">Распаковка tar архива</h2>
tar -xvf full_system.tar
<h2 id="prosmotr-soderzhimogo">Просмотр содержимого</h2>
ls -la apps/
Анализ backup содержимого:
bash
<h2 id="poisk-baz-dannyh-v-backup">Поиск баз данных в backup</h2>
find apps/ -name "*.db" -type f
<h2 id="izvlechenie-klyuchevyh-faylov">Извлечение ключевых файлов</h2>
cp apps/com.whatsapp/db/msgstore.db .
cp apps/com.android.chrome/app_chrome/Default/History .
Извлечение через Content Providers
Доступ к системным content provider:
bash
<h2 id="mms-sms-cherez-content-provider">MMS/SMS через content provider</h2>
adb shell content query --uri content://mms-sms/conversations
<h2 id="brauzernaya-istoriya">Браузерная история</h2>
adb shell content query --uri content://com.android.chrome.browser/history
<h2 id="kalendar">Календарь</h2>
adb shell content query --uri content://com.android.calendar/events
<h2 id="kniga-kontaktov">Книга контактов</h2>
adb shell content query --uri content://com.android.contacts/contacts
Пользовательские content provider приложений:
bash
<h2 id="whatsapp-content-provider-esli-dostupen">WhatsApp content provider (если доступен)</h2>
adb shell content query --uri content://com.whatsapp.provider.contacts/contacts
<h2 id="facebook-content-provider">Facebook content provider</h2>
adb shell content query --uri content://com.facebook.katana.provider
Работа с Android Keystore
Извлечение ключей шифрования:
bash
<h2 id="raspolozhenie-keystore">Расположение keystore</h2>
adb shell find /data -name "*.ks" -o -name "*keystore*"
<h2 id="android-keystore-api-18">Android Keystore (API 18+)</h2>
/data/misc/keystore/
<h2 id="izvlechenie-trebuetsya-root">Извлечение (требуется root)</h2>
adb shell su -c "cp /data/misc/keystore/user_0/* /sdcard/"
adb pull /sdcard/* ./
Доступ к защищенным разделам
Извлечение из /data/system:
bash
<h2 id="sistemnye-nastroyki">Системные настройки</h2>
adb shell cp /data/system/users/0/settings_secure.xml /sdcard/
adb pull /sdcard/settings_secure.xml .
<h2 id="logi-prilozheniy">Логи приложений</h2>
adb shell cp /data/system/appusagestats/* /sdcard/
adb pull /sdcard/*usage* ./
Работа с FDE (Full Disk Encryption):
bash
<h2 id="proverka-statusa-shifrovaniya">Проверка статуса шифрования</h2>
adb shell getprop ro.crypto.state
<h2 id="dlya-zashifrovannyh-ustroystv-trebuetsya-parol-ekrana">Для зашифрованных устройств требуется пароль экрана</h2>
<h2 id="ili-ispolzovanie-spetsializirovannyh-instrumentov">или использование специализированных инструментов</h2>Продвинутые техники с логами
Извлечение подробных логов:
bash
<h2 id="vklyuchenie-verbose-logging">Включение verbose logging</h2>
adb shell setprop log.tag.Verbose VERBOSE
<h2 id="radio-logs-telefoniya">Radio logs (телефония)</h2>
adb logcat -b radio
<h2 id="events-logs">Events logs</h2>
adb logcat -b events
<h2 id="main-logs-s-filtrami">Main logs с фильтрами</h2>
adb logcat | grep -i "whatsapp\|telegram"
Анализ kernel logs:
bash
<h2 id="kernel-ring-buffer">Kernel ring buffer</h2>
adb shell dmesg
<h2 id="sohranenie-kernel-logs">Сохранение kernel logs</h2>
adb shell dmesg > kernel_ring_buffer.txt
<h2 id="analiz-na-predmet-sboev">Анализ на предмет сбоев</h2>
grep -i "crash\|panic\|error" kernel_ring_buffer.txt
Работа с Android Runtime (ART)
Извлечение ART кэша:
bash
<h2 id="art-cache-raspolozhenie">ART cache расположение</h2>
adb shell find /data/dalvik-cache -name "*.dex" | head -10
<h2 id="izvlechenie-compiled-code">Извлечение compiled code</h2>
adb shell cp /data/dalvik-cache/arm64/* /sdcard/ 2>/dev/null
adb pull /sdcard/*art* ./
Reverse Engineering приложений
Декомпиляция APK:
bash
<h2 id="ispolzovanie-apktool">Использование apktool</h2>
apktool d app.apk -o decoded_app/
<h2 id="prosmotr-manifesta">Просмотр манифеста</h2>
cat decoded_app/AndroidManifest.xml
<h2 id="prosmotr-resursov">Просмотр ресурсов</h2>
ls decoded_app/res/
<h2 id="prosmotr-smali-koda">Просмотр smali кода</h2>
ls decoded_app/smali/
Анализ с помощью JADX:
bash
<h2 id="dekompilyatsiya-v-java">Декомпиляция в Java</h2>
jadx app.apk -d decompiled_java/
<h2 id="poisk-chuvstvitelnyh-dannyh">Поиск чувствительных данных</h2>
grep -r "password\|key\|secret" decompiled_java/
Работа с Android Intents
Отправка intent для извлечения данных:
bash
<h2 id="zapusk-eksporta-dannyh">Запуск экспорта данных</h2>
adb shell am broadcast -a com.android.intent.action.REQUEST_BACKUP -n com.android.backupconfirm/.BackupRestoreConfirmation
<h2 id="prinuditelnyy-damp-pamyati">Принудительный дамп памяти</h2>
adb shell am dumpheap com.whatsapp /sdcard/whatsapp_heap.hprof
<h2 id="zapusk-servisa-dlya-logirovaniya">Запуск сервиса для логирования</h2>
adb shell am startservice -n com.example/.DataLoggerService
Продвинутые скрипты автоматизации
Скрипт полного forensic acquisition:
bash
#!/bin/bash
<h2 id="prodvinutyy-skript-izvlecheniya-dannyh-android">Продвинутый скрипт извлечения данных Android</h2>
DEVICE_ID=${1:-$(adb devices | grep -v "List" | head -1 | awk '{print $1}')}
OUTPUT_DIR="android_forensic_$(date +%Y%m%d_%H%M%S)"
mkdir -p $OUTPUT_DIR/{system,user,apps,logs,backup}
echo "=== ANDROID FORENSIC ACQUISITION ==="
echo "Устройство: $DEVICE_ID"
echo "Выход: $OUTPUT_DIR"
<h2 id="sistemnaya-informatsiya">Системная информация</h2>
echo "Сбор системной информации..."
adb -s $DEVICE_ID shell getprop > $OUTPUT_DIR/system/properties.txt
adb -s $DEVICE_ID shell dumpsys battery > $OUTPUT_DIR/system/battery.txt
adb -s $DEVICE_ID shell df -h > $OUTPUT_DIR/system/disk_usage.txt
<h2 id="polzovatelskie-dannye">Пользовательские данные</h2>
echo "Извлечение пользовательских данных..."
adb -s $DEVICE_ID shell content query --uri content://sms > $OUTPUT_DIR/user/sms.txt
adb -s $DEVICE_ID shell content query --uri content://call_log/calls > $OUTPUT_DIR/user/calls.txt
adb -s $DEVICE_ID shell content query --uri content://contacts/phones > $OUTPUT_DIR/user/contacts.txt
<h2 id="prilozheniya">Приложения</h2>
echo "Извлечение данных приложений..."
adb -s $DEVICE_ID shell pm list packages -f > $OUTPUT_DIR/apps/installed_apps.txt
<h2 id="popytka-backup-populyarnyh-prilozheniy">Попытка backup популярных приложений</h2>
for app in com.whatsapp org.telegram.messenger com.android.chrome; do
if adb -s $DEVICE_ID shell pm list packages | grep -q $app; then
echo "Backup $app..."
adb -s $DEVICE_ID backup -f $OUTPUT_DIR/backup/${app}.ab $app 2>/dev/null || echo "Backup $app failed"
fi
done
<h2 id="logi">Логи</h2>
echo "Сбор логов..."
adb -s $DEVICE_ID logcat -d > $OUTPUT_DIR/logs/logcat.txt
adb -s $DEVICE_ID shell dmesg > $OUTPUT_DIR/logs/dmesg.txt
<h2 id="media-fayly-vyborka">Медиа файлы (выборка)</h2>
echo "Извлечение медиафайлов..."
adb -s $DEVICE_ID shell find /sdcard/DCIM -name "*.jpg" | head -50 | while read file; do
filename=$(basename "$file")
adb -s $DEVICE_ID pull "$file" "$OUTPUT_DIR/user/media/" 2>/dev/null
done
<h2 id="generatsiya-otcheta">Генерация отчета</h2>
cat > $OUTPUT_DIR/report.txt << EOF
ANDROID FORENSIC ACQUISITION REPORT
===================================
Дата: $(date)
Устройство: $DEVICE_ID
Метод: ADB extraction
СОДЕРЖИМОЕ:
- Системная информация: $(ls $OUTPUT_DIR/system/ | wc -l) файлов
- Пользовательские данные: $(ls $OUTPUT_DIR/user/ | wc -l) файлов
- Данные приложений: $(ls $OUTPUT_DIR/apps/ | wc -l) файлов
- Backup: $(ls $OUTPUT_DIR/backup/ 2>/dev/null | wc -l) файлов
- Логи: $(ls $OUTPUT_DIR/logs/ | wc -l) файлов
ХЭШ-СУММЫ:
$(find $OUTPUT_DIR -type f -exec sha256sum {} \; | sed 's|'$OUTPUT_DIR'/||')
ПРИМЕЧАНИЯ:
- Для расшифровки backup файлов используйте ABE
- SQLite базы анализируйте с помощью sqlite3
- Медиа файлы проверяйте на метаданные
EOF
echo "Извлечение завершено: $OUTPUT_DIR"
echo "Отчет: $OUTPUT_DIR/report.txt"
Скрипт анализа извлеченных данных:
bash
#!/bin/bash
<h2 id="analiz-izvlechennyh-android-dannyh">Анализ извлеченных Android данных</h2>
DATA_DIR=$1
if [ -z "$DATA_DIR" ]; then
echo "Использование: $0 <директория_с_данными>"
exit 1
fi
echo "=== АНАЛИЗ ANDROID ДАННЫХ ==="
<h2 id="analiz-sms">Анализ SMS</h2>
if [ -f "$DATA_DIR/user/sms.txt" ]; then
SMS_COUNT=$(wc -l < "$DATA_DIR/user/sms.txt")
echo "SMS сообщений: $SMS_COUNT"
# Анализ типов сообщений
INCOMING=$(grep "type=1" "$DATA_DIR/user/sms.txt" | wc -l)
OUTGOING=$(grep "type=2" "$DATA_DIR/user/sms.txt" | wc -l)
echo "Входящих: $INCOMING, Исходящих: $OUTGOING"
fi
<h2 id="analiz-zvonkov">Анализ звонков</h2>
if [ -f "$DATA_DIR/user/calls.txt" ]; then
CALL_COUNT=$(wc -l < "$DATA_DIR/user/calls.txt")
echo "Записей звонков: $CALL_COUNT"
fi
<h2 id="analiz-prilozheniy">Анализ приложений</h2>
if [ -f "$DATA_DIR/apps/installed_apps.txt" ]; then
APP_COUNT=$(wc -l < "$DATA_DIR/apps/installed_apps.txt")
echo "Установленных приложений: $APP_COUNT"
# Поиск подозрительных приложений
SUSPICIOUS=$(grep -E "(spy|monitor|track|keylog)" "$DATA_DIR/apps/installed_apps.txt" | wc -l)
echo "Подозрительных приложений: $SUSPICIOUS"
fi
<h2 id="analiz-logov">Анализ логов</h2>
if [ -f "$DATA_DIR/logs/logcat.txt" ]; then
ERROR_COUNT=$(grep -i "error\|exception\|crash" "$DATA_DIR/logs/logcat.txt" | wc -l)
echo "Ошибок в логах: $ERROR_COUNT"
fi
echo "Анализ завершен"
Интеграция с forensic инструментами
Использование с Autopsy:
bash
<h2 id="sozdanie-obraza-android-razdela">Создание образа Android раздела</h2>
adb shell su -c "dd if=/dev/block/dm-0 of=/sdcard/android_image.dd bs=4M"
adb pull /sdcard/android_image.dd .
<h2 id="otkrytie-v-autopsy-kak-logicheskiy-obraz">Открытие в Autopsy как логический образ</h2>
<h2 id="autopsy-avtomaticheski-raspoznaet-android-strukturu">Autopsy автоматически распознает Android структуру</h2>Работа с Cellebrite UFED:
ADB можно использовать для подготовки устройств перед использованием профессиональных инструментов:
bash
<h2 id="vklyuchenie-vseh-razresheniy">Включение всех разрешений</h2>
adb shell pm grant com.cellebrite.ufed com.android.permission.READ_SMS
adb shell pm grant com.cellebrite.ufed com.android.permission.READ_CONTACTS
<h2 id="predvaritelnoe-izvlechenie">Предварительное извлечение</h2>
adb backup -all -f pre_extraction.ab
Продвинутые техники позволяют получить доступ к данным, недоступным стандартными методами. В следующем разделе мы рассмотрим работу с rooted устройствами и расширенные возможности.
Работа с rooted устройствами
Root доступ предоставляет неограниченные возможности для извлечения данных с Android устройств. Root позволяет обходить системные ограничения и получать доступ к защищенным файлам и разделам.
Проверка root статуса
Определение наличия root:
bash
<h2 id="proverka-su-binarnogo-fayla">Проверка su бинарного файла</h2>
adb shell which su
<h2 id="popytka-vypolneniya-su-komandy">Попытка выполнения su команды</h2>
adb shell su -c 'id'
<h2 id="proverka-root-prilozheniy">Проверка root приложений</h2>
adb shell pm list packages | grep -i "supersu\|magisk\|kingsu"
<h2 id="proverka-sistemnyh-svoystv">Проверка системных свойств</h2>
adb shell getprop ro.build.tags | grep -i test-keys
Идентификация типа root:
bash
<h2 id="supersu">SuperSU</h2>
adb shell ls /system/xbin/su 2>/dev/null && echo "SuperSU detected"
<h2 id="magisk">Magisk</h2>
adb shell ls /sbin/.magisk/ 2>/dev/null && echo "Magisk detected"
<h2 id="kingroot">KingRoot</h2>
adb shell pm list packages | grep kingroot && echo "KingRoot detected"
Извлечение системных данных с root
Доступ к /data/data с root:
bash
<h2 id="polnyy-dostup-k-dannym-prilozheniy">Полный доступ к данным приложений</h2>
adb shell su -c 'find /data/data -name "*.db" -type f'
<h2 id="izvlechenie-vseh-baz-dannyh">Извлечение всех баз данных</h2>
adb shell su -c 'for db in $(find /data/data -name "*.db"); do cp "$db" /sdcard/; done'
<h2 id="skachivanie">Скачивание</h2>
adb pull /sdcard/*.db ./root_databases/
Извлечение системных логов:
bash
<h2 id="root-logi">Root логи</h2>
adb shell su -c 'cat /data/misc/logd/*'
<h2 id="system-logs">System logs</h2>
adb shell su -c 'find /data -name "*.log" -exec cat {} \;'
<h2 id="kernel-logs-s-root">Kernel logs с root</h2>
adb shell su -c 'dmesg | grep -i error'
Работа с шифрованными разделами
Расшифровка FDE с root:
bash
<h2 id="proverka-statusa-shifrovaniya">Проверка статуса шифрования</h2>
adb shell su -c 'getprop ro.crypto.state'
<h2 id="dlya-fde-poluchenie-klyucha-slozhno">Для FDE получение ключа (сложно)</h2>
adb shell su -c 'cat /data/system/locksettings.db'
<h2 id="rasshifrovka-razdela-trebuet-spetsializirovannyh-instrumentov">Расшифровка раздела (требует специализированных инструментов)</h2>Доступ к hardware компонентам
Извлечение IMEI и серийных номеров:
bash
<h2 id="imei-cherez-root">IMEI через root</h2>
adb shell su -c 'service call iphonesubinfo 1 | cut -c 52-66 | tr -d ".[:space:]"'
<h2 id="seriynyy-nomer-ustroystva">Серийный номер устройства</h2>
adb shell su -c 'getprop ro.serialno'
<h2 id="hardware-informatsiya">Hardware информация</h2>
adb shell su -c 'cat /proc/cpuinfo'
adb shell su -c 'cat /proc/meminfo'
Извлечение удаленных данных
Восстановление из нераспределенного пространства:
bash
<h2 id="sozdanie-obraza-userdata-razdela">Создание образа userdata раздела</h2>
adb shell su -c 'dd if=/dev/block/by-name/userdata of=/sdcard/userdata.img bs=4M'
<h2 id="skachivanie-obraza">Скачивание образа</h2>
adb pull /sdcard/userdata.img .
<h2 id="analiz-obraza-na-predmet-udalennyh-faylov">Анализ образа на предмет удаленных файлов</h2>
<h2 id="ispolzovanie-tools-vrode-autopsy-ftk-ili-testdisk">Использование tools вроде autopsy, ftk, или testdisk</h2>Восстановление удаленных приложений:
bash
<h2 id="poisk-udalennyh-apk-v-data-app">Поиск удаленных APK в /data/app</h2>
adb shell su -c 'find /data/app -name "*.apk" -mtime +1'
<h2 id="vosstanovlenie-udalennyh-prilozheniy">Восстановление удаленных приложений</h2>
adb shell su -c 'pm install /data/app/com.example.app-1/base.apk'
Модификация системы для форензики
Включение дополнительных логов:
bash
<h2 id="vklyuchenie-verbose-logging">Включение verbose logging</h2>
adb shell su -c 'setprop log.tag.Verbose VERBOSE'
<h2 id="vklyuchenie-kernel-debugging">Включение kernel debugging</h2>
adb shell su -c 'echo 1 > /proc/sys/kernel/printk'
<h2 id="vklyuchenie-audit-logging">Включение audit logging</h2>
adb shell su -c 'auditctl -e 1'
Безопасность при работе с root
Риски root доступа:
- Потенциальное повреждение системы
- Нарушение chain of custody
- Изменение временных меток файлов
- Активация анти-root механизмов
Рекомендации:
bash
<h2 id="sozdanie-kopii-pered-modifikatsiyami">Создание копии перед модификациями</h2>
adb shell su -c 'cp /system/build.prop /system/build.prop.backup'
<h2 id="dokumentirovanie-vseh-deystviy">Документирование всех действий</h2>
echo "$(date): Root command executed: $COMMAND" >> root_actions.log
<h2 id="proverka-tselostnosti-posle-izvlecheniya">Проверка целостности после извлечения</h2>
adb shell su -c 'find /data/data -exec sha256sum {} \; 2>/dev/null > /sdcard/hashes.txt'
adb pull /sdcard/hashes.txt .
Скрипты для root устройств
Комплексный root extraction скрипт:
bash
#!/bin/bash
<h2 id="skript-izvlecheniya-dannyh-s-root-ustroystva">Скрипт извлечения данных с root устройства</h2>
OUTPUT_DIR="root_extraction_$(date +%Y%m%d_%H%M%S)"
mkdir -p $OUTPUT_DIR/{system,data,root}
echo "=== ROOT EXTRACTION SCRIPT ==="
<h2 id="proverka-root">Проверка root</h2>
if ! adb shell su -c 'echo "Root access confirmed"' 2>/dev/null; then
echo "ERROR: Root access required"
exit 1
fi
echo "Root access confirmed"
<h2 id="sistemnye-dannye">Системные данные</h2>
echo "Extracting system data..."
adb shell su -c 'cp /data/system/packages.xml /sdcard/'
adb shell su -c 'cp /data/system/users/0/accounts.db /sdcard/'
adb shell su -c 'find /data/system -name "*.key" -exec cp {} /sdcard/ \;'
adb pull /sdcard/packages.xml $OUTPUT_DIR/system/
adb pull /sdcard/accounts.db $OUTPUT_DIR/system/
adb pull /sdcard/*.key $OUTPUT_DIR/system/ 2>/dev/null
<h2 id="dannye-prilozheniy-vse-bazy-dannyh">Данные приложений (все базы данных)</h2>
echo "Extracting application databases..."
adb shell su -c 'find /data/data -name "*.db" -exec cp {} /sdcard/databases/ \; 2>/dev/null; find /data/data -name "*.sqlite" -exec cp {} /sdcard/databases/ \; 2>/dev/null'
adb pull /sdcard/databases/ $OUTPUT_DIR/data/
<h2 id="root-specific-dannye">Root specific данные</h2>
echo "Extracting root-specific data..."
adb shell su -c 'cp /system/xbin/su /sdcard/'
adb shell su -c 'ls -la /data/local/tmp/ > /sdcard/tmp_files.txt'
adb shell su -c 'ps aux > /sdcard/processes.txt'
adb pull /sdcard/su $OUTPUT_DIR/root/
adb pull /sdcard/tmp_files.txt $OUTPUT_DIR/root/
adb pull /sdcard/processes.txt $OUTPUT_DIR/root/
<h2 id="ochistka">Очистка</h2>
adb shell rm /sdcard/packages.xml /sdcard/accounts.db 2>/dev/null
adb shell rm -rf /sdcard/databases/ 2>/dev/null
echo "Extraction completed: $OUTPUT_DIR"
Анализ root артефактов
Проверка на наличие руткитов:
bash
<h2 id="poisk-podozritelnyh-protsessov">Поиск подозрительных процессов</h2>
adb shell su -c 'ps aux | grep -v -E "(root|shell|system|zygote)"'
<h2 id="proverka-integrity-sistemnyh-faylov">Проверка integrity системных файлов</h2>
adb shell su -c 'sha256sum /system/bin/su'
<h2 id="analiz-loaded-moduley">Анализ loaded модулей</h2>
adb shell su -c 'lsmod'
Восстановление после root модификаций:
bash
<h2 id="vosstanovlenie-originalnyh-faylov">Восстановление оригинальных файлов</h2>
adb shell su -c 'cp /system/build.prop.backup /system/build.prop'
<h2 id="ochistka-root-sledov">Очистка root следов</h2>
adb shell su -c 'rm -rf /data/local/tmp/*'
adb shell su -c 'pm uninstall com.example.rootapp'
Root доступ значительно расширяет возможности извлечения данных, но требует особой осторожности. В следующем разделе мы рассмотрим интеграцию ADB с другими forensic инструментами.
Интеграция с другими инструментами
ADB редко используется изолированно. Для комплексного анализа необходима интеграция с другими инструментами мобильной форензики.
Интеграция с Autopsy
Импорт ADB данных в Autopsy:
bash
<h2 id="sozdanie-modulya-autopsy-dlya-adb">Создание модуля Autopsy для ADB</h2>
<h2 id="autopsy-mozhet-avtomaticheski-analizirovat-izvlechennye-adb-dannye">Autopsy может автоматически анализировать извлеченные ADB данные</h2>
<h2 id="podderzhka-android-moduley-v-autopsy">Поддержка Android модулей в Autopsy</h2>Работа с Cellebrite UFED
Подготовка устройства для UFED:
bash
<h2 id="vklyuchenie-razresheniy-cherez-adb">Включение разрешений через ADB</h2>
adb shell pm grant com.cellebrite.mobile.forensics android.permission.READ_SMS
adb shell pm grant com.cellebrite.mobile.forensics android.permission.READ_CONTACTS
<h2 id="predvaritelnoe-izvlechenie">Предварительное извлечение</h2>
adb backup -all -f cellebrite_prep.ab
Интеграция с Oxygen Forensic Detective
Экспорт данных для Oxygen:
bash
<h2 id="sozdanie-sovmestimogo-formata">Создание совместимого формата</h2>
adb shell content query --uri content://sms > oxygen_sms.txt
adb shell content query --uri content://call_log/calls > oxygen_calls.txt
Работа с Magnet AXIOM
ADB в Magnet AXIOM workflow:
bash
<h2 id="axiom-mozhet-ispolzovat-adb-dlya-live-acquisition">AXIOM может использовать ADB для live acquisition</h2>
<h2 id="integratsiya-cherez-axiom-android-modules">Интеграция через AXIOM Android modules</h2>Скрипты автоматизации
Комплексный forensic workflow:
bash
#!/bin/bash
<h2 id="integrirovannyy-skript-s-ispolzovaniem-neskolkih-instrumentov">Интегрированный скрипт с использованием нескольких инструментов</h2>
<h2 id="1-adb-extraction">1. ADB extraction</h2>
adb shell content query --uri content://sms > sms.txt
<h2 id="2-sqlite-analysis">2. SQLite analysis</h2>
sqlite3 whatsapp.db "SELECT * FROM messages;" > whatsapp_messages.txt
<h2 id="3-timeline-creation">3. Timeline creation</h2>
fls -f ntfs -o 1048576 -m disk.img > timeline.txt
<h2 id="4-report-generation">4. Report generation</h2>
cat > final_report.txt << EOF
FORENSIC REPORT
$(date)
ADB Data:
- SMS: $(wc -l < sms.txt)
- WhatsApp: $(wc -l < whatsapp_messages.txt)
Timeline events: $(wc -l < timeline.txt)
EOF
Ограничения и подводные камни
Несмотря на мощные возможности ADB, существуют значительные ограничения.
Основные ограничения
Без root доступа:
- Ограниченный доступ к /data/data
- Невозможность извлечения системных данных
- Ограничения на шифрованные разделы
Современные версии Android:
- Усиленная безопасность (Android 10+)
- Ограничения на background execution
- Scoped storage limitations
Hardware ограничения:
- Заблокированные bootloader
- Encrypted storage
- Secure boot mechanisms
Судебные ограничения
Chain of custody:
- ADB может модифицировать данные
- Необходимость документирования всех действий
- Риск contamination доказательств
Экспертная квалификация:
- Требуется глубокое понимание Android
- Необходимость сертификации для суда
Реальный кейс расследования
Сценарий: Расследование корпоративного шпионажа с использованием Android устройства.
Этапы:
1. Получение устройства с ордером
2. Включение USB debugging
3. Подключение через ADB
4. Извлечение WhatsApp переписки
5. Анализ геолокационных данных
6. Восстановление удаленных файлов
Результат: Обнаружены доказательства передачи коммерческой тайны конкурентам.
Часто задаваемые вопросы
Требуется ли root для ADB?
Нет, но root значительно расширяет возможности.
Можно ли извлечь данные с заблокированного устройства?
Ограниченно. Требуется разблокировка или специальные инструменты.
Как обеспечить судебную достоверность?
Документируйте все действия, используйте write-blocker, проверяйте хэши.
Какие Android версии поддерживаются?
ADB работает со всеми версиями Android, но возможности различаются.
Заключение
ADB является фундаментальным инструментом мобильной форензики, предоставляющим широкие возможности для извлечения данных с Android устройств. От базовых команд до продвинутых техник с root доступом, ADB позволяет получить доступ к контактам, сообщениям, приложениям и системным данным.
Ключевые преимущества: бесплатность, универсальность, возможность автоматизации. Основные ограничения: зависимость от root для полного доступа, ограничения современных Android версий.
Рекомендации:
- Начинайте с изучения официальной документации
- Практикуйтесь на тестовых устройствах
- Соблюдайте судебные процедуры
- Комбинируйте ADB с другими инструментами
Полезные ресурсы:
- Android Developer Documentation
- Mobile Forensics books
- Forensic Focus forums
Удачи в мобильной криминалистике!
---
**⚠️ Дисклеймер:** Статья носит информационно-образовательный характер и не содержит инструкций для совершения противоправных действий.