Хотите узнать, какие типы криминалистических артефактов WhatsApp существуют в различных операционных системах и где именно они могут быть обнаружены — тогда вам сюда. Этой статьей специалист Лаборатории компьютерной криминалистики Group-IB Игорь Михайлов открывает серию публикаций о криминалистическом исследовании WhatsApp и о том, какие сведения можно получить при анализе устройства.

Сразу отметим, что в разных операционных системах хранятся различные типы артефактов WhatsApp, и если из одного устройства исследователь может извлечь определенные типы данных WhatsApp, это совсем не означает, что подобные типы данных можно извлечь из другого устройства. Например, если изымается системный блок под управлением ОС Windows, то на его дисках, вероятно, не будут обнаружены чаты WhatsApp (исключение составляют резервные копии iOS-устройств, которые могут быть обнаружены на этих же накопителях). При изъятии ноутбуков и мобильных устройств будут свои особенности. Поговорим об этом поподробнее.

Артефакты WhatsApp в Android-устройстве


Для того, чтобы извлечь артефакты WhatsApp из устройства под управлением ОС Android, исследователь должен иметь права суперпользователя (‘root’) на исследуемом устройстве или иметь возможность иным способом извлечь физический дамп памяти устройства, или его файловую систему (например, используя программные уязвимости конкретного мобильного устройства).

Файлы приложения располагаются в памяти телефона в разделе, в котором сохраняются данные пользователя. Как правило, этот раздел носит имя ‘userdata’. Подкаталоги и файлы программы располагаются по пути: ‘/data/data/com.whatsapp/’.

image alt

Основными файлами, которые содержат криминалистические артефакты WhatsApp в ОС Android являются базы данных ‘wa.db’ и ‘msgstore.db’.

В базе данных ‘wa.db’ содержится полный список контактов пользователя WhatsApp, включая номер телефона, отображаемое имя, временные метки и любую другую информацию, указанную при регистрации в WhatsApp. Файл ‘wa.db’ располагается по пути: ‘/data/data/com.whatsapp/databases/’ и имеет следующую структуру:

image alt

Наиболее интересными таблицами в базе данных ‘wa.db’ для исследователя являются:

  • ‘wa_contacts’
    Эта таблица содержит информацию о контактах: id контакта в WhatsApp, информацию о статусе, отображаемое имя пользователя, временные отметки и т.д.

    Внешний вид таблицы:

    image alt

    Структура таблицы
    Имя поля Значение
    _id порядковый номер записи (в SQL таблице)
    jid WhatsApp ID контакта, записывается в формате <номер телефона>@s.whatsapp.net
    is_whatsapp_user содержит ‘1’ если контакту соответствует фактический пользователь WhatsApp, ‘0’ в ином случае
    status содержит текст, отображаемый в статусе контакта
    status_timestamp содержит временную метку в формате Unix Epoch Time (ms)
    number номер телефона, ассоциированный с контактом
    raw_contact_id порядковый номер контакта
    display_name отображаемое имя контакта
    phone_type тип телефона
    phone_label метка, ассоциированная с номером контакта
    unseen_msg_count количество сообщений которые были отправлены контактом но небыли прочитаны получателем
    photo_ts содержит временную метку в формате Unix Epoch Time
    thumb_ts содержит временную метку в формате Unix Epoch Time
    photo_id_timestamp содержит временную метку в формате Unix Epoch Time (ms)
    given_name значение поля совпадает с ‘display_name’ для каждого контакта
    wa_name имя контакта в WhatsApp (отображается имя, указанное в профиле контакта)
    sort_name имя контакта, используемое в операциях сортировки
    nickname ник контакта в WhatsApp (отображается ник, указанный в профиле контакта)
    company компания (отображается компания, указанная в профиле контакта)
    title обращение (госпожа/господин; отображается обращение, настроенное в профиле контакта)
    offset смещение
  • ‘sqlite_sequence’
    Эта таблица содержит информацию о количестве контактов;
  • ‘android_metadata’
    Эта таблица содержит информацию о языковой локализации WhatsApp.

В базе данных ‘msgstore.db’ содержится информация о переданных сообщениях, такая как номер контакта, текст сообщения, статус сообщения, временные метки, сведения о переданных файлах, включенных в сообщения, и т.д. Файл ‘msgstore.db’ располагается по пути: ‘/data/data/com.whatsapp/databases/' и имеет следующую структуру:

image alt

Наиболее интересными таблицами в файле ‘msgstore.db’ для исследователя являются:

  • ‘sqlite_sequence’
    Эта таблица содержит общую информацию об этой базе данных, например, общее число хранимых сообщений, общее число чатов и т.д.

    Внешний вид таблицы:

    image alt
  • ‘message_fts_content’
    Содержит текст переданных сообщений.

    Внешний вид таблицы:

    image alt
  • ‘messages’
    Эта таблица содержит такую информацию, как номер контакта, текст сообщения, статус сообщения, временные метки, сведения о переданных файлах, включенных в сообщения.

    Внешний вид таблицы:

    image alt

    Структура таблицы
    Имя поля Значение
    _id порядковый номер записи (в SQL таблице)
    key_remote_jid WhatsApp ID партнера по коммуникации
    key_from_me направление сообщения: ‘0’ – входящее, ‘1’ — исходящее
    key_id уникальный идентификатор сообщения
    status статус сообщения: ‘0’ – доставлено, ‘4’ – ждет на сервере, ‘5’ – получено по месту назначения, ‘6’ – контрольное сообщение, ‘13’ – сообщение открыто получателем (прочитано)
    need_push имеет значение ‘2’, если это широковещательное сообщение, в ином случае содержит ‘0’
    data текст сообщения (когда параметр ‘media_wa_type’ равен ‘0’)
    timestamp содержит временную метку в формате Unix Epoch Time (ms), значение берется из часов устройства
    media_url содержит URL передаваемого файла (когда параметр ‘media_wa_type’ равен ‘1’, ‘2’, ‘3’)
    media_mime_type MIME-тип передаваемого файла (когда параметр ‘media_wa_type’ равен ‘1’, ‘2’, ‘3’)
    media_wa_type тип сообщения: ‘0’ – текст, ‘1’ – графический файл, ‘2’- аудио-файл, ‘3’ – видео- файл, ‘4’ – карточка контакта, ‘5’ — геоданные
    media_size размер передаваемого файла (когда параметр ‘media_wa_type’ равен ‘1’, ‘2’, ‘3’)
    media_name имя передаваемого файла (когда параметр ‘media_wa_type’ равен ‘1’, ‘2’, ‘3’)
    media_caption Содержит слова ‘audio’, ‘video’ для соответствующих значений параметра ‘media_wa_type’ (когда параметр ‘media_wa_type’ равен ‘1’, ‘3’)
    media_hash закодированный в формате base64 хэш передаваемого файла, рассчитанный по алгоритму HAS-256 (когда параметр ‘media_wa_type’ равен ‘1’, ‘2’, ‘3’)
    media_duration продолжительность в секундах для медиафайла (когда параметр ‘media_wa_type’ равен ‘1’, ‘2’, ‘3’)
    origin имеет значение ‘2’, если это широковещательное сообщение, в ином случае содержит ‘0’
    latitude геоданные: широта (когда параметр ‘media_wa_type’ равен ‘5’)
    longitude геоданные: долгота (когда параметр ‘media_wa_type’ равен ‘5’)
    thumb_image служебная информация
    remote_recource ID отправителя (только для групповых чатов)
    received_timestamp время получения, содержит временную метку в формате Unix Epoch Time (ms), значение берется из часов устройства (когда параметр ‘key_from_me’ имеет ‘0’, ‘-1’ или иное значение)
    send_timestamp не используется, обычно имеет значение ‘-1’
    receipt_server_timestamp время получения центральным сервером, содержит временную метку в формате Unix Epoch Time (ms), значение берется из часов устройства (когда параметр ‘key_from_me’ имеет ‘1’, ‘-1’ или иное значение
    receipt_device_timestamp время получения сообщения другим абонентом, содержит временную метку в формате Unix Epoch Time (ms), значение берется из часов устройства (когда параметр ‘key_from_me’ имеет ‘1’, ‘-1’ или иное значение
    read_device_timestamp время открытия (чтения) сообщения, содержит временную метку в формате Unix Epoch Time (ms), значение берется из часов устройства
    played_device_timestamp время воспроизведения сообщения, содержит временную метку в формате Unix Epoch Time (ms), значение берется из часов устройства
    raw_data миниатюра передаваемого файла (когда параметр ‘media_wa_type’ равен ‘1’ или ‘3’)
    recipient_count количество получателей (для широковещательных сообщений)
    participant_hash используется при передаче сообщений с геоданными
    starred не используется
    quoted_row_id неизвестно, обычно содержит значение ‘0’
    mentioned_jids не используется
    multicast_id не используется
    offset смещение

    Данный список полей не является исчерпывающим. Для разных версий WhatsApp часть полей могут присутствовать или отсутствовать. Дополнительно могут присутствовать поля ‘media_enc_hash’, ‘edit_version’, ‘payment_transaction_id’ и т.д.
  • ‘messages_thumbnails’
    Эта таблица содержит информацию о переданных изображениях и временные метки. В колонке ‘timestamp’ время указано в формате Unix Epoch Time (ms).
  • ‘chat_list’
    Эта таблица содержит информацию о чатах.

    Внешний вид таблицы:

    image alt

Также при исследовании WhatsApp в мобильном устройстве под управлением Android надо обращать внимание на следующие файлы:

  • Файл ‘msgstore.db.cryptXX’ (где XX – одна или две цифры от 0 до 12, например, msgstore.db.crypt12). Содержит зашифрованную резервную копию сообщений WhatsApp (резервная копия файла msgstore.db). Файл (или файлы) ‘msgstore.db.cryptXX’ располагается по пути: ‘/data/media/0/WhatsApp/Databases/’ (виртуальная SD-карта), ‘/mnt/sdcard/WhatsApp/Databases/ (физическая SD-карта)’.
  • Файл ‘key’. Содержит криптографический ключ. Располагается по пути: ‘/data/data/com.whatsapp/files/’. Используется для расшифровки зашифрованных резервных копий WhatsApp.
  • Файл ‘com.whatsapp_preferences.xml’. Содержит информацию о профиле аккаунта WhatsApp. Файл располагается по пути: ‘/data/data/com.whatsapp/shared_prefs/’.

    Фрагмент содержимого файла
    <?xml version="1.0" encoding="ISO-8859-1"?>
    …
    <string name="ph">9123456789</string> (номер телефона, ассоциированный с аккаунтом WhatsApp)
    …
    <string name="version">2.17.395</string> (версия WhatsApp)
    …
    <string name="my_current_status">Hey there! I am using WhatsApp.</string> (сообщение, отображаемое в статусе аккаунта)
    …
    <string name="push_name">Alex</string> (имя владельца аккаунта)
    … 
  • Файл ‘registration.RegisterPhone.xml’. Содержит информацию о номере телефона, ассоциированного с аккаунтом WhatsApp. Файл располагается по пути: ‘/data/data/com.whatsapp/shared_prefs/’.

    Содержимое файла
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <map>
    <string name="com.whatsapp.registration.RegisterPhone.phone_number">9123456789</string>
    <int name="com.whatsapp.registration.RegisterPhone.verification_state" value="0"/>
    <int name="com.whatsapp.registration.RegisterPhone.country_code_position" value="-1"/>
    <string name="com.whatsapp.registration.RegisterPhone.input_phone_number">912 345-67-89</string>
    <int name="com.whatsapp.registration.RegisterPhone.phone_number_position" value="10"/>
    <string name="com.whatsapp.registration.RegisterPhone.input_country_code">7</string>
    <string name="com.whatsapp.registration.RegisterPhone.country_code">7</string>
    </map>
  • Файл ‘axolotl.db’. Содержит криптографические ключи и иные данные, которые необходимы для идентификации владельца аккаунта. Располагается по пути: ‘/data/data/com.whatsapp/databases/’.
  • Файл ‘chatsettings.db’. Содержит информацию о конфигурации приложения.
  • Файл ‘wa.db’. Содержит детали контактов. Очень интересная (в криминалистическом аспекте) и информативная база данных. В ней может быть найдена подробная информация об удаленных контактах.

Также нужно обращать внимание на следующие каталоги:

  • Каталог ‘/data/media/0/WhatsApp/Media/WhatsApp Images/’. Содержит переданные графические файлы.
  • Каталог ‘/data/media/0/WhatsApp/Media/WhatsApp Voice Notes/’. Содержит голосовые сообщения в файлах формата .OPUS.
  • Каталог ‘/data/data/com.whatsapp/cache/Profile Pictures/’. Содержит графические файлы – изображения контактов.
  • Каталог ‘/data/data/com.whatsapp/files/Avatars/’. Содержит графические файлы – миниатюры изображения контактов. Эти файлы имеют расширение ‘.j’, но, тем не менее, являются графическими файлами формата JPEG (JPG).
  • Каталог ‘/data/data/com.whatsapp/files/Avatars/’. Содержит графические файлы – изображение и миниатюру изображения, установленного как аватар владельцем аккаунта.
  • Каталог ‘/data/data/com.whatsapp/files/Logs/’. Содержит журнал работы программы (файл ‘whatsapp.log’) и резервные копии журналов работы программы (файлы с именами формата whatsapp-гггг-мм-дд.1.log.gz).

Файлы журналов WhatsApp:

image alt

Фрагмент журнала
2017-01-10 09:37:09.757 LL_I D [524:WhatsApp Worker #1] missedcallnotification/init count:0 timestamp:0
2017-01-10 09:37:09.758 LL_I D [524:WhatsApp Worker #1] missedcallnotification/update cancel true
2017-01-10 09:37:09.768 LL_I D [1:main] app-init/load-me
2017-01-10 09:37:09.772 LL_I D [1:main] password file missing or unreadable
2017-01-10 09:37:09.782 LL_I D [1:main] statistics Text Messages: 59 sent, 82 received / Media Messages: 1 sent (0 bytes), 0 received (9850158 bytes) / Offline Messages: 81 received (19522 msec average delay) / Message Service: 116075 bytes sent, 211729 bytes received / Voip Calls: 1 outgoing calls, 0 incoming calls, 2492 bytes sent, 1530 bytes received / Google Drive: 0 bytes sent, 0 bytes received / Roaming: 1524 bytes sent, 1826 bytes received / Total Data: 118567 bytes sent, 10063417 bytes received
2017-01-10 09:37:09.785 LL_I D [1:main] media-state-manager/refresh-media-state/writable-media
2017-01-10 09:37:09.806 LL_I D [1:main] app-init/initialize/timer/stop: 24
2017-01-10 09:37:09.811 LL_I D [1:main] msgstore/checkhealth
2017-01-10 09:37:09.817 LL_I D [1:main] msgstore/checkhealth/journal/delete false
2017-01-10 09:37:09.818 LL_I D [1:main] msgstore/checkhealth/back/delete false
2017-01-10 09:37:09.818 LL_I D [1:main] msgstore/checkdb/data/data/com.whatsapp/databases/msgstore.db
2017-01-10 09:37:09.819 LL_I D [1:main] msgstore/checkdb/list _jobqueue-WhatsAppJobManager 16384 drw=011
2017-01-10 09:37:09.820 LL_I D [1:main] msgstore/checkdb/list _jobqueue-WhatsAppJobManager-journal 21032 drw=011
2017-01-10 09:37:09.820 LL_I D [1:main] msgstore/checkdb/list axolotl.db 184320 drw=011
2017-01-10 09:37:09.821 LL_I D [1:main] msgstore/checkdb/list axolotl.db-wal 436752 drw=011
2017-01-10 09:37:09.821 LL_I D [1:main] msgstore/checkdb/list axolotl.db-shm 32768 drw=011
2017-01-10 09:37:09.822 LL_I D [1:main] msgstore/checkdb/list msgstore.db 540672 drw=011
2017-01-10 09:37:09.823 LL_I D [1:main] msgstore/checkdb/list msgstore.db-wal 0 drw=011
2017-01-10 09:37:09.823 LL_I D [1:main] msgstore/checkdb/list msgstore.db-shm 32768 drw=011
2017-01-10 09:37:09.824 LL_I D [1:main] msgstore/checkdb/list wa.db 69632 drw=011
2017-01-10 09:37:09.825 LL_I D [1:main] msgstore/checkdb/list wa.db-wal 428512 drw=011
2017-01-10 09:37:09.825 LL_I D [1:main] msgstore/checkdb/list wa.db-shm 32768 drw=011
2017-01-10 09:37:09.826 LL_I D [1:main] msgstore/checkdb/list chatsettings.db 4096 drw=011
2017-01-10 09:37:09.826 LL_I D [1:main] msgstore/checkdb/list chatsettings.db-wal 70072 drw=011
2017-01-10 09:37:09.827 LL_I D [1:main] msgstore/checkdb/list chatsettings.db-shm 32768 drw=011
2017-01-10 09:37:09.838 LL_I D [1:main] msgstore/checkdb/version 1
2017-01-10 09:37:09.839 LL_I D [1:main] msgstore/canquery
2017-01-10 09:37:09.846 LL_I D [1:main] msgstore/canquery/count 1
2017-01-10 09:37:09.847 LL_I D [1:main] msgstore/canquery/timer/stop: 8
2017-01-10 09:37:09.847 LL_I D [1:main] msgstore/canquery 517 | time spent:8
2017-01-10 09:37:09.848 LL_I D [529:WhatsApp Worker #3] media-state-manager/refresh-media-state/internal-storage available:1,345,622,016 total:5,687,922,688

  • Каталог ‘/data/media/0/WhatsApp/Media/WhatsApp Audio/’. Содержит полученные аудиофайлы.
  • Каталог ‘/data/media/0/WhatsApp/Media/WhatsApp Audio/Sent/’. Содержит отправленные аудиофайлы.
  • Каталог ‘/data/media/0/WhatsApp/Media/WhatsApp Images/’. Содержит полученные графические файлы.
  • Каталог ‘/data/media/0/WhatsApp/Media/WhatsApp Images/Sent/’. Содержит отправленные графические файлы.
  • Каталог ‘/data/media/0/WhatsApp/Media/WhatsApp Video/’. Содержит полученные видеофайлы.
  • Каталог ‘/data/media/0/WhatsApp/Media/WhatsApp Video/Sent/’. Содержит отправленные видеофайлы.
  • Каталог ‘/data/media/0/WhatsApp/Media/WhatsApp Profile Photos/’. Содержит графические файлы, ассоциированные с владельцем аккаунта WhatsApp.
  • Для экономии места в памяти Android-смартфона часть данных WhatsApp может храниться на SD-карте. На SD-карте, в корневом каталоге, расположен каталог ‘WhatsApp’, где могут быть найдены следующие артефакты этой программы:

    image alt
  • Каталог ‘.Share’ (‘/mnt/sdcard/WhatsApp/.Share/’). Содержит копии файлов, которые были переданы другим пользователям WhatsApp.
  • Каталог ‘.trash’ (‘/mnt/sdcard/WhatsApp/.trash/’). Содержит удаленные файлы.
  • Каталог ‘Databases’ (‘/mnt/sdcard/WhatsApp/Databases/’). Содержит зашифрованные резервные копии. Они могут быть расшифрованы при наличии файла ‘key’, извлеченного из памяти анализируемого устройства.

    Файлы, находящиеся в подкаталоге ‘Databases’:

    image alt
  • Каталог ‘Media’ (‘/mnt/sdcard/WhatsApp/Media/’). Содержит подкаталоги ‘WallPaper’, ‘WhatsApp Audio’, ‘WhatsApp Images’, ‘WhatsApp Profile Photos’, ‘WhatsApp Video’, 'WhatsApp Voice Notes’, в которых находятся полученные и переданные мультимедиа файлы (графические файлы, видеофайлы, голосовые сообщения, фотографии, ассоциированные с профилем владельца аккаунта WhatsApp, обои).
  • Каталог ‘Profile Pictures’ (‘/mnt/sdcard/WhatsApp/Profile Pictures/’). Содержит графические файлы, ассоциированные с профилем владельца аккаунта WhatsApp.
  • Иногда на SD-карте может присутствовать каталог ‘files’ (‘/mnt/sdcard/WhatsApp/Files/’). В этом каталоге содержатся файлы, в которых хранятся настройки программы и предпочтения пользователя.

Особенности хранения данных в некоторых моделях мобильных устройств


В некоторых моделях мобильных устройств под управлением ОС Android возможно хранение артефактов WhatsApp в ином месте. Это обусловлено изменением пространства хранения данных приложений системным программным обеспечением мобильного устройства. Так, например, в мобильных устройствах Xiaomi есть функция создания второго рабочего пространства («SecondSpace»). При активации данной функции происходит изменение месторасположения данных. Так, если в обычном мобильном устройстве под управлением ОС Android данные пользователя хранятся в каталоге ‘/data/user/0/’ (что является ссылкой на привычные ‘/data/data/’), то во втором рабочем пространстве данные приложений хранятся в каталоге ‘/data/user/10/’. То есть, на примере месторасположения файла ‘wa.db’:

  • в обычном смартфоне под управлением ОС Android: /data/user/0/com.whatsapp/databases/wa.db’ (что эквивалентно ‘/data/data/com.whatsapp/databases/wa.db’);
  • во втором рабочем пространстве смартфона Xiaomi: ‘/data/user/10/com.whatsapp/databases/wa.db’.

Артефакты WhatsApp в iOS-устройстве


В отличие от Android ОС, в iOS данные приложения WhatsApp передаются в резервную копию (iTunes backup). Поэтому, извлечение данных этого приложения не требует извлечения файловой системы или создания физического дампа памяти исследуемого устройства. Большая часть значимой информации содержится в базе данных ‘ChatStorage.sqlite’, которая располагается по пути: ‘/private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/’ (в некоторых программах этот путь отображается как ‘AppDomainGroup-group.net.whatsapp.WhatsApp.shared’).

Структура ‘ChatStorage.sqlite’:

image alt

Наиболее информативными в базе данных ‘ChatStorage.sqlite’ являются таблицы ‘ZWAMESSAGE’ и ‘ZWAMEDIAITEM’.

Внешний вид таблицы ‘ZWAMESSAGE’:

image alt

Структура таблицы ‘ZWAMESSAGE’
Имя поля Значение
Z_PK порядковый номер записи (в SQL таблице)
Z_ENT идентификатор таблицы, имеет значение ‘9’
Z_OPT неизвестно, обычно содержит значения от ‘1’ до ‘6’
ZCHILDMESSAGESDELIVEREDCOUNT неизвестно, обычно содержит значение ‘0’
ZCHILDMESSAGESPLAYEDCOUNT неизвестно, обычно содержит значение ‘0’
ZCHILDMESSAGESREADCOUNT неизвестно, обычно содержит значение ‘0’
ZDATAITEMVERSION неизвестно, обычно содержит значение ‘3’, вероятно, является указателем текстового сообщения
ZDOCID неизвестно
ZENCRETRYCOUNT неизвестно, обычно содержит значение ‘0’
ZFILTEREDRECIPIENTCOUNT неизвестно, обычно содержит значения ‘0’, ‘2’, ‘256’
ZISFROMME направление сообщения: ‘0’ – входящее, ‘1’ — исходящее
ZMESSAGEERRORSTATUS статус передачи сообщения. Если сообщение отправлено/получено, то имеет значение ‘0’
ZMESSAGETYPE тип передаваемого сообщения
ZSORT неизвестно
ZSPOTLIGHSTATUS неизвестно
ZSTARRED неизвестно, не используется
ZCHATSESSION неизвестно
ZGROUPMEMBER неизвестно, не используется
ZLASTSESSION неизвестно
ZMEDIAITEM неизвестно
ZMESSAGEINFO неизвестно
ZPARENTMESSAGE неизвестно, не используется
ZMESSAGEDATE временная отметка в формате OS X Epoch Time
ZSENTDATE время отправки сообщения в формате OS X Epoch Time
ZFROMJID WhatsApp ID отправителя
ZMEDIASECTIONID содержит год и месяц отправки медиафайла
ZPHASH неизвестно, не используется
ZPUSHPAME имя контакта отправившего медиафайл в формате UTF-8
ZSTANZID уникальный идентификатор сообщения
ZTEXT текст сообщения
ZTOJID WhatsApp ID получателя
OFFSET смещение

Внешний вид таблицы ‘ZWAMEDIAITEM’:

image alt

Структура таблицы ‘ZWAMEDIAITEM’
Имя поля Значение
Z_PK порядковый номер записи (в SQL таблице)
Z_ENT идентификатор таблицы, имеет значение ‘8’
Z_OPT неизвестно, обычно содержит значения от ‘1’ до ‘3’.
ZCLOUDSTATUS содержит значение ‘4’ если файл загружен.
ZFILESIZE содержит длину файла (в байтах) для загруженных файлов
ZMEDIAORIGIN неизвестно, обычно имеет значение ‘0’
ZMOVIEDURATION продолжительность медиафайла, для pdf файлов может содержать число страниц документа
ZMESSAGE содержит порядковый номер (номер отличается от того, который указан в колонке ‘Z_PK’)
ZASPECTRATIO соотношение сторон, не используется, обычно имеет значение ‘0’
ZHACCURACY неизвестно, обычно имеет значение ‘0’
ZLATTITUDE ширина в пикселях
ZLONGTITUDE высота в пикселях
ZMEDIAURLDATE временная метка в формате OS X Epoch Time
ZAUTHORNAME автор (для документов, может содержать название файла)
ZCOLLECTIONNAME не используется
ZMEDIALOCALPATH имя файла (с указанием пути) в файловой системе устройства
ZMEDIAURL URL, по которому находился медиафайл. Если файл передавался от одного абонента другому, он был зашифрован, и его расширение будет указано как расширение передаваемого файла — .enc
ZTHUMBNAILLOCALPATH путь до миниатюры файла в файловой системе устройства
ZTITLE заголовок файла
ZVCARDNAME хеш медиафайла, при передаче файла в группу может содержать идентификатор отправителя
ZVCARDSTRING содержит информацию о типе передаваемого файла (например, image/jpeg), при передаче файла в группу может содержать идентификатор получателя
ZXMPPTHUMBPATH путь до миниатюры файла в файловой системе устройства
ZMEDIAKEY неизвестно, вероятно, содержит ключ для расшифровки зашифрованного файла.
ZMETADATA метаданные передаваемого сообщения
Offset смещение

Другими интересными таблицами базы данных ‘ChatStorage.sqlite’ являются:

  • ‘ZWAPROFILEPUSHNAME’. Соотносит WhatsApp ID с именем контакта;
  • ‘ZWAPROFILEPICTUREITEM’. Соотносит WhatsApp ID с аватаркой контакта;
  • ‘Z_PRIMARYKEY’. Таблица содержит общую информацию об этой базе данных, такую как общее число хранимых сообщений, общее число чатов и т.д.

Также при исследовании WhatsApp в мобильном устройстве под управлением iOS надо обращать внимание на следующие файлы:

  • Файл ‘BackedUpKeyValue.sqlite’. Содержит криптографические ключи и иные данные, которые необходимы для идентификации владельца аккаунта. Располагается по пути: /private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/.
  • Файл ‘ContactsV2.sqlite’. Содержит информацию о контактах пользователя, такую как ФИО, номер телефона, статус контакта (в виде текста), WhatsApp ID и т.д. Располагается по пути: /private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/.
  • Файл ‘consumer_version’. Содержит номер версии установленного приложения WhatsApp. Располагается по пути: /private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/.
  • Файл ‘current_wallpaper.jpg’. Содержит текущие обои фона программы WhatsApp. Располагается по пути: /private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/. В старых версиях приложения используется файл ‘wallpaper’, который располагается по пути: '/private/var/mobile/Applications/net.whatsapp.WhatsApp/Documents/'.
  • Файл ‘blockedcontacts.dat’. Содержит информацию о заблокированных контактах. Располагается по пути: /private/var/mobile/Applications/net.whatsapp.WhatsApp/Documents/.
  • Файл ‘pw.dat’. Содержит зашифрованный пароль. Располагается по пути: ‘/private/var/mobile/Applications/net.whatsapp.WhatsApp/Library/’.
  • Файл ‘net.whatsapp.WhatsApp.plist’ (или файл ‘group.net.whatsapp.WhatsApp.shared.plist’). Содержит информацию о профиле аккаунта WhatsApp. Файл располагается по пути: ‘/private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/Library/Preferences/’.

Содержимое файла ‘group.net.whatsapp.WhatsApp.shared.plist’
image alt

Также нужно обращать внимание на следующие каталоги:

  • Каталог ‘/private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/Media/Profile/’. Содержит миниатюры контактов, групп (файлы с расширением .thumb), аватары контактов, аватар владельца аккаунта WhatsApp (файл ‘Photo.jpg’).
  • Каталог ‘/private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/ Message/Media/’. Содержит мультимедиа-файлы и их миниатюры
  • Каталог ‘/private/var/mobile/Applications/net.whatsapp.WhatsApp/Documents/’. Содержит журнал работы программы (файл ‘calls.log’) и резервные копии журналов работы программы (файл ‘calls.backup.log’).
  • Каталог ‘/private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/stickers/’. Содержит стикеры (файлы в формате ‘.webp’).
  • Каталог ‘/private/var/mobile/Applications/net.whatsapp.WhatsApp/Library/Logs/’. Содержит журналы работы программы.

Артефакты WhatsApp в Windows


Артефакты WhatsApp в Windows можно найти в нескольких местах. Прежде всего, это каталоги, содержащие исполняемые и вспомогательные файлы программы (для Windows 8/10):
  • ‘C:\Program Files (x86)\WhatsApp\’
  • ‘C:\Users\%User profile%\ AppData\Local\WhatsApp\’
  • ‘C:\Users\%User profile%\ AppData\Local\VirtualStore\ Program Files (x86)\WhatsApp\’

В каталоге ‘C:\Users\%User profile%\ AppData\Local\WhatsApp\’ располагается лог-файл ‘SquirrelSetup.log’, в котором находится информация о проверке наличия обновлений и инсталляции программы.

В каталоге ‘C:\Users\%User profile%\ AppData\Roaming\WhatsApp\’ находится несколько подкаталогов:

image alt

Файл ‘main-process.log’ содержит информацию о работе программы WhatsApp.

Подкаталог ‘databases’ содержит файл ‘Databases.db’, но этот файл не содержит никакой информации о чатах или контактах.

Наиболее интересными с криминалистической точки зрения являются файлы, находящиеся в каталоге ‘Cache’. В основном это файлы с именами ‘f_*******’ (где * — число от 0 до 9), содержащие зашифрованные мультимедиа-файлы и документы, но среди них встречаются и незашифрованные файлы. Особый интерес представляют файлы ‘data_0’, ‘data_1’, ‘data_2’, ‘data_3’, находящиеся в этом же подкаталоге. Файлы ‘data_0’, ‘data_1’, ‘data_3’ содержат внешние ссылки на передаваемые зашифрованные мультимедиа-файлы и документы.

Пример информации, содержащейся в файле ‘data_1’
image alt

Также файл ‘data_3’ может содержать графические файлы.

Файл ‘data_2’ содержит аватары контактов (могут быть восстановлены поиском по заголовкам файлов).

Аватары, содержащиеся в файле ‘data_2’:

image alt

Таким образом, в памяти компьютера нельзя найти сами чаты, но можно найти:

  • мультимедиа-файлы;
  • документы, передававшиеся с помощью WhatsApp;
  • информацию о контактах владельца аккаунта.

Артефакты WhatsApp в MacOS


В MacOS можно найти типы артефактов WhatsApp, подобные тем, которые имеются в ОС Windows.

Файлы программы находятся каталогах:

  • ‘C:\Applications\WhatsApp.app\’
  • ‘C:\Applications\._WhatsApp.app\’
  • ‘C:\Users\%User profile%\Library\Preferences\’
  • ‘C:\Users\%User profile%\Library\Logs\WhatsApp\’
  • ‘C:\Users\%User profile%\Library\Saved Application State\WhatsApp.savedState\’
  • ‘C:\Users\%User profile%\Library\Application Scripts\’
  • ‘C:\Users\%User profile%\Library\Application Support\CloudDocs\’
  • ‘C:\Users\%User profile%\Library\Application Support\WhatsApp.ShipIt\’
  • ‘C:\Users\%User profile%\Library\Containers\com.rockysandstudio.app-for-whatsapp\’
  • ‘C:\Users\%User profile%\ Library\ Mobile Documents\ <текстовая переменная> WhatsApp\ Accounts’
    В этом каталоге находятся подкаталоги, имена которых представляют собой номера телефонов, ассоциированных с владельцем аккаунта WhatsApp.
  • ‘C:\Users\%User profile%\Library\Caches\WhatsApp.ShipIt\’
    В этом каталоге содержится информация об инсталляции программы.
  • ‘C:\Users\%User profile%\Pictures\Медиатека iPhoto.photolibrary\Masters\’, ‘C:\Users\%User profile%\Pictures\Медиатека iPhoto.photolibrary\Thumbnails\’
    В этих каталогах содержатся служебные файлы программы и, в том числе, фотографии и миниатюры контактов WhatsApp.
  • ‘C:\Users\%User profile%\Library\Caches\WhatsApp\’
    В этом каталоге находятся несколько SQLite-баз, которые используются для кэширования данных.
  • ‘C:\Users\%User profile%\Library\Application Support\WhatsApp\’
    В этом каталоге находится несколько подкаталогов:

    image alt

    В каталоге ‘C:\Users\%User profile%\Library\Application Support\WhatsApp\Cache\’ находятся файлы ‘data_0’, ‘data_1’, ‘data_2’, ‘data_3’ и файлы с именами ‘f_*******’ (где * — число от 0 до 9). Информация о том, какие сведения содержат эти файлы, описана в разделе «Артефакты WhatsApp в Windows».

    В каталоге ‘C:\Users\%User profile%\Library\Application Support\WhatsApp\IndexedDB\’ могут содержаться мультимедийные файлы (файлы не имеют расширений).

    Файл ‘main-process.log’ содержит информацию о работе программы WhatsApp.

Источники
  1. Forensic analysis of WhatsApp Messenger on Android smartphones, by Cosimo Anglano, 2014.
  2. Whatsapp Forensics: Eksplorasi sistem berkas dan basis data pada aplikasi Android dan iOS by Ahmad Pratama, 2014.



В следующих статьях этой серии:

Расшифровка зашифрованных баз WhatsApp
Статья, в которой будет приведена информация о том, каким образом происходит генерация ключа шифрования WhatsApp, и даны практические примеры, показывающие, как произвести расшифровку зашифрованных баз этого приложения.

Извлечение данных WhatsApp из облачных хранилищ
Статья, в которой мы расскажем, какие данные WhatsApp хранятся в облаках, и опишем методы извлечения этих данных из облачных хранилищ.

Извлечение данных WhatsApp: практические примеры
Статья, в которой будет пошагово описано, какими программами и как произвести извлечение данных WhatsApp из различных устройств.

Комментарии (5)


  1. zhovner
    18.04.2019 15:04
    +1

    Спасибо. Хотелось бы увидеть такой же рисеч про telegram.

    Саундтрек поста: youtu.be/H8xwrF4sKsg

    UPD
    В главе про macOS пути почему-то начинаются с C:\ и в целом не актуальные. Все файлы последней десктопной версии whatsapp для macOS лежат здесь

    /Users/loh/Library/Containers/desktop.WhatsApp
    Вот полный листинг с реальной системы: dumpz.org/b8RRqtmhNQaQ/text


  1. Andrew_Pinkerton
    18.04.2019 16:21
    -2

    https://github.com/andreas-mausch/whatsapp-viewer
    — этому проекту уже 5 лет, а вы тут такое откровение устроили.
    Тут вам не аудитория журнала Ксакер. )


    1. EditorGIB Автор
      18.04.2019 18:04

      Хакер — это святое, а мы тут вообще про другое.
      В этой статье мы описываем криминалистические артефакты WhatsApp, которые можно найти в разных операционных системах. А в проекте, на который вы ссылаетесь, приводится программа, которая расшифровывает ТОЛЬКО резервные копии WhatsApp и ТОЛЬКО под ОС Андроид.
      Мы про это тоже расскажем чуть позже и с нашей колокольни — в части «Расшифровка зашифрованных баз WhatsApp». Оставайтесь с нами.


  1. stalinets
    18.04.2019 20:27

    Наверное, самое то — использовать вацап в виртуальной андроид-машине типа BlueStacks и если что — просто снести папку)


    1. Tatikoma
      19.04.2019 12:52

      Точнее перезаписать нулями, не вводите в заблуждение.