VP-02 · Mobile device forensics

Android messaging database and its WAL: a pickup message under dispute

A SQLite database and its write-ahead log from a messaging app, copied from a phone that was found switched off, plus the extraction log. Fifteen questions lead from file integrity and the WAL structure to what the committed state shows about one message and what it cannot show.

Synthetic training data. The organisation, people, devices, serial numbers and times are invented.

01Brief

Tern Freight is a parcel courier. On Friday 6 March 2026 a pickup at Dock 4 was moved to the afternoon. The driver says the instruction reached him only after 10:00 local time; the dispatcher says he sent it earlier. The dispatcher's phone was found switched off. On Monday 9 March 2026 a file-system extraction copied the messaging application's database, chatstore.db, together with its write-ahead log, chatstore.db-wal. You received the two files and the extraction log.

Internal audit asks:

  1. Are the files intact and what are they: journal mode, page size, time of extraction?
  2. How is the WAL built: how many frames, how many belong to the current generation, where does the committed part end?
  3. What does the committed state show about the pickup message, and how should the rest of the WAL be reported?

You are asked about the files only: what the pair contains, which part is committed database state, and what can and cannot be said about the pickup message. Do not infer who intended what.

02Evidence files

FileContentsSHA-256
README.txtScenario and file listThe brief in English and Turkish, handling notes and how the pair was made.932c132542be4ea326f32a7dea072af505c4d74b62aeddb7e2c050afbdd54fbf
acquisition-log.txtExtraction logSource directory, directory listing with sizes and file-system times, and the extraction time on the examiner's clock.a528760d5bd581619856552be654e3d70dae187b696f07ecd529778a9611133d
chatstore.dbSQLite main database fileThe main file of the messaging application's database: eight pages of 4096 bytes. WhatsApp for Android messages (msgstore.db) →b534c5f2faedeff403a8bb282a120a5988fa1c19f290a29e5954e2e43b72da3d
chatstore.db-walSQLite write-ahead logThe WAL that belongs to the main file, copied as found: committed frames, the end of an unfinished transaction and older frames left over from a previous WAL generation.f54a0199f87b858ae4359b0b09acb8db78453030eb3a4cf04eb55c8903b79d26
manifest.txtHash manifestSHA-256 of every file above. Verify before you start.(the manifest itself)

The hashes above are copied from manifest.txt. Recompute them yourself, for example with the hash tool or sha256sum.

03Before you start

  • Verify every file against manifest.txt and write the result in your examination log before you read anything else.
  • Work on copies, and never open the original pair with a database tool: an engine that opens a main file together with its WAL can run recovery and change or delete the WAL.
  • To see the main file alone, copy only chatstore.db to an empty folder. To see the committed state, copy both files together into another empty folder.
  • Message times in the database are Unix epoch milliseconds (UTC); the extraction log mixes time bases. Read the basis of every time before you use it.
  • The files show what the application stored, not what a person did or saw. Write each answer so that it stays true if the phone's clock was wrong.
  • Note which file, page or frame supports each answer; the instructor will ask.

Keep your notes in F-02 Evidence intake form and F-04 Examination log.

04Questions

Answer from the files only. Each answer is checked in this browser; nothing is sent anywhere, and your answers are kept on this device until you clear them. 15 questions, 24 points.

  1. Q011 pointchatstore.db-walmanifest.txt

    8 hex characters, e.g. 1a2b3c4d

  2. Q021 pointchatstore.db

    The bytes at offsets 18 and 19 of chatstore.db (file format write version and read version) are both 02. What does that tell you?

  3. Q031 pointchatstore.db

    A whole number

  4. Q041 pointacquisition-log.txt

    UTC to the second, e.g. 2026-03-09 05:00:00Z (an offset such as +03:00 is accepted)

  5. Q051 pointchatstore.db-walacquisition-log.txt

    A whole number

  6. Q062 pointschatstore.db-wal

    A whole number

  7. Q072 pointschatstore.db-wal

    A whole number

  8. Q082 pointschatstore.db-wal

    A whole number

  9. Q092 pointschatstore.dbchatstore.db-wal

    A whole number

  10. Q101 pointchatstore.db

    A whole number

  11. Q112 pointschatstore.dbchatstore.db-wal

    A whole number

  12. Q122 pointschatstore.dbchatstore.db-wal

    UTC to the second, e.g. 2026-03-06 07:00:00Z (an offset such as +03:00 is accepted)

  13. Q132 pointschatstore.dbchatstore.db-wal

    The driver says he got no pickup time before 10:00 local time. Message 43, sent at 06:26:48 UTC, says 'Friday: pickup at Dock 4 later today. Time follows.' Which statement can the report support from the committed state?

  14. Q142 pointschatstore.dbchatstore.db-wal

    Message 49 reads 'Pickup is 16:00 at Dock 4. Please confirm.' and has edited_ms 2026-03-06 07:14:20 UTC. A text search of the WAL also finds 'Pickup moved to 16:00 at Dock 4. Please confirm.' in frames 7 and 10. Which statement can the report support?

  15. Q152 pointschatstore.db-wal

    A text search of chatstore.db-wal finds 'Stock list part 1' in frames 18 and 21, but a query of the committed state does not return it. Frame 21 also shows row 49 with its revoked column set to 1, while the committed state has revoked = 0. How should the report treat this?

Score 0 / 24

05Your finding

Last step: write one paragraph that answers the three audit questions as a finding. Your instructor marks it against four criteria:

  • The report separates the main file, the committed state and the frames after the last commit frame.
  • Every time carries its basis: Unix epoch milliseconds, UTC, or local time with its offset.
  • The wording describes what the application stored, not what a person did, intended or saw.
  • No sentence calls anything 'deleted' or 'recovered' that the files only show as superseded or uncommitted.

How findings are phrased →