
Chcesz dowiedzieć się, jakie typy artefaktów kryminalistycznych WhatsApp istnieją w różnych systemach operacyjnych i gdzie można je znaleźć — w takim razie dobrze trafiłeś. W tym artykule specjalista z Laboratorium Kryminalistyki Komputerowej Group-IB Igor Michajłow otwiera cykl publikacji dotyczących kryminalistycznych badań WhatsApp i informacji, które można uzyskać podczas analizy urządzenia.
Od razu zaznaczamy, że w różnych systemach operacyjnych przechowywane są różne typy artefaktów WhatsApp, a to, że badacz może wydobyć określone typy danych WhatsApp z jednego urządzenia, nie oznacza, że podobne dane można również wydobyć z innego urządzenia. Na przykład, jeśli jest zabezpieczona jednostka centralna działająca na systemie operacyjnym Windows, to na jej dyskach prawdopodobnie nie znajdą się czaty WhatsApp (wyjątkiem są kopie zapasowe urządzeń iOS, które mogą być odkryte na tych samych nośnikach). Przy konfiskacie laptopów i urządzeń mobilnych będą swoje szczególne cechy. O tym porozmawiajmy bardziej szczegółowo.
Artefakty WhatsApp w urządzeniu z systemem Android
Aby wydobyć artefakty WhatsApp z urządzenia działającego na systemie Android, badacz musi mieć prawa superużytkownika (‘root’) na badanym urządzeniu lub mieć możliwość w inny sposób wydobyć fizyczny zrzut pamięci urządzenia lub jego systemu plików (na przykład przy użyciu luk w oprogramowaniu konkretnego urządzenia mobilnego).
Pliki aplikacji znajdują się w pamięci telefonu w sekcji, w której przechowywane są dane użytkownika. Zazwyczaj ta sekcja nosi nazwę ‘userdata’. Podkatalogi i pliki programu znajdują się pod ścieżką: ‘/data/data/com.whatsapp/’.

Główne pliki, które zawierają kryminalistyczne artefakty WhatsApp w systemie Android to bazy danych ‘wa.db’ i ‘msgstore.db’.
W bazie danych ‘wa.db’ znajduje się pełna lista kontaktów użytkownika WhatsApp, w tym numer telefonu, imię wyświetlane, znaczniki czasowe i wszelkie inne informacje podane przy rejestracji w WhatsApp. Plik ‘wa.db’ znajduje się pod ścieżką: ‘/data/data/com.whatsapp/databases/’ i ma następującą strukturę:

Najciekawszymi tabelami w bazie danych ‘wa.db’ dla badacza są:
- ‘wa_contacts’
Ta tabela zawiera informacje o kontaktach: identyfikator kontaktu w WhatsApp, informacje o statusie, wyświetlana nazwa użytkownika, znaczniki czasu itp.Wygląd tabeli:

Struktura tabeliNazwa pola Wartość _id numer porządkowy rekordu (w tabeli SQL) jid WhatsApp ID kontaktu, zapisywany w formacie @s.whatsapp.net is_whatsapp_user zawiera ‘1’ jeśli kontakt to rzeczywisty użytkownik WhatsApp, ‘0’ w przeciwnym razie status zawiera tekst wyświetlany w statusie kontaktu status_timestamp zawiera znacznik czasu w formacie Unix Epoch Time (ms) number numer telefonu powiązany z kontaktem raw_contact_id numer porządkowy kontaktu display_name wyświetlana nazwa kontaktu phone_type typ telefonu phone_label etykieta powiązana z numerem kontaktu unseen_msg_count liczba wiadomości wysłanych do kontaktu, które nie zostały przeczytane przez odbiorcę photo_ts zawiera znacznik czasu w formacie Unix Epoch Time thumb_ts zawiera znacznik czasu w formacie Unix Epoch Time photo_id_timestamp zawiera znacznik czasu w formacie Unix Epoch Time (ms) given_name wartość pola odpowiada ‘display_name’ dla każdego kontaktu wa_name nazwa kontaktu w WhatsApp (wyświetlana nazwa z profilu kontaktu) sort_name nazwa kontaktu używana w operacjach sortowania nickname pseudonim kontaktu w WhatsApp (wyświetlany pseudonim z profilu kontaktu) company firma (wyświetlana firma z profilu kontaktu) title zalecenie (pan/pani; wyświetlane zalecenie z profilu kontaktu) offset offset - 'sqlite_sequence'
Ta tabela zawiera informacje o liczbie kontaktów; - 'android_metadata'
Ta tabela zawiera informacje o lokalizacji językowej WhatsApp.
W bazie danych ‘msgstore.db’ zawiera informacje o przesyłanych wiadomościach, takie jak numer kontaktu, tekst wiadomości, status wiadomości, znaczniki czasu, szczegóły przesyłanych plików dołączonych do wiadomości itp. Plik ‘msgstore.db’ znajduje się pod ścieżką: ‘/data/data/com.whatsapp/databases/’ i ma następującą strukturę:

Najciekawszymi tabelami w pliku ‘msgstore.db’ dla badacza są:
- 'sqlite_sequence'
Ta tabela zawiera ogólne informacje o tej bazie danych, takie jak całkowita liczba przechowywanych wiadomości, całkowita liczba czatów itp.Wygląd tabeli:

- 'message_fts_content'
Zawiera tekst przesyłanych wiadomości.Wygląd tabeli:

- 'messages'
Ta tabela zawiera takie informacje jak numer kontaktu, tekst wiadomości, status wiadomości, znaczniki czasu, szczegóły przesyłanych plików dołączonych do wiadomości.Wygląd tabeli:

Struktura tabeliNazwa pola Wartość _id numer porządkowy rekordu (w tabeli SQL) key_remote_jid WhatsApp ID partnera komunikacyjnego key_from_me kierunek wiadomości: ‘0’ – przychodząca, ‘1’ – wychodząca key_id unikalny identyfikator wiadomości status status wiadomości: ‘0’ – dostarczono, ‘4’ – oczekuje na serwerze, ‘5’ – dostarczono na miejsce, ‘6’ – wiadomość kontrolna, ‘13’ – wiadomość otworzona przez odbiorcę (przeczytana) need_push ma wartość ‘2’, jeśli jest to wiadomość rozsyłana, w przeciwnym razie zawiera ‘0’ data treść wiadomości (gdy parametr ‘media_wa_type’ ma wartość ‘0’) timestamp zawiera znacznik czasu w formacie Unix Epoch Time (ms), wartość pobierana jest z zegara urządzenia media_url zawiera URL przesyłanego pliku (gdy parametr ‘media_wa_type’ ma wartość ‘1’, ‘2’, ‘3’) media_mime_type typ MIME przesyłanego pliku (gdy parametr ‘media_wa_type’ ma wartość ‘1’, ‘2’, ‘3’) media_wa_type typ wiadomości: ‘0’ – tekst, ‘1’ – plik graficzny, ‘2’ – plik audio, ‘3’ – plik wideo, ‘4’ – karta kontaktowa, ‘5’ – dane geograficzne media_size rozmiar przesyłanego pliku (gdy parametr ‘media_wa_type’ ma wartość ‘1’, ‘2’, ‘3’) media_name nazwa przesyłanego pliku (gdy parametr ‘media_wa_type’ ma wartość ‘1’, ‘2’, ‘3’) media_caption Zawiera słowa ‘audio’, ‘video’ dla odpowiednich wartości parametru ‘media_wa_type’ (gdy parametr ‘media_wa_type’ ma wartość ‘1’, ‘3’) media_hash zakodowany w formacie base64 hasz przesyłanego pliku, wyliczony według algorytmu HAS-256 (gdy parametr ‘media_wa_type’ ma wartość ‘1’, ‘2’, ‘3’) media_duration czas trwania w sekundach dla pliku multimedialnego (gdy parametr ‘media_wa_type’ ma wartość ‘1’, ‘2’, ‘3’) origin ma wartość ‘2’, jeśli jest to wiadomość rozsyłana, w przeciwnym razie zawiera ‘0’ latitude dane geograficzne: szerokość (gdy parametr ‘media_wa_type’ ma wartość ‘5’) longitude dane geograficzne: długość (gdy parametr ‘media_wa_type’ ma wartość ‘5’) thumb_image informacje pomocnicze remote_recource ID nadawcy (tylko dla czatów grupowych) received_timestamp czas odbioru, zawiera znacznik czasu w formacie Unix Epoch Time (ms), wartość pobierana jest z zegara urządzenia (gdy parametr ‘key_from_me’ ma wartość ‘0’, ‘-1’ lub inną wartość) send_timestamp nieużywane, zazwyczaj ma wartość ‘-1’ receipt_server_timestamp czas odbioru przez centralny serwerem, zawiera znacznik czasu w formacie Unix Epoch Time (ms), wartość pobierana jest z zegara urządzenia (gdy parametr ‘key_from_me’ ma wartość ‘1’, ‘-1’ lub inną wartość receipt_device_timestamp czas odbioru wiadomości przez innego abonenta, zawiera znacznik czasu w formacie Unix Epoch Time (ms), wartość pobierana jest z zegara urządzenia (gdy parametr ‘key_from_me’ ma wartość ‘1’, ‘-1’ lub inną wartość read_device_timestamp czas otwarcia (odczytu) wiadomości, zawiera znacznik czasu w formacie Unix Epoch Time (ms), wartość pobierana jest z zegara urządzenia played_device_timestamp czas odtwarzania wiadomości, zawiera znacznik czasu w formacie Unix Epoch Time (ms), wartość pobierana jest z zegara urządzenia raw_data miniatura przesyłanego pliku (gdy parametr 'media_wa_type' wynosi '1' lub '3') recipient_count liczba odbiorców (dla wiadomości masowych) participant_hash używane podczas przesyłania wiadomości z danymi geograficznymi starred nie używane quoted_row_id nieznane, zazwyczaj zawiera wartość '0' mentioned_jids nie używane multicast_id nie używane offset offset Niniejsza lista pól nie jest wyczerpująca. Dla różnych wersji WhatsApp część pól może być obecna lub nieobecna. Dodatkowo mogą występować pola 'media_enc_hash', 'edit_version', 'payment_transaction_id' itd.
- 'messages_thumbnails'
Ta tabela zawiera informacje o przesłanych obrazach i znacznikach czasu. W kolumnie 'timestamp' czas podany jest w formacie Unix Epoch Time (ms). - 'chat_list'
Ta tabela zawiera informacje o czatach.Wygląd tabeli:

Podczas badania WhatsApp na urządzeniu mobilnym z systemem Android należy również zwrócić uwagę na następujące pliki:
- Plik 'msgstore.db.cryptXX' (gdzie XX to jedna lub dwie cyfry od 0 do 12, np. msgstore.db.crypt12). Zawiera zaszyfrowaną kopię zapasową wiadomości WhatsApp (kopię zapasową pliku msgstore.db). Plik (lub pliki) 'msgstore.db.cryptXX' znajduje się pod ścieżką: '/data/media/0/WhatsApp/Databases/' (wirtualna karta SD), '/mnt/sdcard/WhatsApp/Databases/' (fizyczna karta SD)'.
- Plik 'key'. Zawiera klucz kryptograficzny. Znajduje się pod ścieżką: '/data/data/com.whatsapp/files/'. Używany do deszyfrowania zaszyfrowanych kopii zapasowych WhatsApp.
- Plik 'com.whatsapp_preferences.xml'. Zawiera informacje o profilu konta WhatsApp. Plik znajduje się pod ścieżką: '/data/data/com.whatsapp/shared_prefs/'.
Fragment zawartości pliku
… 9123456789 (numer telefonu, powiązany z kontem WhatsApp) … 2.17.395 (wersja WhatsApp) … Cześć! Używam WhatsApp. (wiadomość wyświetlana w statusie konta) … Alex (imię właściciela konta) … - Plik 'registration.RegisterPhone.xml'. Zawiera informacje o numerze telefonu, powiązanym z kontem WhatsApp. Plik znajduje się pod ścieżką: '/data/data/com.whatsapp/shared_prefs/'.
Zawartość pliku
- Plik ‘axolotl.db’. Zawiera klucze kryptograficzne oraz inne dane niezbędne do identyfikacji właściciela konta. Znajduje się pod ścieżką: ‘/data/data/com.whatsapp/databases/’.
- Plik ‘chatsettings.db’. Zawiera informacje o konfiguracji aplikacji.
- Plik ‘wa.db’. Zawiera szczegóły kontaktów. Jest to bardzo interesująca baza danych (z punktu widzenia kryminalistyki) i informacyjna. Można w niej znaleźć szczegółowe informacje o usuniętych kontaktach.
Należy również zwrócić uwagę na następujące katalogi:
- Katalog '/data/media/0/WhatsApp/Media/WhatsApp Images/'. Zawiera przekazywane pliki graficzne.
- Katalog '/data/media/0/WhatsApp/Media/WhatsApp Voice Notes/'. Zawiera wiadomości głosowe w plikach formatu .OPUS.
- Katalog '/data/data/com.whatsapp/cache/Profile Pictures/'. Zawiera pliki graficzne – obrazy kontaktów.
- Katalog '/data/data/com.whatsapp/files/Avatars/'. Zawiera pliki graficzne – miniatury obrazów kontaktów. Pliki te mają rozszerzenie ‘.j’, ale w rzeczywistości są plikami graficznymi formatu JPEG (JPG).
- Katalog '/data/data/com.whatsapp/files/Avatars/'. Zawiera pliki graficzne – obraz i miniaturę obrazu ustalonego jako awatar przez właściciela konta.
- Katalog '/data/data/com.whatsapp/files/Logs/'. Zawiera dzienniki działania programu (plik ‘whatsapp.log’) oraz kopie zapasowe dzienników (plików o nazwach z formatem whatsapp-gggg-mm-dd.1.log.gz).
Pliki dzienników WhatsApp:

Fragment dziennika2017-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] plik hasła brak lub nieczytelny
2017-01-10 09:37:09.782 LL_I D [1:main] statystyki Wiadomości tekstowe: 59 wysłanych, 82 odebranych / Wiadomości multimedialne: 1 wysłana (0 bajtów), 0 odebranych (9850158 bajtów) / Wiadomości offline: 81 odebranych (19522 ms średnie opóźnienie) / Usługa wiadomości: 116075 bajtów wysłanych, 211729 bajtów odebranych / Połączenia VoIP: 1 połączenie wychodzące, 0 przychodzących, 2492 bajtów wysłanych, 1530 bajtów odebranych / Google Drive: 0 bajtów wysłanych, 0 bajtów odebranych / Roaming: 1524 bajty wysłane, 1826 odebrane / Całkowite dane: 118567 bajtów wysłanych, 10063417 odebranych
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
- Katalog '/data/media/0/WhatsApp/Media/WhatsApp Audio/'. Zawiera odebrane pliki dźwiękowe.
- Katalog '/data/media/0/WhatsApp/Media/WhatsApp Audio/Sent/'. Zawiera wysłane pliki dźwiękowe.
- Katalog '/data/media/0/WhatsApp/Media/WhatsApp Images/'. Zawiera odebrane pliki graficzne.
- Katalog '/data/media/0/WhatsApp/Media/WhatsApp Images/Sent/'. Zawiera wysłane pliki graficzne.
- Katalog '/data/media/0/WhatsApp/Media/WhatsApp Video/'. Zawiera odebrane pliki wideo.
- Katalog '/data/media/0/WhatsApp/Media/WhatsApp Video/Sent/'. Zawiera wysłane pliki wideo.
- Katalog '/data/media/0/WhatsApp/Media/WhatsApp Profile Photos/'. Zawiera pliki graficzne powiązane z właścicielem konta WhatsApp.
- Aby zaoszczędzić miejsce na pamięci smartfona z Androidem, część danych WhatsApp może być przechowywana na karcie SD. Na karcie SD, w katalogu głównym, znajduje się katalog 'WhatsApp', w którym można znaleźć następujące artefakty tego programu:

- Katalog '.Share' ('/mnt/sdcard/WhatsApp/.Share/'). Zawiera kopie plików, które zostały przesłane innym użytkownikom WhatsApp.
- Katalog '.trash' ('/mnt/sdcard/WhatsApp/.trash/'). Zawiera usunięte pliki.
- Katalog 'Databases' ('/mnt/sdcard/WhatsApp/Databases/'). Zawiera zaszyfrowane kopie zapasowe. Mogą być odszyfrowane przy użyciu pliku 'key', wyodrębnionego z pamięci analizowanego urządzenia.
Pliki znajdujące się w podkatalogu 'Databases':

- Katalog ‘Media’ (‘/mnt/sdcard/WhatsApp/Media/’). Zawiera podkatalogi ‘WallPaper’, ‘WhatsApp Audio’, ‘WhatsApp Images’, ‘WhatsApp Profile Photos’, ‘WhatsApp Video’, ‘WhatsApp Voice Notes’, w których znajdują się odebrane i wysłane pliki multimedialne (pliki graficzne, wideo, wiadomości głosowe, zdjęcia powiązane z profilem właściciela konta WhatsApp, tapety).
- Katalog ‘Profile Pictures’ (‘/mnt/sdcard/WhatsApp/Profile Pictures/’). Zawiera pliki graficzne powiązane z profilem właściciela konta WhatsApp.
- Czasami na karcie SD może znajdować się katalog ‘files’ (‘/mnt/sdcard/WhatsApp/Files/’). W tym katalogu znajdują się pliki, w których przechowywane są ustawienia programu i preferencje użytkownika.
Cechy przechowywania danych w niektórych modelach urządzeń mobilnych
W niektórych modelach urządzeń mobilnych działających na systemie Android możliwe jest przechowywanie artefaktów WhatsApp w innym miejscu. Jest to spowodowane zmianą przestrzeni przechowywania danych aplikacji przez systemowe oprogramowanie urządzenia mobilnego. Na przykład, w urządzeniach mobilnych Xiaomi dostępna jest funkcja tworzenia drugiej przestrzeni roboczej („SecondSpace”). Aktywacja tej funkcji zmienia lokalizację danych. Tak więc, w standardowym urządzeniu mobilnym działającym na systemie Android dane użytkownika przechowywane są w katalogu ‘/data/user/0/’ (co jest odniesieniem do zwykłych ‘/data/data/’), w drugiej przestrzeni roboczej dane aplikacji przechowywane są w katalogu ‘/data/user/10/’. To znaczy, na przykładzie lokalizacji pliku ‘wa.db’:
- w standardowym smartfonie działającym na systemie Android: /data/user/0/com.whatsapp/databases/wa.db’ (co odpowiada ‘/data/data/com.whatsapp/databases/wa.db’);
- w drugiej przestrzeni roboczej smartfona Xiaomi: ‘/data/user/10/com.whatsapp/databases/wa.db’.
Artefakty WhatsApp w urządzeniu iOS
W przeciwieństwie do systemu Android, w iOS dane aplikacji WhatsApp są przesyłane do kopii zapasowej (backupu iTunes). Dlatego wydobycie danych tej aplikacji nie wymaga pobierania systemu plików ani tworzenia fizycznej kopii pamięci badającego urządzenia. Większość istotnych informacji znajduje się w bazie danych ‘ChatStorage.sqlite’, która znajduje się pod ścieżką: ‘/private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/’ (w niektórych programach ta ścieżka jest wyświetlana jako ‘AppDomainGroup-group.net.whatsapp.WhatsApp.shared’).
Struktura ‘ChatStorage.sqlite’:

Najbardziej informacyjne w bazie danych ‘ChatStorage.sqlite’ są tabele ‘ZWAMESSAGE’ i ‘ZWAMEDIAITEM’.
Wygląd tabeli ‘ZWAMESSAGE’:

Struktura tabeli 'ZWAMESSAGE'
| Nazwa pola | Wartość |
|---|---|
| Z_PK | numer porządkowy rekordu (w tabeli SQL) |
| Z_ENT | identyfikator tabeli, ma wartość '9' |
| Z_OPT | nieznane, zazwyczaj zawiera wartości od '1' do '6' |
| ZCHILDMESSAGESDELIVEREDCOUNT | nieznane, zazwyczaj zawiera wartość '0' |
| ZCHILDMESSAGESPLAYEDCOUNT | nieznane, zazwyczaj zawiera wartość '0' |
| ZCHILDMESSAGESREADCOUNT | nieznane, zazwyczaj zawiera wartość '0' |
| ZDATAITEMVERSION | nieznane, zazwyczaj zawiera wartość '3', prawdopodobnie wskazuje na treść wiadomości |
| ZDOCID | nieznane |
| ZENCRETRYCOUNT | nieznane, zazwyczaj zawiera wartość '0' |
| ZFILTEREDRECIPIENTCOUNT | nieznane, zazwyczaj zawiera wartości '0', '2', '256' |
| ZISFROMME | kierunek wiadomości: ‘0’ – przychodząca, ‘1’ – wychodząca |
| ZMESSAGEERRORSTATUS | status przesyłania wiadomości. Jeśli wiadomość została wysłana/odebrana, ma wartość '0' |
| ZMESSAGETYPE | typ przesyłanej wiadomości |
| ZSORT | nieznane |
| ZSPOTLIGHSTATUS | nieznane |
| ZSTARRED | nieznane, nieużywane |
| ZCHATSESSION | nieznane |
| ZGROUPMEMBER | nieznane, nieużywane |
| ZLASTSESSION | nieznane |
| ZMEDIAITEM | nieznane |
| ZMESSAGEINFO | nieznane |
| ZPARENTMESSAGE | nieznane, nieużywane |
| ZMESSAGEDATE | znacznik czasu w formacie OS X Epoch Time |
| ZSENTDATE | czas wysłania wiadomości w formacie OS X Epoch Time |
| ZFROMJID | WhatsApp ID nadawcy |
| ZMEDIASECTIONID | zawiera rok i miesiąc wysłania pliku multimedialnego |
| ZPHASH | nieznane, nieużywane |
| ZPUSHPAME | nazwa kontaktu nadawcy pliku multimedialnego w formacie UTF-8 |
| ZSTANZID | unikalny identyfikator wiadomości |
| ZTEXT | treść wiadomości |
| ZTOJID | WhatsApp ID odbiorcy |
| OFFSET | offset |
Wygląd tabeli ‘ZWAMEDIAITEM’:

Struktura tabeli 'ZWAMEDIAITEM'
| Nazwa pola | Wartość |
|---|---|
| Z_PK | numer porządkowy rekordu (w tabeli SQL) |
| Z_ENT | identyfikator tabeli, ma wartość '8' |
| Z_OPT | nieznane, zazwyczaj zawiera wartości od '1' do '3'. |
| ZCLOUDSTATUS | zawiera wartość '4' jeśli plik został przesłany. |
| ZFILESIZE | zawiera długość pliku (w bajtach) dla przesyłanych plików |
| ZMEDIAORIGIN | nieznane, zazwyczaj ma wartość '0' |
| ZMOVIEDURATION | czas trwania pliku multimedialnego, dla plików pdf może zawierać liczbę stron dokumentu |
| ZMESSAGE | zawiera numer porządkowy (numer różni się od tego, który jest podany w kolumnie 'Z_PK') |
| ZASPECTRATIO | proporcje, nieużywane, zazwyczaj ma wartość '0' |
| ZHACCURACY | nieznane, zazwyczaj ma wartość '0' |
| ZLATTITUDE | szerokość w pikselach |
| ZLONGTITUDE | wysokość w pikselach |
| ZMEDIAURLDATE | znacznik czasu w formacie OS X Epoch Time |
| ZAUTHORNAME | autor (dla dokumentów, może zawierać nazwę pliku) |
| ZCOLLECTIONNAME | nie używane |
| ZMEDIALOCALPATH | nazwisko pliku (z podaniem ścieżki) w systemie plików urządzenia |
| ZMEDIAURL | URL, pod którym znajdował się plik multimedialny. Jeśli plik był przesyłany między abonentami, został zaszyfrowany, a jego rozszerzenie będzie wskazywać na rozszerzenie przesyłanego pliku — .enc |
| ZTHUMBNAILLOCALPATH | ścieżka do miniatury pliku w systemie plików urządzenia |
| ZTITLE | tytuł pliku |
| ZVCARDNAME | hash pliku multimedialnego, przy przesyłaniu pliku do grupy może zawierać identyfikator nadawcy |
| ZVCARDSTRING | zawiera informacje o typie przesyłanego pliku (na przykład, image/jpeg), przy przesyłaniu pliku do grupy może zawierać identyfikator odbiorcy |
| ZXMPPTHUMBPATH | ścieżka do miniatury pliku w systemie plików urządzenia |
| ZMEDIAKEY | nieznane, prawdopodobnie zawiera klucz do odszyfrowania zaszyfrowanego pliku. |
| ZMETADATA | metadane przesyłanej wiadomości |
| Offset | offset |
Inne interesujące tabele bazy danych ‘ChatStorage.sqlite’ to:
- ‘ZWAPROFILEPUSHNAME’. Łączy ID WhatsApp z nazwą kontaktu;
- ‘ZWAPROFILEPICTUREITEM’. Łączy ID WhatsApp z awatarem kontaktu;
- ‘Z_PRIMARYKEY’. Tabela zawiera ogólne informacje o tej bazie danych, takie jak całkowita liczba przechowywanych wiadomości, całkowita liczba czatów itp.
Podczas badania WhatsApp w urządzeniu mobilnym działającym na iOS należy zwrócić uwagę na następujące pliki:
- Plik ‘BackedUpKeyValue.sqlite’. Zawiera klucze kryptograficzne oraz inne dane niezbędne do identyfikacji właściciela konta. Znajduje się pod ścieżką: /private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/.
- Plik ‘ContactsV2.sqlite’. Zawiera informacje o kontaktach użytkownika, takie jak imię i nazwisko, numer telefonu, status kontaktu (w formie tekstu), ID WhatsApp itp. Znajduje się w ścieżce: /private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/.
- Plik ‘consumer_version’. Zawiera numer wersji zainstalowanej aplikacji WhatsApp. Znajduje się w ścieżce: /private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/.
- Plik ‘current_wallpaper.jpg’. Zawiera aktualne tło aplikacji WhatsApp. Znajduje się w ścieżce: /private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/. W starszych wersjach aplikacji używany jest plik ‘wallpaper’, który znajduje się w ścieżce: ‘/private/var/mobile/Applications/net.whatsapp.WhatsApp/Documents/’.
- Plik ‘blockedcontacts.dat’. Zawiera informacje o zablokowanych kontaktach. Znajduje się w ścieżce: /private/var/mobile/Applications/net.whatsapp.WhatsApp/Documents/.
- Plik ‘pw.dat’. Zawiera zaszyfrowane hasło. Znajduje się w ścieżce: ‘/private/var/mobile/Applications/net.whatsapp.WhatsApp/Library/’.
- Plik ‘net.whatsapp.WhatsApp.plist’ (lub plik ‘group.net.whatsapp.WhatsApp.shared.plist’). Zawiera informacje o profilu konta WhatsApp. Plik znajduje się w ścieżce: ‘/private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/Library/Preferences/’.
Zawartość pliku ‘group.net.whatsapp.WhatsApp.shared.plist’
Należy również zwrócić uwagę na następujące katalogi:
- Katalog ‘/private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/Media/Profile/’. Zawiera miniatury kontaktów, grup (pliki z rozszerzeniem .thumb), awatary kontaktów, awatar właściciela konta WhatsApp (plik ‘Photo.jpg’).
- Katalog ‘/private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/Message/Media/’. Zawiera pliki multimedialne i ich miniatury
- Katalog ‘/private/var/mobile/Applications/net.whatsapp.WhatsApp/Documents/’. Zawiera dziennik pracy programu (plik ‘calls.log’) oraz kopie zapasowe dzienników pracy programu (plik ‘calls.backup.log’).
- Katalog ‘/private/var/mobile/Applications/group.net.whatsapp.WhatsApp.shared/stickers/’. Zawiera naklejki (pliki w formacie ‘.webp’).
- Katalog ‘/private/var/mobile/Applications/net.whatsapp.WhatsApp/Library/Logs/’. Zawiera dzienniki pracy programu.
Artefakty WhatsApp w systemie Windows
Artefakty WhatsApp w systemie Windows można znaleźć w kilku miejscach. Przede wszystkim są to katalogi zawierające pliki wykonywalne i pomocnicze programu (dla Windows 8/10):
- ‘C:Program Files (x86)WhatsApp’
- ‘C:Users%User profile% AppDataLocalWhatsApp’
- ‘C:Users%User profile% AppDataLocalVirtualStore Program Files (x86)WhatsApp’
W katalogu ‘C:Users%User profile% AppDataLocalWhatsApp’ znajduje się plik dziennika ‘SquirrelSetup.log’, w którym zawarte są informacje o sprawdzaniu dostępności aktualizacji i instalacji programu.
W katalogu ‘C:Users%User profile% AppDataRoamingWhatsApp’ znajduje się kilka podkatalogów:
Plik ‘main-process.log’ zawiera informacje o działaniu programu WhatsApp.
Podkatalog ‘databases’ zawiera plik ‘Databases.db’, ale ten plik nie zawiera żadnych informacji o czatach ani kontaktach.
Najciekawsze z kryminalistycznego punktu widzenia są pliki znajdujące się w katalogu ‘Cache’. W głównej mierze są to pliki o nazwach ‘f_*******’ (gdzie * — liczba od 0 do 9), zawierające zaszyfrowane pliki multimedialne i dokumenty, ale wśród nich znajdują się też pliki niezabezpieczone. Szczególne zainteresowanie budzą pliki ‘data_0’, ‘data_1’, ‘data_2’, ‘data_3’, znajdujące się w tym samym podkatalogu. Pliki ‘data_0’, ‘data_1’, ‘data_3’ zawierają zewnętrzne linki do przesyłanych zaszyfrowanych plików multimedialnych i dokumentów.
Przykład informacji zawartej w pliku ‘data_1’
Może również zawierać pliki graficzne. ‘data_3’ zawiera awatary kontaktów (można je przywrócić poprzez przeszukiwanie nagłówków plików).
Plik ‘data_2’ Awatary zawarte w pliku
W ten sposób, w pamięci komputera nie można znaleźć samych czatów, ale można znaleźć: ‘data_2’:

pliki multimedialne;
- dokumenty przesyłane za pomocą WhatsApp;
- informacje o kontaktach właściciela konta.
- Artefakty WhatsApp w MacOS
W MacOS można znaleźć rodzaje artefaktów WhatsApp podobne do tych, które istnieją w systemie Windows.
Pliki programu znajdują się w katalogach:
‘C:ApplicationsWhatsApp.app’
- ‘C:Applications._WhatsApp.app’
- ‘C:Users%User profile%LibraryPreferences’
- ‘C:Users%User profile%LibraryLogsWhatsApp’
- ‘C:Users%User profile%LibrarySaved Application StateWhatsApp.savedState’
- ‘C:Users%User profile%LibraryApplication Scripts’
- ‘C:Users%User profile%LibraryApplication SupportCloudDocs’
- ‘C:Users%User profile%LibraryApplication SupportWhatsApp.ShipIt’
- ‘C:Users%User profile%LibraryContainerscom.rockysandstudio.app-for-whatsapp’
- ‘C:Users%User profile% Library Mobile Documents <text variable> WhatsApp Accounts’
- W tym katalogu znajdują się podkatalogi, których nazwy stanowią numery telefonów powiązane z właścicielem konta WhatsApp.
‘C:Users%User profile%LibraryCachesWhatsApp.ShipIt’ - W tym katalogu znajdują się informacje o instalacji programu.
‘C:Users%User profile%PicturesBiblioteka zdjęć iPhoto.photolibraryMasters’ - ‘C:Users%User profile%PicturesBiblioteka zdjęć iPhoto.photolibraryThumbnails’, 'C:Users%User profile%PicturesMediateka iPhoto.photolibraryThumbnails'
W tych katalogach znajdują się pliki systemowe programu, w tym zdjęcia i miniatury kontaktów WhatsApp. - ‘C:Users%User profile%LibraryCachesWhatsApp’
W tym katalogu znajdują się różne bazy SQLite, które są używane do buforowania danych. - ‘C:Users%User profile%LibraryApplication SupportWhatsApp’
W tym katalogu znajduje się kilka podkatalogów:
W katalogu ‘C:Users%User profile%LibraryApplication SupportWhatsAppCache’ znajdują się pliki ‘data_0’, ‘data_1’, ‘data_2’, ‘data_3’ i pliki z nazwami ‘f_*******’ (gdzie * to liczba od 0 do 9). Informacje dotyczące zawartości tych plików opisano w sekcji „Artykuły WhatsApp w Windows”.W katalogu ‘C:Users%User profile%LibraryApplication SupportWhatsAppIndexedDB’ mogą zawierać pliki multimedialne (pliki nie mają rozszerzeń).
Plik ‘main-process.log’ zawiera informacje o działaniu programu WhatsApp.
Źródła
- Analiza kryptograficzna WhatsApp Messenger na smartfonach z systemem Android, Cosimo Anglano, 2014.
- Kryminalistyka WhatsApp: Eksploracja systemu plików i baz danych w aplikacji na Android i iOS autorstwa Ahmad Pratama, 2014.
W kolejnych artykułach tej serii:
Deszyfrowanie zaszyfrowanych baz WhatsAppArtykuł, w którym przedstawimy informacje na temat generowania klucza szyfrowania WhatsApp oraz praktyczne przykłady pokazujące, jak przeprowadzić deszyfrowanie zaszyfrowanych baz tego programu.
Ekstrakcja danych WhatsApp z chmurArtykuł, w którym wyjaśnimy, jakie dane WhatsApp są przechowywane w chmurach, oraz opiszemy metody ich ekstrakcji z chmur.
Ekstrakcja danych WhatsApp: przykłady praktyczneArtykuł, w którym krok po kroku opisujemy, jakimi programami i jak przeprowadzić ekstrakcję danych WhatsApp z różnych urządzeń.
Źródło: habr.com








