From ios-forensics
Review SMS / iMessage / calls / contacts / mail / third-party messengers recovered from an iOS acquisition to surface targeted social-engineering, suspicious delivery URLs, unknown correspondents, and deleted-but-recoverable records.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ios-forensics:communications-analysisThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- Spyware hunt surfaced a message-vector hit (Pegasus one-click / zero-click)
Reconstruct the subject's communication graph, surface anomalies, and extract durable evidence for any message / call that matters.
Before digging in, confirm what communication surfaces exist on this acquisition:
mvt_installed_apps
ios_backup_list domain_filter="AppDomainGroup-group.net.whispersystems.signal.group" and similar for any you want to investigate.
mvt_sms_messages(source, iocs=<optional STIX>)
Extract sms.db for full-fidelity analysis:
ios_backup_extract(backup_dir, domain="HomeDomain",
relative_path="Library/SMS/sms.db",
output_dir="/tmp/ios-evidence/")
ios_sqlite_query(database=<extracted sms.db>, query="...")
Useful queries:
-- Message text + handle + date (Apple Cocoa timestamps)
SELECT m.rowid, h.id AS handle, m.is_from_me,
datetime(m.date/1000000000 + 978307200, 'unixepoch') AS ts,
m.service, m.text
FROM message m
LEFT JOIN handle h ON m.handle_id = h.rowid
ORDER BY m.date DESC LIMIT 500;
-- Threads with only one message received (often spam / lure)
SELECT h.id AS handle, COUNT(*) AS n,
MIN(datetime(m.date/1000000000 + 978307200, 'unixepoch')) AS ts
FROM message m JOIN handle h ON m.handle_id = h.rowid
WHERE m.is_from_me = 0
GROUP BY h.id HAVING n = 1 ORDER BY ts DESC;
-- Messages containing URLs
SELECT h.id, m.text FROM message m
LEFT JOIN handle h ON m.handle_id = h.rowid
WHERE m.text LIKE '%http%' OR m.text LIKE '%://%';
Patterns to flag:
message where chat_message_join is missing or thread was purged → partial recovery possibleattachment) with filenames that look like exploit artifacts (.pdf, .gif, .html, .webarchive from unusual senders)mvt_calls(source)
For the fuller picture, extract and query CallHistory.storedata:
ios_backup_extract(backup_dir, "HomeDomain",
"Library/CallHistoryDB/CallHistory.storedata",
output_dir)
Columns of interest: ZADDRESS (number), ZDATE (Cocoa ts), ZDURATION, ZORIGINATED (0=incoming, 1=outgoing), ZANSWERED, ZFACE_TIME_DATA, ZCALLTYPE.
Flag:
mvt_run_module(source, module="contacts")
Or extract AddressBook.sqlitedb directly from HomeDomain/Library/AddressBook/AddressBook.sqlitedb. Useful for:
Tech Support, Insurance Claim, HR)Mail is stored under HomeDomain/Library/Mail/. Envelope index:
ios_backup_list(backup_dir, domain_filter="HomeDomain",
path_substring="Mail/V")
Extract Envelope Index (a SQLite DB) and query:
SELECT m.rowid, s.sender, su.subject,
datetime(m.date_received, 'unixepoch') AS ts,
m.size, m.flags
FROM messages m
LEFT JOIN addresses s ON m.sender = s.rowid
LEFT JOIN subjects su ON m.subject = su.rowid
ORDER BY m.date_received DESC LIMIT 200;
Each app keeps its own store — no universal schema. Common locations:
AppDomainGroup-group.net.whispersystems.signal.group/Documents/Signal.sqliteAppDomainGroup-group.net.whatsapp.WhatsApp.shared/ChatStorage.sqliteAppDomainGroup-ph.telegra.Telegraph/postbox/media/...AppDomain-com.tencent.xin/Library/Application Support/MicroMessenger/.../MM.sqliteFor each: list the domain with ios_backup_list, extract the primary SQLite, and apply query patterns similar to the SMS/messages analysis above. Pay attention to group memberships, invite links, and large media attachments from unknown senders.
Every suspicious URL, handle, phone number, email address, and attachment hash goes into a new STIX file:
mvt_check_iocs with the augmented feedFor every flagged communication: direction (incoming/outgoing), timestamp, remote handle, app / service, message excerpt, attachments, and the reason it was flagged (URL match / thread pattern / temporal correlation). Tie every claim to an extracted DB row.
attachment rows — the binary bytes live as backup files; follow the filename column into the backupnpx claudepluginhub s3cr1z/capabilities --plugin ios-forensicsProvides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.