Хотите узнать, какие типы криминалистических артефактов WhatsApp существуют в различных операционных системах и где именно они могут быть обнаружены — тогда вам сюда. Этой статьей специалист Лаборатории компьютерной криминалистики Group-IB Игорь Михайлов открывает серию публикаций о криминалистическом исследовании WhatsApp и о том, какие сведения можно получить при анализе устройства.
Сразу отметим, что в разных операционных системах хранятся различные типы артефактов WhatsApp, и если из одного устройства исследователь может извлечь определенные типы данных WhatsApp, это совсем не означает, что подобные типы данных можно извлечь из другого устройства. Например, если изымается системный блок под управлением ОС Windows, то на его дисках, вероятно, не будут обнаружены чаты WhatsApp (исключение составляют резервные копии iOS-устройств, которые могут быть обнаружены на этих же накопителях). При изъятии ноутбуков и мобильных устройств будут свои особенности. Поговорим об этом поподробнее.
Артефакты WhatsApp в Android-устройстве
Для того, чтобы извлечь артефакты WhatsApp из устройства под управлением ОС Android, исследователь должен иметь права суперпользователя (‘root’) на исследуемом устройстве или иметь возможность иным способом извлечь физический дамп памяти устройства, или его файловую систему (например, используя программные уязвимости конкретного мобильного устройства).
Файлы приложения располагаются в памяти телефона в разделе, в котором сохраняются данные пользователя. Как правило, этот раздел носит имя ‘userdata’. Подкаталоги и файлы программы располагаются по пути: ‘/data/data/com.whatsapp/’.
Основными файлами, которые содержат криминалистические артефакты WhatsApp в ОС Android являются базы данных ‘wa.db’ и ‘msgstore.db’.
В базе данных ‘wa.db’ содержится полный список контактов пользователя WhatsApp, включая номер телефона, отображаемое имя, временные метки и любую другую информацию, указанную при регистрации в WhatsApp. Файл ‘wa.db’ располагается по пути: ‘/data/data/com.whatsapp/databases/’ и имеет следующую структуру:
Наиболее интересными таблицами в базе данных ‘wa.db’ для исследователя являются:
- ‘wa_contacts’
Эта таблица содержит информацию о контактах: id контакта в WhatsApp, информацию о статусе, отображаемое имя пользователя, временные отметки и т.д.
Внешний вид таблицы:
Структура таблицыИмя поля Значение _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/' и имеет следующую структуру:
Наиболее интересными таблицами в файле ‘msgstore.db’ для исследователя являются:
- ‘sqlite_sequence’
Эта таблица содержит общую информацию об этой базе данных, например, общее число хранимых сообщений, общее число чатов и т.д.
Внешний вид таблицы:
- ‘message_fts_content’
Содержит текст переданных сообщений.
Внешний вид таблицы:
- ‘messages’
Эта таблица содержит такую информацию, как номер контакта, текст сообщения, статус сообщения, временные метки, сведения о переданных файлах, включенных в сообщения.
Внешний вид таблицы:
Структура таблицыИмя поля Значение _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’
Эта таблица содержит информацию о чатах.
Внешний вид таблицы:
Также при исследовании 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:
Фрагмент журнала
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
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’, где могут быть найдены следующие артефакты этой программы:
- Каталог ‘.Share’ (‘/mnt/sdcard/WhatsApp/.Share/’). Содержит копии файлов, которые были переданы другим пользователям WhatsApp.
- Каталог ‘.trash’ (‘/mnt/sdcard/WhatsApp/.trash/’). Содержит удаленные файлы.
- Каталог ‘Databases’ (‘/mnt/sdcard/WhatsApp/Databases/’). Содержит зашифрованные резервные копии. Они могут быть расшифрованы при наличии файла ‘key’, извлеченного из памяти анализируемого устройства.
Файлы, находящиеся в подкаталоге ‘Databases’:
- Каталог ‘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’:
Наиболее информативными в базе данных ‘ChatStorage.sqlite’ являются таблицы ‘ZWAMESSAGE’ и ‘ZWAMEDIAITEM’.
Внешний вид таблицы ‘ZWAMESSAGE’:
Структура таблицы ‘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’:
Структура таблицы ‘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’
Также нужно обращать внимание на следующие каталоги:
- Каталог ‘/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
- ‘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\’ находится несколько подкаталогов:
Файл ‘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’
Также файл ‘data_3’ может содержать графические файлы.
Файл ‘data_2’ содержит аватары контактов (могут быть восстановлены поиском по заголовкам файлов).
Аватары, содержащиеся в файле ‘data_2’:
Таким образом, в памяти компьютера нельзя найти сами чаты, но можно найти:
- мультимедиа-файлы;
- документы, передававшиеся с помощью 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\’
В этом каталоге находится несколько подкаталогов:
В каталоге ‘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.
Источники
- Forensic analysis of WhatsApp Messenger on Android smartphones, by Cosimo Anglano, 2014.
- Whatsapp Forensics: Eksplorasi sistem berkas dan basis data pada aplikasi Android dan iOS by Ahmad Pratama, 2014.
В следующих статьях этой серии:
Расшифровка зашифрованных баз WhatsApp
Статья, в которой будет приведена информация о том, каким образом происходит генерация ключа шифрования WhatsApp, и даны практические примеры, показывающие, как произвести расшифровку зашифрованных баз этого приложения.
Извлечение данных WhatsApp из облачных хранилищ
Статья, в которой мы расскажем, какие данные WhatsApp хранятся в облаках, и опишем методы извлечения этих данных из облачных хранилищ.
Извлечение данных WhatsApp: практические примеры
Статья, в которой будет пошагово описано, какими программами и как произвести извлечение данных WhatsApp из различных устройств.
Комментарии (5)
Andrew_Pinkerton
18.04.2019 16:21-2https://github.com/andreas-mausch/whatsapp-viewer
— этому проекту уже 5 лет, а вы тут такое откровение устроили.
Тут вам не аудитория журнала Ксакер. )EditorGIB Автор
18.04.2019 18:04Хакер — это святое, а мы тут вообще про другое.
В этой статье мы описываем криминалистические артефакты WhatsApp, которые можно найти в разных операционных системах. А в проекте, на который вы ссылаетесь, приводится программа, которая расшифровывает ТОЛЬКО резервные копии WhatsApp и ТОЛЬКО под ОС Андроид.
Мы про это тоже расскажем чуть позже и с нашей колокольни — в части «Расшифровка зашифрованных баз WhatsApp». Оставайтесь с нами.
zhovner
Спасибо. Хотелось бы увидеть такой же рисеч про telegram.
Вот полный листинг с реальной системы: dumpz.org/b8RRqtmhNQaQ/textСаундтрек поста: youtu.be/H8xwrF4sKsg
UPD
В главе про macOS пути почему-то начинаются с C:\ и в целом не актуальные. Все файлы последней десктопной версии whatsapp для macOS лежат здесь