The following is a lightly anonymised account of a real forensic engagement conducted by Mjolnir Security. Organisational identifiers, personal names, and timestamps have been altered or generalised. All technical details — the artifacts examined, the commands used, and the conclusions drawn — are presented exactly as they occurred in the investigation. We are publishing this case because it illustrates something poorly understood even among experienced forensic practitioners: an iPhone that has been factory reset does not erase the forensic record of its existence if it was ever paired with a Mac.
The Engagement
How We Were Called In
A mid-sized financial services firm had terminated an employee following an internal HR investigation. The circumstances were serious enough that legal counsel recommended a forensic review of the employee's company-issued devices to determine whether any client data or intellectual property had been removed before or during the termination.
Two devices were handed to us: a MacBook Pro running macOS Ventura, and an iPhone 14 Pro. Both were company-issued, enrolled in MDM, and had been in the employee's sole possession for approximately 22 months.
The problem, which legal counsel disclosed at the outset, was that the iPhone had been factory reset. The employee had initiated a full erase through Settings before surrendering the device. By the time it was handed over, it was sitting on the iOS setup screen — a blank slate.
The Mac, however, had not been touched.
Initial Assessment
Our first hour was spent taking forensic images of both devices: a full sector-level image of the MacBook's SSD, and a logical extraction of the iPhone (which yielded almost nothing — just default iOS artefacts from the brief MDM re-enrolment). The iPhone acquisition confirmed what we already knew: the factory reset had been effective at the filesystem level. No user data, no call logs, no app data, no photos. iOS factory resets are thorough — they re-encrypt the NAND using a new key, rendering all prior data cryptographically inaccessible.
We turned our full attention to the Mac.
Finding 1: The Pairing Record
What the Mac Knew Before We Did Anything
The lockdown directory on macOS stores cryptographic pairing records for every iOS device that has ever been paired with the machine via USB. These records are created the moment a user taps "Trust" on their iPhone when connecting it to a new Mac.
Path: ~/Library/Lockdown/ (per-user) or /var/db/lockdown/ (system-level, pre-Monterey)
Each paired device creates a named .plist file identified by the device's UUID. The plist contains: the device certificate, the host certificate, the escrow keybag, the WiFi MAC address, and — critically — the first pairing date encoded as a standard CFDate.
These records are NOT deleted when the iPhone is wiped. The wipe happens on the device; the Mac's lockdown directory is entirely unaffected. Records persist indefinitely until manually deleted from the Mac.
In the lockdown directory, we found a single pairing record. Its UUID matched the MDM-reported device UUID of the employee's iPhone 14 Pro. The plist contained a RootPrivateKey and a HostCertificate created on the date the device was originally issued — 22 months prior. Most importantly, the EscrowBag field confirmed this specific Mac and this specific iPhone had been in a trusted pairing relationship.
The lockdown pairing record established that the iPhone 14 Pro was first paired with this MacBook on the date of original device issuance. This directly contradicted the employee's claim that the iPhone had never been connected to the company Mac for data transfer purposes — pairing is a prerequisite for any USB data exchange.
Finding 2: The Backup the Employee Forgot
MobileSync — What Stays on the Mac
When a user connects an iPhone to a Mac and opens Finder, a backup can be created. Many users are unaware of this — iCloud Backup is the prominent option, and local Mac backups feel like a legacy workflow. But local backups happen, especially when a device is first set up, when iCloud storage is full, or simply because the user clicked "Back Up Now" without thinking about the forensic implications.
Path: ~/Library/Application Support/MobileSync/Backup/<device-UUID>/
Manifest.plist: Device serial number, IMEI, MEID, iOS version, phone number, and last backup date.
Manifest.db: SQLite database mapping every backed-up file to its domain path and SHA-1 hash.
Info.plist: Device metadata including product type, installed apps list, last synced computer name.
Status.plist: Backup completion status, backup type (full vs incremental), and snapshot date.
In the MobileSync directory, we found a backup dated eight days before the termination date. The device UUID matched the pairing record exactly. The backup had not been encrypted with a custom password, which meant we could extract it fully.
What the Manifest.plist Told Us Immediately
$ plutil -convert xml1 Manifest.plist -o - | grep -E 'Serial|IMEI|Phone|Product|LastBackup' <key>Build Version</key> <string>21A342</string> <key>Device Name</key> <string>████ iPhone</string> <key>IMEI</key> <string>35████████████5</string> <key>Last Backup Date</key> <date>2024-██-██T14:23:07Z</date> <key>Phone Number</key> <string>+1 (███) ███-████</string> <key>Product Type</key> <string>iPhone14,3</string> <key>Serial Number</key> <string>████████████</string>
The IMEI, serial number, and phone number were now part of the forensic record — data that the factory reset had obliterated from the device itself but that lived unchanged on the Mac's hard drive.
The Manifest.plist yielded the device IMEI, serial number, phone number, and device name — all matching MDM asset records. The factory reset had not touched this file. The backup was 8 days old at termination, reflecting the device state during the period of investigative interest.
Finding 3: The App Inventory
Info.plist — A Snapshot of Installed Applications
The Info.plist file within the backup contains an Applications key enumerating every third-party app installed at backup time.
$ python3 - << 'EOF'
import plistlib
with open('Info.plist','rb') as f:
info = plistlib.load(f)
apps = info.get('Installed Applications', [])
for app in sorted(apps): print(app)
EOF
The installed applications list contained the expected productivity apps — Mail, Slack, the company's MDM agent — but it also contained several entries directly relevant to the investigation:
- com.getdropbox.Dropbox — A personal Dropbox client. The company did not use Dropbox; all approved file storage was via SharePoint.
- com.google.Drive — Personal Google Drive. Same observation as Dropbox.
- com.telegram.Telegram — End-to-end encrypted messaging with "secret chats" that prevent backup.
The backup's Info.plist also contained a LastSyncedComputerName field matching the MacBook's hostname — creating an explicit documented link between the two devices.
Dropbox and Google Drive were installed during the period of interest. Neither is on the company's approved software list. Both are capable of automated background sync of any files placed in their sync folders. This finding was escalated to legal counsel.
Finding 4: The KnowledgeC.db Cross-Device Timeline
Why the Mac's KnowledgeC Contains iPhone Data
This is one of the most powerful and least understood aspects of macOS forensics. When an iPhone is paired with a Mac and iCloud is enabled, Apple's Continuity framework syncs activity data between devices. The Mac's KnowledgeC.db accumulates records from every paired Apple device associated with the same Apple ID.
Path: ~/Library/Application Support/Knowledge/knowledgeC.db
The ZSOURCE table maps each ZOBJECT row to a source device. Query ZSOURCE.ZDEVICEID to separate Mac from iPhone activity.
Sync window: approximately 30 days of rolling history. The WAL file may contain the most recent uncommitted records.
Cocoa epoch reminder: all timestamps are seconds since 2001-01-01 UTC. Add 978,307,200 to convert to Unix epoch.
Extracting iPhone-Sourced Activity
-- Step 1: Identify device IDs SELECT ZDEVICEID, ZOWNER, ZPLATFORMROOTID FROM ZSOURCE GROUP BY ZDEVICEID; -- Step 2: Pull all iPhone activity for a date range SELECT datetime(Z.ZSTARTDATE + 978307200,'unixepoch','localtime') AS start, datetime(Z.ZENDDATE + 978307200,'unixepoch','localtime') AS end, Z.ZSTREAMNAME, Z.ZVALUESTRING FROM ZOBJECT Z JOIN ZSOURCE S ON S.Z_PK = Z.ZSOURCE WHERE S.ZDEVICEID = 'A3F2████-████-████-████-████████████' AND Z.ZSTARTDATE > strftime('%s','2024-██-01') - 978307200 ORDER BY Z.ZSTARTDATE ASC;
What the Timeline Revealed
| Timestamp (UTC) | Source Artifact | Event |
|---|---|---|
Day -3, 07:14:02 | KnowledgeC /app/inFocus | com.google.Drive opened — 14 min 22 sec foreground |
Day -3, 07:28:41 | KnowledgeC /app/inFocus | com.apple.Notesapp opened — 6 min 04 sec |
Day -3, 07:35:02 | KnowledgeC /app/inFocus | com.getdropbox.Dropbox opened — 31 min 17 sec foreground |
Day -3, 08:06:55 | KnowledgeC /device/isLocked | Device locked |
Day -2, 09:42:11 | KnowledgeC /device/isLocked | Device unlocked |
Day -2, 09:42:18 | KnowledgeC /app/inFocus | com.getdropbox.Dropbox resumed — 18 min 02 sec |
Day -2, 10:01:44 | KnowledgeC /app/webUsage | dropbox.com domain access via Dropbox app |
Day -2, 10:22:09 | KnowledgeC /app/inFocus | com.apple.MobileSMS foreground — 2 min 11 sec |
Day -1, 22:09:44 | KnowledgeC /app/inFocus | com.getdropbox.Dropbox opened — 4 min 38 sec |
Dropbox was used three times across three days, for a combined foreground duration of over 53 minutes. This is not background sync — a background sync daemon does not register foreground focus in KnowledgeC. The user had the app open and was actively interacting with it.
KnowledgeC.db, sourced from the paired iPhone's synced activity records, showed 53+ minutes of active Dropbox usage across three sessions — recovered entirely from the Mac even though the iPhone had been wiped. The activity pattern is consistent with manual file upload or review, not background sync.
Finding 5: PowerLog — Battery Data as a Behavioural Record
What PowerLog Is and Why It Ends Up on the Mac
PowerLog is Apple's internal battery and performance telemetry system. It runs continuously on every iPhone, recording per-process CPU usage, network activity, and battery state. When a Mac backup is performed, PowerLog databases are included as part of the com.apple.BatteryLife domain — stored as hash-named blobs in the MobileSync directory.
Extraction: Query Manifest.db for relativePath LIKE '%BatteryLife%' to locate hash paths.
Key tables: PLProcessMonitor (per-process CPU/battery), PLNetworkUsageMonitor (per-app bytes sent/received), PLPhoneUsageSummary (call durations).
All timestamps use standard Unix epoch — no Cocoa epoch conversion needed. Retention: ~14 days.
Extracting PowerLog from the Backup
import sqlite3, shutil, os conn = sqlite3.connect('Manifest.db') rows = conn.execute( "SELECT fileID, relativePath FROM Files" " WHERE relativePath LIKE '%BatteryLife%'").fetchall() for file_id, rel_path in rows: src = os.path.join(backup_dir, file_id[:2], file_id) dst = os.path.join('powerlog_extracted', rel_path.replace('/','_')) shutil.copy2(src, dst)
What PLNetworkUsageMonitor Revealed
SELECT datetime(timestamp,'unixepoch') AS sample_time, bundleIdentifier, wifiOut, wifiIn, wiredOut, wiredIn FROM PLNetworkUsageMonitor WHERE bundleIdentifier IN ('com.getdropbox.Dropbox','com.google.Drive') ORDER BY timestamp ASC;
The PowerLog data showed cumulative WiFi outbound bytes for Dropbox increasing by approximately 340 MB across the period of interest. Google Drive showed approximately 95 MB of outbound WiFi transfer. Combined: ~435 MB transferred to personal cloud storage in three days.
PLNetworkUsageMonitor recorded approximately 340 MB outbound to Dropbox and 95 MB outbound to Google Drive over the three days preceding termination. These figures represent WiFi outbound transfer only. The data was recovered from the Mac's backup of the now-wiped iPhone.
Finding 6: Browser Activity That Safari History Didn't Contain
The Gap in Standard Browser Forensics
The employee had cleared Safari history on the Mac — the History.db file contained no entries older than the morning of termination. On a Windows machine, cleared browser history is often a dead end. On a Mac, it is not.
Path: ~/Library/Application Support/Knowledge/knowledgeC.db
/safari/history stream: Records domain and page title for each visited URL. A separate record from Safari's own database — cleared independently.
/app/webUsage stream: Captures web domains accessed through any in-app Safari View Controller. These sessions never appear in Safari.db at all.
Both streams retain ~30 days of data. Clearing Safari history through Safari > Clear History has zero effect on KnowledgeC.
SELECT datetime(ZSTARTDATE + 978307200,'unixepoch','localtime') AS visit_time, ZVALUESTRING AS domain, CAST((ZENDDATE - ZSTARTDATE) AS INT) AS duration_sec FROM ZOBJECT WHERE ZSTREAMNAME = '/safari/history' ORDER BY ZSTARTDATE DESC LIMIT 100;
The /safari/history stream for the two weeks prior to termination showed browsing to the company's internal SharePoint, a legal information site about employee rights during termination, and — on three separate days — the web interface for a competing financial services firm.
Despite Safari history having been cleared on the day of termination, KnowledgeC.db retained 14 days of domain-level browsing activity. Notable domains accessed included the company's SharePoint (document access confirmed), a personal legal advice site, and a direct competitor — visited on three separate occasions in the 10 days prior to termination.
Reconstructed Timeline
By the end of the analysis, we had constructed a comprehensive picture of an iPhone that had been factory reset and was forensically blank — not from the device itself, but entirely from its forensic shadow on the Mac.
| Timestamp | Source Artifact | Event |
|---|---|---|
22 months prior | Lockdown pairing record | iPhone first paired with company Mac. Pairing certificate created. |
8 days pre-term | MobileSync Manifest.plist | Last local backup completed. Device IMEI, serial, and phone number captured. |
Day -3, 07:14 | KnowledgeC (iPhone source) | Dropbox opened on iPhone, active for 31 min. Upload volume: ~180 MB (PowerLog) |
Day -3, 10:01 | KnowledgeC /app/webUsage | Dropbox web interface accessed from iPhone during Dropbox session. |
Day -2, 09:42 | KnowledgeC (iPhone source) | Dropbox re-opened. Active 18 min. Additional ~95 MB WiFi outbound (PowerLog) |
Day -2, 11:30 | KnowledgeC /safari/history (Mac) | Competitor firm's website accessed. 3rd visit in 10 days. |
Day -1, 22:09 | KnowledgeC (iPhone source) | Dropbox opened. Active 4 min. Google Drive: ~95 MB WiFi outbound (PowerLog) |
Day 0, morning | KnowledgeC /safari/history (Mac) | Legal advice site visited. Safari history cleared same afternoon. |
Day 0, post-term | iOS device (direct) | Factory reset initiated. Device presented blank at handover. |
Investigation | Mac only | Complete device identity, app inventory, usage timeline, and transfer volume recovered. |
What This Engagement Teaches Us
For Investigators
When a mobile device has been wiped, do not treat it as the end of the forensic road. Begin treating every Mac, iPad, or Apple TV that the device was ever paired with as a potential evidence source. The specific artifacts to prioritise, in collection order:
- Lockdown pairing records — establish device identity and pairing date even with a blank device.
- MobileSync Manifest.plist and Info.plist — recover IMEI, serial, phone number, and installed app inventory from backups that predate the wipe.
- KnowledgeC.db ZSOURCE filtering — extract iPhone activity timeline from the Mac database, separate from Mac activity. Covers ~30-day retention regardless of device wipe.
- PowerLog databases (via Manifest.db) — recover per-application network transfer volumes, quantifying data exfiltration candidates.
- KnowledgeC /safari/history — recover browsing domains independent of Safari history, which can be manually cleared.
For Security Engineers
If you are building MDM policies or endpoint security controls for an Apple fleet, several practical implications follow:
- MDM should enforce encrypted local backups — an unencrypted backup can be extracted without any password. An encrypted backup with a strong, MDM-managed password significantly raises the bar.
- KnowledgeC.db is a DLP telemetry source — the /app/inFocus and network.request streams provide app-level activity data without requiring an endpoint agent on the device.
- Pairing restrictions via MDM — a supervised iOS device can be configured to disallow pairing with unmanaged computers, limiting forensic surface on unapproved Macs.
- The backup window matters — the 8-day gap in this case meant we missed the final 8 days of PowerLog. MDM policies that enforce nightly backups minimise this evidence gap.
If you factory reset your iPhone, understand that your paired Mac retains a significant record. Addressing this requires: removing pairing records from ~/Library/Lockdown/, deleting MobileSync backups via Finder > Manage Backups, resetting Screen Time data to clear KnowledgeC.db, and understanding that CloudKit sync lag may preserve data in iCloud until the retention window expires.
Conclusion
A factory reset iPhone handed over at termination is not a blank slate — it is an iPhone whose forensic record has been moved. From device, to Mac. From volatile storage, to a hard drive that nobody wiped.
The artifacts documented here are not obscure research findings. They are features Apple built into the operating system for legitimate purposes. KnowledgeC.db powers Screen Time. MobileSync powers local backups. Lockdown pairing records power trusted device connections. PowerLog powers battery diagnostics. None were designed as forensic tools — but all function as forensic tools.
The investigation was successful because the Mac remembered everything the iPhone tried to forget.
Mjolnir Security — Digital Forensics & Incident Response
Mjolnir Security conducts Mac and iOS forensic investigations for legal proceedings, HR matters, and incident response. All engagements are conducted under chain-of-custody protocols with court-admissible documentation.
Written by Mjolnir Security DFIR Team
DFIR Engagement Series | Published March 2025 | TLP:WHITE
