Zero Breach Toolkit, version 0.1.6, run on this Mac 2026-10-28
One address, twenty-three saved records: what a spyware check found on this Mac
This page stands up one finished scan of a MacBook. It is the tool's own report, read back in plain words. It does not say the machine is clean and it does not say the machine is infected: it says what was looked at, what matched, and what could not be checked at all. The small raised numbers point at the sources table at the end.
The result
23 saved records matched one address from a list of 428 published spyware indicators. The address sits in the list under the family name Paragon Graphite (the name the indicator list gives that network), which has 23 indicators, and the tool describes it as advertising and tracking infrastructure belonging to that network.
The tool's own summary line is: RESULT: 1 indicator to review, recorded in 23 places; start with the saved context.
Read that as one thing to look at, found 23 times.
What “contacted” means here
All 23 matches carry the evidence grade contacted. The tool defines that grade as: the device demonstrably talked to it (a cookie it set, a secure-connection record, a download from it)
. In this case the record is a cookie: each match is a cookie named server_tracking_bdsp_uid (the name the advertising network gave it) that the address set in a browser profile on this Mac.
A match is evidence that needs interpretation by a qualified person. Read each finding's evidence grade: only a match of a known spyware file on disk is conclusive.
Advertising-network records alone do not show that you were selected for an exploit or infected. A connection can result from an ordinary ad.
Zero Breach Toolkit, in its required relay text and its human report
The tool's reporting code says the same thing in one line: The verdict for a hit is “investigate”, never “you are compromised” — an ad impression is not proof of infection
. So the honest reading of this page is: something on this Mac contacted infrastructure a published investigation lists as spyware delivery, and that is worth a person looking into. It is not a finding that spyware is installed.
The five things the tool requires anyone to pass on
The report carries five statements it says must be relayed in full. They are copied here without editing.
- This tool only looks for publicly documented indicators of known spyware. It cannot detect new or unpublished spyware, and the traces this spyware leaves usually expire within weeks.
- Do not delete, move, open or 'clean' the matched files or records. Keep the device and this report as evidence.
- A match is evidence that needs interpretation by a qualified person. Read each finding's evidence grade: only a match of a known spyware file on disk is conclusive.
- Some checks could not run (listed under not_checked). Nothing was cleared in those places.
- Only the small built-in indicator set was used. The larger published sets were unavailable for this scan (missing, unreadable or refused). Run --update, review the source status, then scan again.
Two terms in those statements: not_checked, the report's own name for the list of checks that could not run, is the list in the gaps section below; and --update, a switch the toolkit is started with, downloads fresh indicator lists from the published sources before a scan.
What the scan actually looked at
The scan started 28 Oct 2026, 02:21 and the report was closed on 2026-10-28. Four modules ran on this Mac: browser records, file hashes, the hosts file, and Unix startup and log files. Each module reports how much it read and how long it took.
How far back the records reach
The browser module found the oldest surviving web trace dated 2025-01-25, which is 640 days before the scan. Cookies reach back the same 640 days across 105 cookie stores. That is the oldest record that survived, not a continuous log: the tool's own note says the web cache is recycled within weeks, and that this date is often much older than the cache alone. That is why a date from 2025 can sit in a cookie found in 2026.
The honest oddity of browser evidence: page history reaches back further than the cache, but history records only page visits, and an ad loads inside a page. The tool puts it plainly: the long record cannot see ads, and the record that sees ads is not long. The 23 matches come from the short, ad-seeing record.
The records, grouped
Read the 23 matches together and they are one thing, seen nine times: one address, tracookiepixel[.]xyz, saved as cookies in 3 browser apps across 9 moments between 2025-08-22 and 2026-09-03. The tool counts 14 distinct artifacts behind those 23 records: the same cookie turns up in more than one profile, and repeated copies do not strengthen the result.
| When | Records | Apps |
|---|---|---|
| 22 Aug 2025, 11:56 | 4 | Chrome, ego lite, Dia |
| 5 Oct 2025, 15:36 | 3 | Chrome, ego lite, Dia |
| 24 Dec 2025, 09:04 | 4 | Chrome, ego lite, Dia |
| 13 Jan 2026, 11:38 | 3 | Chrome, ego lite, Dia |
| 22 Jan 2026, 19:48 | 3 | Chrome, ego lite, Dia |
| 27 Mar 2026, 15:00 | 2 | Chrome, ego lite |
| 21 Apr 2026, 08:25 | 2 | Chrome, ego lite |
| 17 Aug 2026, 18:42 | 1 | ego lite |
| 3 Sep 2026, 18:46 | 1 | Chrome |
| App | Records | Share |
|---|---|---|
| Chrome | 8 | 35% |
| ego lite | 10 | 43% |
| Dia | 5 | 22% |
Every row, as the report lists them
Timestamp, address, evidence type and module are the report's own fields. The last column is the app and profile the record was saved in, shortened from the report's file path; the path itself is not published here because it names this Mac's home folder.
| When | Address | Evidence | Module | Saved in |
|---|---|---|---|---|
| 22 Aug 2025, 11:56 | tracookiepixel[.]xyz | contacted | browser | Chrome, profile 11, cookies |
| 22 Aug 2025, 11:56 | tracookiepixel[.]xyz | contacted | browser | ego lite, profile 16, cookies |
| 22 Aug 2025, 11:56 | tracookiepixel[.]xyz | contacted | browser | ego lite, profile 1, cookies |
| 22 Aug 2025, 11:56 | tracookiepixel[.]xyz | contacted | browser | Dia, profile 4, cookies |
| 5 Oct 2025, 15:36 | tracookiepixel[.]xyz | contacted | browser | Chrome, profile 14, cookies |
| 5 Oct 2025, 15:36 | tracookiepixel[.]xyz | contacted | browser | ego lite, profile 17, cookies |
| 5 Oct 2025, 15:36 | tracookiepixel[.]xyz | contacted | browser | Dia, profile 5, cookies |
| 24 Dec 2025, 09:04 | tracookiepixel[.]xyz | contacted | browser | Chrome, profile 11, cookies |
| 24 Dec 2025, 09:04 | tracookiepixel[.]xyz | contacted | browser | ego lite, profile 16, cookies |
| 24 Dec 2025, 09:04 | tracookiepixel[.]xyz | contacted | browser | ego lite, profile 1, cookies |
| 24 Dec 2025, 09:04 | tracookiepixel[.]xyz | contacted | browser | Dia, profile 4, cookies |
| 13 Jan 2026, 11:38 | tracookiepixel[.]xyz | contacted | browser | Chrome, profile 2, cookies |
| 13 Jan 2026, 11:38 | tracookiepixel[.]xyz | contacted | browser | ego lite, profile 8, cookies |
| 13 Jan 2026, 11:38 | tracookiepixel[.]xyz | contacted | browser | Dia, profile 11, cookies |
| 22 Jan 2026, 19:48 | tracookiepixel[.]xyz | contacted | browser | Chrome, default profile, cookies |
| 22 Jan 2026, 19:48 | tracookiepixel[.]xyz | contacted | browser | ego lite, profile 6, cookies |
| 22 Jan 2026, 19:48 | tracookiepixel[.]xyz | contacted | browser | Dia, default profile, cookies |
| 27 Mar 2026, 15:00 | tracookiepixel[.]xyz | contacted | browser | Chrome, default profile, cookies |
| 27 Mar 2026, 15:00 | tracookiepixel[.]xyz | contacted | browser | ego lite, profile 6, cookies |
| 21 Apr 2026, 08:25 | tracookiepixel[.]xyz | contacted | browser | Chrome, default profile, cookies |
| 21 Apr 2026, 08:25 | tracookiepixel[.]xyz | contacted | browser | ego lite, profile 6, cookies |
| 17 Aug 2026, 18:42 | tracookiepixel[.]xyz | contacted | browser | ego lite, default profile, cookies |
| 3 Sep 2026, 18:46 | tracookiepixel[.]xyz | contacted | browser | Chrome, default profile, cookies |
The tool asks that indicator addresses be shared with the dot in brackets, as written here, so a reader cannot click through to them by accident. Do not visit or look up the address to investigate it.
The checks the browser module ran
The browser module lists 159 named checks: 158 ran and 1 could not. This is the tool's own list, searchable here in your browser, and nothing is added to it. Checks marked cookie store are the 44 checks that read the kind of record all 23 matches came from. Checks marked hit app are the 18 checks that read one of the three apps where those matches were saved: Chrome, ego lite and Dia (the tool lists ego lite as citro labs). The tool does not mark a single check as the one that produced a match, so these are its own check names, grouped, and nothing else is claimed.
Loading the check list.
- The list needs JavaScript, which this page runs entirely in your browser.
The list shows one page of matching checks at a time, which keeps the page small on a phone; the search box narrows the rest from the whole list. A check name ending in :cookies means that app's cookie store was read.
What could not be checked
The scan is marked partial, and it ends with exit code 2, which means matches were found. But the 34 listed gaps below are why a reader must not read this page as a clean bill of health. Nothing was cleared in the places listed below.
Every gap, line by line (34)
- browser/desktop-app web caches: the raw web caches of 10 desktop app(s) (0.9 GB) were not searched; use the full scan (--scan-type full) to include them. Supported cookies, history, connection records and storage are checked separately; see their individual gaps
- hash/root:~/Library/Application Support (partial): 18 of 67027 candidate file(s) under this root were not compared against the known hashes (2 permission denied, 16 over 120 MB; macOS privacy protection blocks some folders: give Terminal Full Disk Access (System Settings > Privacy & Security > Full Disk Access) and run again)
- hash/root:/Applications (partial): 47 of 21378 candidate file(s) under this root were not compared against the known hashes (47 over 120 MB)
- hash/root:/private/tmp (partial): 3 of 28001 candidate file(s) under this root were not compared against the known hashes (1 permission denied, 2 over 120 MB; macOS privacy protection blocks some folders: give Terminal Full Disk Access (System Settings > Privacy & Security > Full Disk Access) and run again)
- unix-host/macos-launch-items: 2 files under ~/Library/LaunchAgents, for example ~/Library/LaunchAgents/space.berkle.gk-session-ended.plist could not be used: not well-formed (invalid token): line 4, column 60
- indicators/indicator-sources: amnesty-android-campaign-2023: indicator source missing
- indicators/indicator-sources: amnesty-cytrox-2021: indicator source missing
- indicators/indicator-sources: amnesty-finfisher-2020: indicator source missing
- indicators/indicator-sources: amnesty-novispy-2024: indicator source missing
- indicators/indicator-sources: amnesty-nso-2018: indicator source missing
- indicators/indicator-sources: amnesty-nso-morocco-2019: indicator source missing
- indicators/indicator-sources: amnesty-pegasus-2021: indicator source missing
- indicators/indicator-sources: amnesty-wintego-helios-2024: indicator source missing
- indicators/indicator-sources: citizenlab-cyberbit-2017: indicator source missing
- indicators/indicator-sources: citizenlab-kingdom-2018: indicator source missing
- indicators/indicator-sources: citizenlab-nso-2016: indicator source missing
- indicators/indicator-sources: citizenlab-nso-insider-2017: indicator source missing
- indicators/indicator-sources: citizenlab-nso-mexico-exploit-2017: indicator source missing
- indicators/indicator-sources: citizenlab-nso-mexico-redux-2017: indicator source missing
- indicators/indicator-sources: echap-stalkerware: indicator source missing
- indicators/indicator-sources: mvt-btmob: indicator source missing
- indicators/indicator-sources: mvt-candiru: indicator source missing
- indicators/indicator-sources: mvt-cellebrite: indicator source missing
- indicators/indicator-sources: mvt-coruna: indicator source missing
- indicators/indicator-sources: mvt-darksword: indicator source missing
- indicators/indicator-sources: mvt-eaglemsgspy: indicator source missing
- indicators/indicator-sources: mvt-morpheus: indicator source missing
- indicators/indicator-sources: mvt-operation-triangulation: indicator source missing
- indicators/indicator-sources: mvt-predator: indicator source missing
- indicators/indicator-sources: mvt-quadream-kingspawn: indicator source missing
- indicators/indicator-sources: mvt-rcs-lab: indicator source missing
- indicators/indicator-sources: mvt-residentbat: indicator source missing
- indicators/indicator-sources: mvt-spyrtacus: indicator source missing
- indicators/indicator-sources: mvt-wyrmspy-dragonegg: indicator source missing
Home-folder paths in the quotes above are shortened to ~; the wording is otherwise the report's own.
Sources and the tool's own limits
Every figure on this page was read from the machine report of one finished scan. The table names, for each source, where it comes from and what it backs. The report also carries a 64-character check code over its indicator set, starting ae4dcd5a66bf5fa1, so a copy of the report can be compared against this one.
| # | Source | What it backs |
|---|---|---|
| 1 | The scan's machine report, zb-m3.json, written 2026-10-28 | Every count, duration, module status, hit row, gap and quote of the report on this page |
| 2 | The scan's human report, zb-m3.md | The quoted RESULT line |
| 3 | Zero Breach Toolkit, version 0.1.6, github.com/interplains/Zero-Breach-Toolkit | The evidence-grade wording, the reporting rule for a hit, the five relay statements, and the advice not to delete or visit anything |
| 4 | The indicator set used: 428 indicators, 3 days old, not stale; 2 curated files | The indicator count, the family name and how current the list was |
| 5 | The toolkit's docs/METHODOLOGY.md, evidence grades table | The definition of the “contacted” grade quoted above |
| 6 | The toolkit's PRIVACY.md and README.md | The privacy limit quoted below |
| File | Usable indicators | Dated |
|---|---|---|
adfection_iocs.txt | 405 | 2026-10-28 |
curated_mercenary.txt | 23 | 2026-10-25 |
The limits, in the tool's words
This tool only looks for publicly documented indicators of known spyware. It cannot detect new or unpublished spyware, and the traces this spyware leaves usually expire within weeks.
A scan makes no intentional network requests and has no upload feature.
Zero Breach Toolkit, required relay text and PRIVACY.md
- “Read-only local evidence; no infection-free guarantee.”
- “File hashing remains bounded to 120 MiB per file.”
- “Full means broader checks in the usual roots, not every drive or every user.”
Those three lines are the report's own scope limits, copied unchanged.
What this page does not say
It does not say the Mac is clean: 34 gaps and a partial scan rule that out. It does not say the Mac is infected: a contacted match is a weak grade, and the tool's own words are that only a known spyware file on disk is conclusive. It reports what was found, what was read to find it, and what was left unread.
Words used here
- DNS record
- A saved name lookup: the record that a name was asked for, which does not show whether anything answered.
- MVT
- The Mobile Verification Toolkit, a published phone-forensics tool that keeps lists of spyware addresses.
- POSIX
- The standard interface that Unix-like systems such as macOS share.
- SQLite
- A database kept in one file; browsers use it for cookies, history and saved site data.
Built from the finished report at /tmp/scan/zb-m3.json on 2026-10-28. The page is one file with no outside requests: the styles, the font and the check list are all inside it. Numbers are copied by scripts/build.ts from named fields, never typed by hand; SOURCES.md beside this page lists the field behind each headline figure.
Addresses appear with the dot in brackets, as the tool asks. Do not visit them.