KNOWLEDGEC
SQLITE WAL
PUSH CACHE
GHOST DATA
Mobile Forensics DFIR Research iOS Android TLP:WHITE April 2026

The Ghost Data Problem

Mobile artifacts nobody checks. The FBI’s Signal recovery via push notification caches made headlines. That’s barely scratching the surface.

Scroll

Recent reporting by 404 Media revealed that the FBI had recovered Signal message content from a suspect’s iPhone — not by breaking Signal’s encryption, but by reading cached push notification data that Apple’s Push Notification Service (APNs) had stored on the device independently of the Signal app. The story made headlines. What it should have done was trigger a profession-wide reassessment. That push notification cache is one of probably two dozen mobile artifact categories that routinely survive app deletion, factory resets, and even deliberate wiping.

The Notification Cache Was Just the Beginning

The FBI’s Signal recovery worked because of a fundamental architectural reality: on both iOS and Android, push notifications are handled by the operating system, not by the app. When a Signal message arrives, Apple’s APNs framework receives it first, caches it in a system-level database, and then delivers it to the Signal app. Signal can delete the message from its own sandbox. It cannot reach into the OS-level notification cache and delete what APNs stored there. The notification daemon does not take instructions from third-party applications.

This is not a bug. It is the intended design of a write-optimised, reliability-first notification delivery system. Apple and Google both cache notifications to handle edge cases: the app is not running, the device is in low-power mode, the app crashes before acknowledging delivery. The cache exists to guarantee delivery. The side effect is that it also guarantees forensic persistence.

But push notification caches are just one category. Mobile operating systems maintain dozens of system-level databases that independently track app behaviour, network usage, battery consumption, location history, device state, and user interaction patterns. These databases are maintained by OS daemons that do not coordinate with individual applications. They do not honour app deletion. Many survive factory resets because they are stored in partitions that the reset process does not touch.

Scope & Legal Notice

This article documents forensic artifacts accessible via lawful forensic examination of mobile devices using industry-standard tools (Cellebrite UFED, GrayKey, AXIOM, open-source parsers). All artifact paths and queries described here require either a full filesystem extraction from a device under lawful authority or a physical image. None of the techniques described bypass device encryption — they require an unlocked device or a lawful extraction capability. Practitioners must ensure appropriate legal authority (warrant, consent, or corporate policy) before accessing any device.

Why Data Survives When It Shouldn’t

The persistence of ghost data is not a single vulnerability. It is a feature collision — the unintended forensic consequence of multiple well-designed systems operating independently.

Consider what happens when a user installs a messaging app on iOS. The app gets a sandbox. It stores its messages in its own SQLite database within that sandbox. But the moment the app runs, at least six other system components start independently recording data about it:

When the user deletes the app, the sandbox is removed. The app’s own database is gone. But the six system databases listed above? They have no mechanism to detect that the app was deleted. They have no cleanup hook. They are maintained by system daemons that run at a privilege level above individual applications. They continue to hold their historical records indefinitely, subject only to their own internal retention policies — which can be weeks, months, or in some cases years.

Key Insight

“The suspect deleted the app. The app was gone. The OS, however, had been keeping its own diary — and nobody told the OS to stop.”

The same pattern applies on Android, with different databases but the same architectural reality. UsageStats, notification_history.db, FCM delivery logs, recent task thumbnails — all maintained by system services that operate independently of individual applications. The user controls the app. The user does not control the OS.

iOS Artifact Catalog

Testing Environment

All iOS artifacts documented below were tested across iOS 15, 16, and 17 using GrayKey full filesystem extraction and Cellebrite UFED Premium. Artifact availability may vary depending on extraction type (logical vs. full filesystem vs. advanced logical) and iOS version. Full filesystem extraction is required for most of the artifacts described here.

knowledgeC.db — The Everything Database

Artifact: knowledgeC.db — CoreDuet Knowledge Store

Path: /private/var/mobile/Library/CoreDuet/People/knowledgeC.db

  • Maintained by the CoreDuet framework — Apple’s machine learning engine for predicting user behaviour
  • Records app foreground/background timestamps with sub-second precision
  • Tracks Safari browsing events (URLs visited, time on page)
  • Logs VoIP call metadata (FaceTime, WhatsApp, Signal — call start, duration, app used)
  • Records device state events: screen on/off, plugged in/unplugged, orientation changes
  • Captures Siri interaction history (queries, app invocations)
  • Infers location context from Wi-Fi SSID associations without GPS coordinates
  • Retention: typically 4–8 weeks, but entries for deleted apps can persist longer due to lazy cleanup

knowledgeC.db is, in our assessment, the single most valuable forensic artifact on iOS for establishing a behavioural timeline. It is a SQLite database maintained by Apple’s CoreDuet framework, which exists to power Siri Suggestions, Screen Time, and adaptive battery management. To do its job, CoreDuet records an extraordinarily detailed log of how the user interacts with their device — which apps they open, when, for how long, in what context, and what device state changes occur alongside those interactions.

SQL / knowledgeC.db
-- Query knowledgeC.db for app usage events (foreground/background transitions)
-- Timestamps are CoreData/Cocoa epoch (2001-01-01 00:00:00 UTC)
-- Add 978307200 to convert to Unix epoch

SELECT
    datetime(ZOBJECT.ZSTARTDATE + 978307200, 'unixepoch') AS 'start_time',
    datetime(ZOBJECT.ZENDDATE + 978307200, 'unixepoch') AS 'end_time',
    ZOBJECT.ZVALUESTRING AS 'bundle_id',
    (ZOBJECT.ZENDDATE - ZOBJECT.ZSTARTDATE) AS 'duration_seconds',
    ZSOURCE.ZBUNDLEID AS 'source',
    CASE ZOBJECT.ZSTREAMNAME
        WHEN '/app/usage' THEN 'App Usage'
        WHEN '/app/inFocus' THEN 'App In Focus'
        WHEN '/safari/history' THEN 'Safari Visit'
        WHEN '/app/activity' THEN 'App Activity'
        ELSE ZOBJECT.ZSTREAMNAME
    END AS 'event_type'
FROM ZOBJECT
LEFT JOIN ZSOURCE ON ZOBJECT.ZSOURCE = ZSOURCE.Z_PK
WHERE ZOBJECT.ZSTREAMNAME IN (
    '/app/usage', '/app/inFocus',
    '/safari/history', '/app/activity'
)
ORDER BY ZOBJECT.ZSTARTDATE DESC;
Case Finding

47 App Opens Over 6 Weeks — App Deleted 12 Days Before Device Seizure

In a corporate espionage investigation, knowledgeC.db revealed 47 foreground usage events for a competing company’s collaboration app (bundle ID: com.[redacted].collab) spanning a 6-week period. The app had been deleted from the device 12 days prior to seizure. No trace of the app remained in the iTunes backup, the app sandbox, or Spotlight. knowledgeC.db retained the complete usage history including session durations (range: 2 minutes to 47 minutes) and associated Wi-Fi SSID context, which placed 38 of the 47 sessions on the corporate network. The subject had been using a competitor’s tool on company infrastructure for six weeks.

PowerLog.PLSQL — Battery Daemon Attribution

Artifact: PowerLog.PLSQL — Battery Usage Database

Path: /private/var/mobile/Library/BatteryLife/PowerLog.PLSQL

  • Maintained by the battery daemon (powerd) for Settings > Battery display
  • Records per-app CPU time, network radio usage, foreground/background energy in hourly buckets
  • Contains the PLAppTimeService_Aggregate_AppRunTime table: app bundle ID, screen-on time, background time
  • Also contains PLBatteryAgent_EventBackward_Battery: voltage, temperature, charge state by timestamp
  • Retention: typically 7–14 days for detailed records, summary data up to 30 days
  • Persists after app deletion — powerd does not monitor app lifecycle events
SQL / PowerLog.PLSQL
-- Query PowerLog.PLSQL for per-app CPU and network radio usage
-- Useful for corroborating knowledgeC.db timelines with independent energy data

SELECT
    datetime(timestamp, 'unixepoch') AS 'time',
    BundleID AS 'app',
    ScreenOnTime AS 'screen_on_sec',
    BackgroundTime AS 'bg_sec',
    CellRxBytes + CellTxBytes AS 'cell_bytes',
    WiFiRxBytes + WiFiTxBytes AS 'wifi_bytes'
FROM PLAppTimeService_Aggregate_AppRunTime
WHERE BundleID NOT LIKE 'com.apple.%'
ORDER BY timestamp DESC;

PowerLog.PLSQL’s primary forensic value is timeline corroboration. When knowledgeC.db says an app was in the foreground for 12 minutes, PowerLog.PLSQL independently records the CPU time and network bytes consumed during that period. Two independent system databases, maintained by two independent daemons, both recording the same app activity. This is the kind of dual-source corroboration that survives cross-examination.

DataUsage.sqlite — Per-App Network Accounting

Artifact: DataUsage.sqlite — Wireless Data Daemon

Path: /private/var/wireless/Library/Databases/DataUsage.sqlite

  • Maintained by the wireless data daemon for the Settings > Cellular > App Data Usage display
  • Records per-app cumulative bytes sent and received, split by Wi-Fi and cellular
  • The ZPROCESS table maps process IDs to bundle identifiers
  • The ZLIVEUSAGE table contains per-connection records with timestamps
  • Data persists after app deletion — the wireless daemon does not monitor app installs/uninstalls
  • Retention: cumulative counters since last “Reset Statistics” (which most users never do)

DataUsage.sqlite is the iOS equivalent of Windows SRUM.db for network attribution. It records how many bytes each app has transferred, and critically, it retains entries for apps that have been deleted. The cumulative counters persist until the user manually taps “Reset Statistics” in Settings > Cellular — an action that fewer than 5% of users ever perform, according to our sample of over 200 forensic extractions.

Case Finding

2.3 GB Transferred via Deleted Cloud Storage App — Data Exfiltration Confirmed

In a fraud investigation, DataUsage.sqlite showed that a cloud storage application (since deleted from the device) had transferred 2.3 GB of cellular data over a 4-day period. The app’s sandbox was gone. No backup contained the app’s data. But the wireless daemon’s per-process network accounting had recorded every byte. Combined with knowledgeC.db session timestamps, we could demonstrate that the 2.3 GB transfer occurred across 11 discrete sessions, each lasting 8–15 minutes, during business hours only. The pattern was consistent with systematic file exfiltration, not casual cloud storage usage.

routined + locationd — Behavioural Location History

Artifact: routined + locationd — Location Inference Databases

Path: /private/var/mobile/Library/Caches/com.apple.routined/ and /private/var/root/Library/Caches/locationd/

  • routined maintains the Significant Locations model (Settings > Privacy > Location Services > System Services > Significant Locations)
  • Records location visits with arrival/departure timestamps, latitude/longitude, and confidence scores
  • locationd caches Wi-Fi probe data that can infer location from known AP databases
  • Wi-Fi SSID association history provides location context even with Location Services disabled
  • Significant Locations data survives standard wipe in some iOS versions (stored in a protected partition)
  • Retention: Significant Locations retains several months of visit history

The routined database is Apple’s behavioural location model — it learns where the user lives, works, and frequently visits. Unlike GPS track logs, Significant Locations are inferred from a combination of GPS, Wi-Fi, cellular tower data, and time-of-day patterns. The result is a remarkably accurate location timeline that most users do not know exists and that survives standard device wipes in certain iOS versions because the data is stored in a protected data partition that the user-facing “Erase All Content and Settings” operation does not always fully clear.

SQLite WAL Files — The Hidden Recovery Layer

Artifact: SQLite Write-Ahead Logging (WAL) Files

Path: Any *.sqlite-wal and *.sqlite-shm file adjacent to a SQLite database

  • SQLite WAL (Write-Ahead Logging) is the default journal mode for most iOS and Android databases
  • The -wal file contains all writes that have not yet been checkpointed (merged) into the main database
  • The -shm file is the shared memory index for the WAL
  • Uncheckpointed WAL data can contain rows that were written and then deleted before a checkpoint occurred
  • If a device is powered off or seized before a checkpoint, the WAL may contain data that the main database no longer reflects
  • Many forensic tools read only the main .sqlite file and ignore the WAL sidecar

SQLite’s Write-Ahead Logging is a journaling mechanism designed for performance and crash recovery. When an application writes to a SQLite database in WAL mode, the write goes to a separate -wal file first. The main database is only updated when a checkpoint occurs — typically when the WAL reaches a size threshold, the database is closed cleanly, or an explicit checkpoint is requested. Until that checkpoint happens, the -wal file contains data that the main .sqlite file does not.

The forensic implication is significant. If a user deletes messages from a chat app, and the app deletes those rows from its SQLite database, but no checkpoint has occurred since, the deleted rows may still exist in the WAL file. This is not theoretical — it is one of the most reliable recovery techniques in mobile forensics, and it applies to every SQLite database on both iOS and Android.

Tool Blind Spot

Cellebrite Physical Analyzer and AXIOM parse WAL files automatically in most cases. However, many open-source SQLite browsers (DB Browser for SQLite, sqlitebrowser) do not read WAL data by default — they open the main database and ignore the sidecar files. If you are manually examining a SQLite database and there is a -wal file present, you must either: (1) use a tool that WAL-aware parsing, (2) manually checkpoint the WAL into the database using PRAGMA wal_checkpoint(FULL) on a forensic copy, or (3) use a hex editor / WAL parser to read the raw WAL frames. Never checkpoint a WAL on the original evidence.

Android Artifact Catalog

Testing Environment

All Android artifacts documented below were tested across Android 10, 11, 12, 13, and 14 on Pixel and Samsung devices. Artifact paths may vary by manufacturer (Samsung, Xiaomi, Huawei often add proprietary databases in addition to AOSP defaults). Root or physical extraction is required for nearly all artifacts listed — ADB logical backup does not expose system partition databases.

UsageStats — App Usage History

Artifact: UsageStats — App Usage Statistics Service

Path: /data/system/usagestats/

  • Maintained by the UsageStatsService system service (Android 5.0+)
  • Records app launch events, foreground/background transitions, and interaction counts
  • Stored in XML files organised by time interval: daily, weekly, monthly, yearly
  • Retention: up to 1 year of app usage history in yearly aggregation files
  • Records package names, last-used timestamps, total foreground time, and launch counts
  • Requires root or physical extraction — not accessible via ADB backup
  • Data persists after app uninstall — the UsageStatsService does not purge on uninstall

Android UsageStats is the closest equivalent to iOS knowledgeC.db, with one significant advantage: its retention window can extend to a full year. The /data/system/usagestats/ directory contains XML files organised by time bucket (daily, weekly, monthly, yearly). Each file records every app that was used during that period, when it was last in the foreground, how many times it was launched, and the total foreground duration. This data survives app uninstallation and persists until the time bucket rolls off the retention window.

Android Notification History — Message Preview Cache

Artifact: notification_history.db — System Notification Log

Path: /data/system_de/0/notification_history/ (Android 11+, also /data/system_de/0/notification_history.db on some builds)

  • Introduced in Android 11 as part of the Notification History feature (Settings > Notifications > Notification History)
  • Caches the content of all notifications delivered to the device, including message previews
  • For encrypted messaging apps (Signal, Telegram, WhatsApp), the notification preview contains the decrypted message text as displayed in the notification shade
  • Retention: default 24 hours rolling, but database entries can persist longer if the DB is not compacted
  • Enabled by default on many OEM builds (Samsung, Pixel) since Android 12

This is the artifact that makes end-to-end encryption forensically complicated. When Signal delivers a message, the notification includes a preview of the decrypted message content — that preview is what appears in the notification shade. Android’s notification history service caches that preview in a system database outside Signal’s control. Signal cannot delete it. Signal does not even know it exists. The decrypted message content sits in a system database, indexed by timestamp and package name, waiting to be read.

SQL / notification_history.db
-- Query Android notification_history.db for encrypted messenger notifications
-- This recovers message previews from Signal, Telegram, WhatsApp
-- that the OS cached independently of the app's own database

SELECT
    datetime(posted_time / 1000, 'unixepoch', 'localtime') AS 'notification_time',
    pkg AS 'app_package',
    title AS 'sender',
    text AS 'message_preview',
    sub_text AS 'group_name'
FROM notification_log
WHERE pkg IN (
    'org.thoughtcrime.securesms',     -- Signal
    'org.telegram.messenger',          -- Telegram
    'com.whatsapp',                    -- WhatsApp
    'com.whatsapp.w4b'                 -- WhatsApp Business
)
ORDER BY posted_time DESC;

Recent Tasks Thumbnails — OS-Generated Screenshots

Artifact: Recent Tasks Snapshots — App Switcher Thumbnails

Path: /data/system_ce/{user_id}/snapshots/

  • Android captures a screenshot of every app when it goes to the background (for the Recent Apps / task switcher view)
  • Stored as JPEG or PNG files in a per-user directory, organised by task ID
  • Images show the exact screen content at the moment the user switched away from the app
  • Not cleared by app uninstallation — orphaned snapshots may persist
  • Requires root or physical extraction — not accessible via ADB backup
  • Reduced resolution (typically 50% of screen resolution) but fully readable

Recent Tasks thumbnails are perhaps the most visually striking ghost data artifact. Every time a user switches away from an app — presses home, opens another app, or locks the device — Android takes a screenshot of the current screen and stores it as the thumbnail for the task switcher. These screenshots are stored in the system partition, not the app’s sandbox. They can capture anything that was on screen: message content, file listings, login screens, financial data, map locations.

Case Finding

Recent Tasks Thumbnail Captured Folder Listing — Became Key Exhibit in IP Theft Case

In an intellectual property theft investigation, a Recent Tasks thumbnail captured the exact moment a departing employee was browsing a cloud storage folder containing proprietary design files. The snapshot showed the folder listing with filenames, file sizes, and dates clearly visible. The cloud storage app had been uninstalled from the device. The app’s own database was gone. The snapshot survived in /data/system_ce/0/snapshots/ because the system service that manages task thumbnails has no relationship with the app lifecycle. This single image became a key exhibit in the subsequent civil proceedings.

Tombstone Crash Logs — Memory Fragments from Crashes

Artifact: Tombstone Crash Dumps — Native Crash Reporter

Path: /data/tombstones/tombstone_00 through tombstone_09

  • Android’s native crash reporter stores tombstone files when a process crashes with a native (C/C++) error
  • Contains register dumps, stack traces, memory maps, and partial memory contents at time of crash
  • Memory fragments can include URLs, authentication tokens, file paths, and partial data buffers
  • Circular buffer: 10 tombstone files, oldest overwritten when new crashes occur
  • Also available in /data/anr/ for Application Not Responding (ANR) traces (Java stack dumps)

Tombstone files are Android’s crash dump mechanism for native code. When a process crashes due to a segmentation fault, abort signal, or similar native error, the system writes a tombstone file containing the register state, stack trace, memory maps, and portions of the process’s memory at the time of the crash. This memory dump can contain fragments of whatever data the process was handling when it crashed.

Case Finding

Exfiltration URL Recovered from Tombstone Stack Trace

In a data exfiltration investigation, a tombstone crash dump from a custom Android application contained a partial HTTP URL in the stack trace memory dump. The URL included a remote server address and an API endpoint path consistent with automated data upload. The application itself had been deleted and its APK was not recoverable. The tombstone file — which survived because only 3 of the 10 tombstone slots had been overwritten since the crash — provided the only evidence linking the device to the remote exfiltration server.

FCM Delivery Logs — Push Message Receipts

Artifact: FCM (Firebase Cloud Messaging) Delivery Database

Path: /data/data/com.google.android.gms/databases/ (multiple databases; key tables in fcm_data.db and gcm_data.db)

  • Firebase Cloud Messaging (formerly Google Cloud Messaging) handles push notifications for virtually all Android apps
  • GMS (Google Mobile Services) maintains delivery receipt logs in system-level databases
  • Records: app package name, message ID, delivery timestamp, and in some cases partial payload data
  • Proves that a push notification was received by the device even if the app has been deleted
  • FCM registration tokens in the database can link a device to a specific app installation

FCM delivery logs serve a similar forensic function to iOS APNs caches. They prove that a message was received by the device via push notification. Even if the app has been uninstalled and its own message database is gone, the GMS-level FCM delivery log retains a record that a push message was delivered to that app’s package name at a specific time. This is particularly valuable for establishing communication timelines when the messaging app itself is no longer present on the device.

MITRE ATT&CK Mapping

The following table maps mobile MITRE ATT&CK techniques to the ghost data artifacts that survive each technique’s execution. These artifacts provide forensic evidence even when the adversary believes they have successfully covered their tracks.

Technique ID Technique Name Description Surviving Artifacts
T1630.001 Indicator Removal: Uninstall Malicious Application Adversary uninstalls the app to remove evidence of its presence knowledgeC.db (iOS), UsageStats (Android), DataUsage.sqlite (iOS), PowerLog.PLSQL (iOS), Recent Tasks thumbnails (Android), FCM delivery logs (Android)
T1630.002 Indicator Removal: File Deletion Adversary deletes specific files or data from the device SQLite WAL files (both), Tombstone crash logs (Android), routined location data (iOS), Significant Locations (iOS)
T1636.001 Protected User Data: Calendar Entries App accesses calendar data for intelligence collection knowledgeC.db records app accessing Calendar API (iOS), UsageStats records app foreground time during calendar access (Android)
T1636.004 Protected User Data: SMS Messages App reads SMS/MMS for credential theft or surveillance notification_history.db caches SMS notification previews (Android), knowledgeC.db records Messages app usage context (iOS)
T1532 Data Staged: Archive Collected Data App compresses or stages data before exfiltration DataUsage.sqlite records network bytes during staging (iOS), PowerLog.PLSQL records CPU spike during compression (iOS), tombstone crash logs may capture file paths (Android)
T1521.001 Encrypted Channel: Symmetric Cryptography App uses encryption for C2 or data exfiltration DataUsage.sqlite records encrypted bytes volume (iOS), FCM delivery logs record C2 push messages (Android), notification_history.db may cache decrypted notification content (Android)

Practitioner Notes

Acquisition Method Matters — Full Filesystem or Nothing

The single most important takeaway for practitioners is this: logical extraction is not sufficient for ghost data recovery. An iTunes backup (iOS) or ADB backup (Android) will not contain knowledgeC.db, PowerLog.PLSQL, DataUsage.sqlite, UsageStats, notification_history.db, or any of the system-level databases described in this article. These files live outside the backup scope. You need a full filesystem extraction — GrayKey, Cellebrite UFED Premium with applicable exploits, checkm8-based extraction for older iOS devices, or root-level access on Android.

If your engagement scope or tooling limits you to logical extraction, you must document that limitation in your report. The absence of ghost data artifacts in a logical extraction is not evidence of absence — it is evidence that your extraction method did not reach the relevant partitions.

Parse WAL Files First

Before examining any SQLite database from a mobile extraction, check for the presence of -wal and -shm sidecar files. If they exist, the WAL contains uncheckpointed writes that may include data no longer present in the main database. Always work on a forensic copy. If you need to checkpoint the WAL to make the data visible in a standard SQLite browser, perform the checkpoint on the copy, never the original. Document the WAL file size and modification timestamp before any manipulation.

Android Root Is Not Optional

For Android devices, the gap between what you can see with ADB-level access and what you can see with root or physical access is enormous. ADB gives you the app sandboxes (and only for debuggable apps or apps that have opted into backup). Root gives you /data/system/, /data/system_de/, /data/system_ce/, /data/data/com.google.android.gms/, and /data/tombstones/. Without root, you are examining a mobile device through a keyhole. With root, you have the full floor plan.

Document Artifact Metadata for Court

Ghost data artifacts are powerful precisely because they are maintained by the operating system independently of the user. This independence is their forensic strength — but it also means you need to explain their provenance clearly in reports and testimony. For each artifact, document: (1) the exact file path and extraction method, (2) the system service that maintains the database, (3) why the data persists after app deletion (because the system service has no app lifecycle hook), (4) the retention policy (how far back the data extends), and (5) any corroborating artifacts from independent system databases. Courts respond well to multiple independent system databases telling the same story.

The Signal Story Isn’t About Signal

The FBI’s Signal recovery was newsworthy because of Signal’s reputation for privacy. But the forensic principle it demonstrated has nothing to do with Signal specifically. End-to-end encryption secures the transport layer — the path between sender and recipient. It does not and cannot secure the OS-level caching, indexing, and accounting that happens on the recipient’s device after the message arrives and is decrypted for display.

Every app on a mobile device leaves OS-level traces it cannot control. The app developer can encrypt their database, implement disappearing messages, and delete data on command. They cannot reach into knowledgeC.db and delete the usage entry. They cannot reach into DataUsage.sqlite and zero the byte counters. They cannot reach into the notification history and purge the cached preview. They cannot delete the Recent Tasks thumbnail that the OS captured when the user switched away. They cannot suppress the tombstone file if their app crashes.

The implication for forensic practitioners is clear: if your mobile examination stops at logical extraction and app-level databases, you are seeing maybe 40% of what is there. The remaining 60% lives in system databases that most commercial tools can extract but that many examiners never think to query. It lives in WAL files that standard SQLite browsers silently ignore. It lives in crash dumps, task thumbnails, and notification caches that exist because the operating system was designed for reliability, not for privacy.

Key Takeaway

Mobile operating systems are, by architectural necessity, surveillance platforms. They monitor app behaviour, cache notification content, track network usage, record location patterns, and capture screen content — all in the name of user experience, battery optimisation, and system reliability. The forensic examiner’s job is not to exploit this; it is to know that it exists, to extract it lawfully, and to present it accurately. The ghost data is already there. The only question is whether you look for it.

Mjolnir Security — Mobile Forensics & Incident Response

Mjolnir Security provides mobile forensic extraction, analysis, and expert testimony for corporate investigations, incident response, and litigation support. Our mobile forensics team has conducted over 300 iOS and Android examinations across corporate espionage, data theft, fraud, and insider threat matters.

Mobile Forensics iOS Extraction Android Extraction Incident Response Expert Witness Device Triage

mjolnirsecurity.com — 24/7 Incident Response Hotline: +1 833 403 5875

Written by Mjolnir Security DFIR team

Published April 2026 · Field Research · TLP:WHITE