Messaging and appsCoreMessaging

WhatsApp for iOS messages (ChatStorage.sqlite)

WhatsApp iOS Core Data store: ZWAMESSAGE rows with Cocoa dates, ZWACHATSESSION chats, ZWAMEDIAITEM paths, plus ContactsV2 and call stores.

01Location

  • /private/var/mobile/Containers/Shared/AppGroup/<UUID>/ChatStorage.sqlite (+ -wal, -shm)
  • /private/var/mobile/Containers/Shared/AppGroup/<UUID>/ContactsV2.sqlite
  • /private/var/mobile/Containers/Shared/AppGroup/<UUID>/CallHistory.sqlite
  • /private/var/mobile/Containers/Shared/AppGroup/<UUID>/Message/Media/
  • Backup domain: AppDomainGroup-group.net.whatsapp.WhatsApp.shared

02Questions it answers

  • Who exchanged messages with the account and when?
  • Which media and locations were attached to messages?
  • Which WhatsApp calls took place, with whom and for how long?

03Format and versions

FormatCore Data SQLite. ZWAMESSAGE (ZMESSAGEDATE, ZISFROMME, ZFROMJID, ZTOJID, ZTEXT, ZMESSAGETYPE, ZSTARRED, ZCHATSESSION, ZMEDIAITEM); ZWACHATSESSION (ZCONTACTJID, ZPARTNERNAME); ZWAMEDIAITEM (ZMEDIALOCALPATH, ZXMPPTHUMBPATH, ZMETADATA). ContactsV2.sqlite holds ZWAADDRESSBOOKCONTACT; CallHistory.sqlite holds ZWACDCALLEVENT and participants.
Applies toiLEAPP test images range from iOS 12.4 to iOS 18.7 with WhatsApp builds up to 26.x; some call columns are absent on older stores.

04Key fields

FieldWhat it tells you
ZWAMESSAGE.ZISFROMME1 outgoing; other values treated as incoming by iLEAPP.
ZWAMESSAGE.ZFROMJID / ZTOJIDSender and recipient JIDs as stored (may be NULL).
ZWAMESSAGE.ZTEXTMessage text.
ZWACHATSESSION.ZCONTACTJID / ZPARTNERNAMEChat JID and display name of the chat partner or group.
ZWAMEDIAITEM.ZMEDIALOCALPATHRelative path of the media file under Message/Media.
ZWACDCALLEVENTCall events with ZDATE, ZDURATION, ZOUTCOME (labels unconfirmed) and byte counts.

05Timestamps

FieldEncodingNote
ZWAMESSAGE.ZMESSAGEDATEApple Cocoa time (seconds since 2001-01-01 UTC)Message time; add 978,307,200 for Unix time.
ZWACDCALLEVENT.ZDATE / ZDURATIONApple Cocoa time / secondsCall end is computed from start + duration.

Decode raw values with the Timestamp decoder and convert local wall-clock times with the Local time to UTC.

06Examination workflow

  1. Locate the WhatsApp shared App Group container and collect all three databases with WAL files and media.
  2. Join ZWAMESSAGE to ZWACHATSESSION and ZWAMEDIAITEM.
  3. Attach ContactsV2 names as enrichment with left joins.
  4. Convert Cocoa times and match media paths to files.

07Interpretation pitfalls

  • Call aggregate rows can cover more than one call; do not assume one row equals one call.
  • Outcome and type labels are not vendor-documented.
  • Recent changes may exist only in the WAL file.

09Sources

  1. iLEAPP — scripts/artifacts/whatsApp.py Alexis Brignoni et al. (GitHub) · checked 2026-10-14
  2. WhatsApp in Plain Sight: Where and How You Can Collect Forensic Artifacts Igor Mikhailov, Group-IB (2019) · checked 2026-10-14
  3. CFAbsoluteTime Apple Developer Documentation · checked 2026-10-14
  4. SQLite — Write-Ahead Logging SQLite · checked 2026-10-14