Sign in

Internal ICP & Landscape Brief

Internal.


A Zyxel NAS326 network-storage firmware image, 521AAZF4C0.bin, is 59,389,563 bytes and unpacks to 6,789 files. Reading it end to end names eighteen bundled components and eleven distinct published CVEs against them, the five jQuery versions folded onto one row:

component      version           files  CVEs
openssl        1.0.2h                2  CVE-2019-1559, CVE-2021-3711,
                                        CVE-2021-3712, CVE-2022-0778
busybox        1.19.4                4  CVE-2018-1000517, CVE-2021-42378,
                                        CVE-2022-30065
openssh        2.3.0                 2  CVE-2020-14145, CVE-2021-41617
openssh        6.7p1                 1  CVE-2020-14145, CVE-2021-41617
zysh           —                     8  CVE-2022-30525
firmware       V5.21(AAZF.4)         1  CVE-2020-9054
weblogin.cgi   —                     1  CVE-2020-9054
apache-httpd   —                 3,250
cups           —                    41
samba          —                    10
linux-kernel   3.10.39               2
bootstrap      3.1.1                 2
jquery         1.3.2 … 1.11.1        1 each
setuptools     7.0                   1

The most serious row needed no file opened at all. The container header declares its own version, V5.21(AAZF.4), and AAZF.4 through .6 carry CVE-2020-9054 — a pre-authentication OS command injection in weblogin.cgi, patched in AAZF.7. The rest come from version strings recovered out of the binaries, path patterns, web-library banners and a package manifest. Nothing was executed. Three of the eighteen — zysh, weblogin.cgi and the synthetic firmware row — are vendor-specific rather than upstream, which is the share of this bill of materials no public advisory feed will ever key on. The unpack also ledgers 894 recognised entries it did not descend into, by reason: 861 already-seen repeats, 30 with no extractor, 3 past the three-level depth limit — without which a partially covered image is indistinguishable from a fully covered one. Full mechanism in CVEs & SBOM.

That artifact is the product in miniature: unpack what a vendor actually ships, name what is inside it, and attribute known vulnerabilities to the named versions — statically, offline, on an embedded root filesystem no desktop RE workflow is built for.

Orientation

SectionWhat it answers
Market gapWhy nobody can read what a compiled binary does, and which roles hit that wall
Shipped capabilitiesWhat is built and measured today — formats, extractors, packages, CWE, library signatures, malware, agent tools
Deployment modelsCloud, on-prem, air-gapped, OEM embed
Market signalsExternal evidence: the macOS stealer surge, enterprise Mac share, the 11 December 2027 CRA deadline
Buyer archetypes15 archetypes, each with named accounts, pain, what to lead with, and licensing motion
Competitive landscape17 categories and the position taken in each
DifferentiatorsSix capabilities with no equivalent elsewhere
Known limitsEleven measured limits to state before a buyer finds them
Pricing and deal shapeSix deployment-model ranges, all hypotheses

Market gap: unreadable binary behavior

The behavior of the compiled binaries an organization runs is not recorded anywhere the organization can read. Every organization runs thousands of them — system services and vendor agents on workstations, daemons on Linux servers, firmware inside the routers and appliances at the network edge, executables shipped by every third-party software vendor.

SOC analysts, threat-intel researchers, MSSP analysts, IR responders, firmware auditors and sectoral CERTs all hit the same wall. Understanding one binary means IDA or Ghidra and a specialist. The cheap move on an unknown binary is a VirusTotal hash lookup, which returns a reputation and no behavioral profile, capability map, or explanation.

On the enterprise side the same gap blocks every security decision involving software: vetting a vendor agent before it deploys to 10,000 endpoints, assessing the blast radius of a macOS or Linux upgrade, auditing the firmware on the network edge, surveying the supply chain. Hash lookups, reputation scores and vendor trust are what fill it, and none of them answer what a binary accesses, contacts, or collects.


Shipped capabilities

Analysis is static, offline and package-shaped: 58 loadable formats and 72 instruction sets in the workspace, 170 container identities on the unpack side, and a binary, firmware image, container or OS release ingesting as a single unit.

Formats and instruction sets

Format and architecture support is a compile-time set, so the workspace counts are not the counts in the shipped command-line and worker builds. Feed the shipped binary a .wasm or a .pyc and it answers unsupported or unrecognized binary format (expected Mach-O ..., PE ..., or ELF64-LE ...).

CountWhat it countsIn the shipped default build
58formats recognized as loadable images4 — Mach-O unconditionally, plus PE, ELF and UEFI Terse Executable
72instruction sets claimed, across three measured tiers33
48of those instruction sets reaching IL — 39 native lifted plus 9 bytecode VMs — where taint, CWE detectors, interval analysis and argument recovery run33: 32 of the 39 lifted, plus CIL of the 9 bytecode VMs

Identification is a separate, ungated layer: a default build still names all 170 format identities by magic, so it can name a .dex it cannot open.

Mach-O, ELF and PE32+ on arm64 / arm64e / x86_64 are first-class, and those reconstruct to a Rust project whose compilation is reported per binary as a measured result. Per-format and per-architecture breakdown in Architectures.

Container formats and extractors

The identify authority is a closed enum of 170 format identities, of which 112 route to a working extractor:

CountWhat it countsDisposition
170format identities — filesystems, archives, single-stream compression, firmware carriers, disk images, Docker/OCI tarballsthe whole closed enum
112identities routing to a working extractor, resolving to 109 distinct extractorsdescended into
12crypto constant tables and key markers — five AES tables, CRC32, DPAPI, LUKS, MD5, PKCS DER, RSA, SHA-256nothing to descend into
6Btrfs, LogFS, the Seama firmware carrier, Qualcomm MBN, .Z compress, Zlibgenuine gaps: recognised, counted as a skip carrying a reason, left unopened
40media, font and document leaves; in-binary evidence markers; and the three formats the engine ingests directly (ELF, PE, UEFI TE)leaves, or routed to the analysis engine instead

Two of the six gaps are a wiring decision rather than absent code: the .Z and Zlib extractors exist but are reachable only by name from carrier-aware paths, so a top-level signature hit on either is dropped as a ledgered skip. PEM certificates, PEM keys and OpenSSL enc blobs are crypto identities that route to an extractor rather than counting as inert markers.

Adding an identity fails to compile until the extractor question is answered explicitly, so no format falls through by omission. Budgets, path sanitization and the packed-to-payload verdict handoff are in Unpacking.

Packages as the unit of analysis

A binary, a firmware image, a Docker/OCI image or an entire OS distribution ingests as one package; every binary inside is analyzed and the package carries its own composition, SBOM and security rollup.

Package typePackagesMember binaries
Linux distribution releases10372,868
BSD releases2429,567
Firmware images229,372 extracted children
Development-package sets2
Total (public corpus)131

Storage is content-addressed, so 56,591 distinct binaries back those memberships — the same busybox present in three releases is one analysis and three membership rows.

Release harvesting runs off a checked-in catalog of 611 rows:

SourceCatalog rows
Apple IPSW restore images382
Docker base images88
BSD releases31
MSYS2 package sets28
winget installers21
Windows OS-baseline DLLs (Microsoft symbol server)16
Debian packages14
NuGet8
Chocolatey7
Alpine5
RPM4
Windows images4
BSD comp sets3
Total611

Binary and source CWE in one pass

Compiled binaries and the interpreted source bundled beside them are scanned on the same unpack, and both emit the same finding shape into the same store and the same SARIF 2.1.0 run. Compiled binaries get binary-level CWE findings from the IL taint and memory-safety engine. The interpreted source inside the same package — JavaScript, Python, PHP, Ruby, Go, Java, C#, Swift, Kotlin, Scala, Clojure, OCaml, Bash, Dockerfile, Terraform and more — gets source-level SAST findings. Where a catalog row names both engines it is literally the same rule firing, and that overlap is narrow:

Catalog rowsWhat they name
1,190carry a detector list
106name more than one engine
97pair the binary engine with a source engine — the source side is C in 96 of them
9pair two source engines (Java with Kotlin)

Outside C, no rule spans both engines: every other language above gets source rules that stand alone. See Source SAST and Findings.

Library identification

Bundled libraries are named in shipped binaries even when stripped, across five signature surfaces, each giving up something different to survive a different loss:

SurfaceReachesMatches through
Quad-hash (Ghidra FunctionID)ELF, 6 architectures, 2,118 library namesrelocation and PIE operand rewrites; carries a version
FLARE FLIRT (1,236,310 entries)PE with the MSVC ABIsymbol stripping
Trained FLIRT .pat (1,015 packs, 99 libraries)13 of the 27 format-and-architecture combinationssymbol stripping, MinGW/GCC ABI
Body hash (3,797 names, 11 SoC builds)Mach-O — XNU kernels onlysymbol stripping
Prologue + string/constant (87,828 hashes, 219 libraries)any formatrecompilation; fuzzy, carries a version

That naming is what feeds the binary-level SBOM (CycloneDX 1.6 / SPDX 3.0) and its CVE attribution. Mechanism and per-architecture rates in Fingerprinting.

The shipped coverage command and the corpus-statistics API read 3 of the 6 bundled quad-hash corpora, omitting the ARM, MIPS and OpenWrt ones, so both under-count the signature database by 27%:

Quad-hashBundledReported
Signatures1,835,5571,332,153
Architectures63
Library names2,1181,225

A buyer who runs the coverage command sees the right-hand column.

Malware detection and config extraction

The capability catalog is a 1,031-row classification of the pinned capa rule snapshot, and the verdict engine runs on Mach-O, ELF and PE against a 1,729-sample corpus:

DispositionRowsWhat it means
Native TOML detectors828reproduced directly
Fingerprint subsystem157routed there because they identify what a binary is
Structural Rust detectors11reproduced in Rust rather than TOML
Not ported35no detector
Total1,031the pinned capa rule snapshot

DNA similarity clusters unknown samples against known families. UPX is unpacked natively so a packed sample is judged on its real payload. Config extraction has two paths that should not be conflated: the AmosStealer extractor, which recovers configs in production by statically replaying the sample's own obfuscation arithmetic over its constant tables, and the general bounded emulator over the analysis IL, whose mechanism is proven on fixtures and whose last real-corpus sweep recovered nothing. See Malware.

MCP agent tools

The MCP server exposes 48 tools: search, DSL query, per-function decompile, call-graph reachability with witness paths, package walking, SARIF export, and write-capable annotations.


Deployment models

Deployment runs from browser-only SaaS to an air-gapped pair of service binaries and an OEM embed.

ModelShape
Cloud / SaaSWeb + REST API from a browser. No install.
On-premTwo service binaries — openbinaryd (coordinator: API, search, storage) and openbinary-workerd (analysis worker). One coordinator box, N worker boxes.
Air-gappedSame two binaries, no cloud. Deployable in a SCIF. The vulnerability corpus is not bundled: it is a separately shipped artifact with an operational refresh process, or an internal https mirror substituted for the canonical source URLs.
OEM / embeddedNo GUI, bolts into an endpoint agent. Rust apart from five linked C and assembly libraries the host inherits, named in Known limits. The single-file CLI is 208 MB today, almost all of it bundled signature data, so an embed needs a trimmed build before any size figure is quotable.

Market signals

Two independently documented trends carry the thesis — macOS threat volume and enterprise Mac share are both rising — and a third sets a legal deadline for firmware SBOM on 11 December 2027.


Buyer archetypes

Fifteen archetypes buy different capabilities out of the same pipeline.

ArchetypeWhoLead with
Mac-focused MDR / EDRHuntress, Red Canary, Jamf Protect, Iru, Mosyle, Sophos, ExpelPre-execution behavioral profile — capabilities, entitlements, XPC surface, resolved call sites — plus DSL queries and a per-type anomaly flag. SaaS or OEM-embed
Firmware & IoT vendorsZyxel, Asus, TP-Link, Netgear, Synology, QNAP, Cisco, Juniper, Fortinet, Palo Alto, Ubiquiti, mid-market OEMsPre-ship firmware audit — SBOM with CVE attribution plus binary CWE findings, CRA-compliant inventory, one pipeline
OT / ICS securityClaroty, Nozomi Networks, Armis, Dragos, Microsoft Defender for IoTFirmware unpack + binary analysis as input to their asset-and-risk products. Data-feed or OEM
Developers & CI/CDPlatform / AppSec / release-engineering teams shipping compiled softwareGate on the built artifact: CWE+CVE, hardening posture, real-vs-declared SBOM drift, secrets, signing — fail the build
Container & cloud-native vendorsDocker/OCI publishers, base-image builders, containerized ISVsAudit every compiled binary inside the image, at the layer manifest scanners miss
Enterprise app inventory & SBOM (CRA)Product-security, compliance, procurement; CRA-regulated manufacturers and operatorsEstate-wide inventory + CRA-grade SBOM (CycloneDX 1.6 / SPDX 3.0), binary and source CWE, CVE attribution, per-release diff
Binary-centric threat intelStairwell, ReversingLabs, IntezerBehavioral depth as an upstream data feed; category overlap at the high end
Malware research / CTIKaspersky GReAT, Mandiant Intel, Microsoft TI, ESET, Talos, Recorded Future, Flashpoint, Intel 471DNA similarity, ATT&CK-tagged indicators, static config extraction, JSONL as a licensable feed
RE / audit firmsNCC Group, Trail of Bits, Leviathan, Include Security, Atredis, Doyensec, Assetnote, SynackRust reconstruction + the XPC audit-matrix. Per-seat or per-engagement
Endpoint XDR majors (OEM)CrowdStrike, SentinelOne, Cortex XDR, Defender, Sophos, Jamf Protect, Iru, MosyleEmbeddable library, no GUI, five linked C dependencies. Highest LTV, longest cycle
Supply-chain securityJFrog Xray, ReversingLabs Spectra; adjacent SCA (Snyk, Black Duck, GitHub Adv. Sec., Endor)Binary-level SBOM from five signature surfaces; libraries named in stripped binaries, versioned on one surface
IR firmsMandiant (Google), Kroll, CrowdStrike Services, Stroz Friedberg, Volexity, Secureworks IRAir-gap install, scan the victim's system, diff against a known-good baseline. Per-engagement
Enterprise CISOs (Mac fleets)Cross-industryReached through the MDR / security-vendor channel rather than direct
Government, defense, intelDoD components, CISA, Sandia, Los Alamos, FVEY, three-letter agenciesTwo binaries, no cloud, air-gap deployable. Site-license via cleared channel partners
Cyber insurance underwritersResilience, Coalition, At-Bay, Corvus, BeazleyExperimental — quantified fleet-risk data feed

Mac-focused MDR / EDR

Names. Huntress, Red Canary, Jamf Protect, Iru (formerly Kandji), Mosyle, Sophos MDR, Expel.

Pain. Their static macOS analysis is hash reputation plus signing state plus runtime telemetry. The pre-execution question — what can this specific unknown binary do — is almost universally unanswered.

Lead with. Behavioral profile before execution: 457 BSD syscalls and 62 Mach traps resolved, 1,209 Apple framework and runtime symbols across 54 dimensions (1,105 of them recognised, 91.4% — the shortfalls are named per framework, worst at the Swift runtime's 2 of 51), a ten-domain Apple capability map built from entitlement, framework and syscall evidence together, code-signature entitlements read without running anything, and the XPC surface. DSL queries over the corpus and a per-type anomaly flag on top.

What 1,105 of 1,209 measures. A word-boundary search for each symbol name across the dispatch sources — the name is referenced somewhere that routes on it. Quotable as coverage breadth, not as per-symbol semantics.

Motion. SaaS or OEM-embed.

Firmware & IoT vendors

Names. Networking and edge — Zyxel, Asus, TP-Link, Netgear, D-Link, Ubiquiti. Enterprise — Cisco appliances, Juniper, Fortinet, Palo Alto, Sonicwall, Check Point. Storage and NAS — Synology, QNAP, Asustor. Industrial gateways, SBC OEMs, white-label appliance builders.

Pain. CRA forces a machine-readable SBOM plus vulnerability handling on every connected product by 11 December 2027. Most OEMs have no clean inventory of what is bundled in their own firmware, let alone CVE attribution against it. Internal RE audits by hand and misses things.

Lead with. One pipeline: unpack the firmware, CWE findings on every extracted binary and on the interpreted source bundled alongside (JavaScript, Python, PHP, shell — most firmware ships plenty), SBOM with CVE attribution at both the component and firmware-header layers, and a release-over-release package diff naming every added, removed and changed binary between two image versions, with per-row verdict, highest CVE severity and KEV flag.

Worked vendor: Zyxel. Both proprietary carriers (2RDH and SIG) are first-class format identities, and eight firmware-version rules are in place:

ProductVersion keysCVEs
NAS326AAZF.4, AAZF.5, AAZF.6CVE-2020-9054
VMG88257.3.245.300CVE-2024-40891, CVE-2025-0890
ZyWALL / USGV4.6, V4.70, V4.71, V4.72CVE-2023-28771

The NAS326 image is also the fixture behind two curated detectors: an unauthenticated-CGI shape, and an open-redirect on weblogin.cgi's Location: http://%s/zyxel/loginwrap.html?redirectto=%s template. 5 of that image's 16 Apache CGIs link the libgcgi request-parsing helper, which reads the request internally: weblogin.cgi and export-cgi never call getenv themselves, setuser.cgi uses the library and getenv. The detector fires on either signal rather than requiring both.

Rule limits. A firmware version rule is a version substring and a CVE list, and nothing else — no vendor or product field, so the product column above is editorial. Any firmware whose declared version contains V4.6 is attributed CVE-2023-28771 regardless of who made it, and the substring is bare, so V4.6 also matches a hypothetical V4.65. Each rule needs a published vendor advisory naming a range, so the table grows one vendor at a time.

Motion. Air-gap deployable, no GUI. Per-engagement, annual site license, or OEM-embed.

OT / ICS security

Names. Claroty, Nozomi Networks, Armis, Dragos, Microsoft Defender for IoT, Forescout (eyeInspect), Tenable OT.

Pain. Asset-discovery and protocol-anomaly products know what is on the network but not what is inside the firmware running on those assets. Customers increasingly ask the OT vendor for the CVE-and-CWE story on the firmware they are actually operating, not just the asset inventory.

Lead with. Firmware unpack plus binary analysis as an upstream data feed. They own asset and network context; openbinary supplies firmware truth.

Motion. Data-feed or OEM-embed.

Developers & CI/CD (DevSecOps)

Names. Platform-engineering, AppSec and release-engineering teams inside any org shipping compiled software — desktop apps, agents, SDKs, drivers, embedded binaries. Reached through CI integrations (GitHub Actions, GitLab CI, Jenkins, Buildkite) and the REST API, not a named-account sales motion.

Pain. Source SCA reads manifests and lockfiles; it never inspects the artifact that ships. A build can regress every binary-layer property and nothing in the pipeline notices: a hardening flag flips off, the shipped binary's real dependency set drifts from the declared SBOM, junk accumulates (unexpected data segments, leftover debug strings, embedded secrets), version and publisher metadata is wrong, or the artifact ships unsigned. None of it is visible until someone reverse-engineers the release.

Lead with. Hardening posture is measured per binary and emitted as findings, not inferred from a build flag. Across a public corpus of 56,591 distinct binaries — 53,434 of them carrying analysis results, and 271 that analyze to an empty one:

Posture findingBinaries firing
posture.elf.no-fortify37,511
posture.elf.no-stack-canaries27,448
posture.elf.no-cet-shadow-stack20,412
posture.elf.no-gnu-stack19,516
posture.elf.no-cet-ibt19,440
posture.elf.no-relro19,142
posture.elf.partial-relro15,187
posture.elf.no-pie3,974

Those are all ELF rules. The parallel posture.pe.* rules — unsigned, no ASLR, no CFG, no GS cookie — fire in single digits corpus-wide, because the corpus is Linux and BSD releases, so PE hardening posture is implemented and effectively unmeasured.

A canonicalised hash over those bits changes when posture changes, which is the regression signal. Alongside it: CWE findings and CVE attribution, real-vs-declared SBOM drift with CycloneDX 1.6 / SPDX 3.0 export, declared-vs-used consistency flags, a secrets scan, signing and publisher verification, and the package diff as the release-gate report. REST API, JSON and SARIF 2.1.0 straight into GitHub code scanning. This is the producer side of the supply chain, distinct from the consumer-side vetting in Supply-chain security.

Motion. Self-serve and usage-based at the bottom, expanding to a team or org license.

Container & cloud-native image vendors

Names. Teams shipping a whole image rather than a single binary — Docker / OCI publishers, base-image and golden-image builders, ISVs distributing containerized products, internal platform teams. Same "audit everything inside the artifact" shape as firmware, different carrier.

Pain. Container scanners (Trivy, Grype, Docker Scout, Aqua, Sysdig, Prisma Cloud, Wiz) read OS package databases and language lockfiles inside the image. The compiled binaries the image actually executes — vendored static libraries, custom daemons, downloaded-at-build executables, anything not installed by a package manager — are a blind spot: no CWE findings, no hardening posture, no real SBOM, no signing check at the binary layer.

Lead with. A docker save / OCI tarball goes through the same pipeline as firmware: every executable inside gets binary-level CWE findings, SBOM with CVE attribution, hardening posture and a secrets scan, at the layer the package manifest cannot see. One report across the whole image, plus an image-to-image diff (tag to tag, or against the upstream base).

Motion. Air-gap deployable, OEM-embeddable, or a CI gate alongside the existing image scanner rather than replacing it.

Enterprise app inventory & SBOM (CRA)

Names. Product-security, compliance and procurement teams at any enterprise placing connected products on the EU market or attesting to the software it ships and runs — CRA-regulated manufacturers, plus regulated operators (energy, finance, healthcare, public sector) building an authoritative application inventory. Often reached through the same channel as the firmware-vendor and developer motions.

Pain. The CRA applies in full 11 December 2027; US EO 14028 imposes parallel SBOM duties on federal procurement. Most enterprises have no authoritative inventory of the compiled apps and embedded components they ship or operate. Source SCA covers the code they wrote — not the binaries they buy, the third-party artifacts they bundle, or the scripts riding inside an image. The result is an SBOM that stops at the manifest and a deadline with nothing to evidence against.

Lead with. One estate-wide inventory at the artifact layer: every app, firmware image and container, every compiled binary and bundled script inside, with a CRA-grade SBOM, CVE attribution, binary-and-source CWE findings, and a per-release diff. Scan the portfolio once, diff each release, export the SBOM the regulation asks for. Distinct from the Mac-fleet CISO motion, which is endpoint posture — this is the compliance inventory of the software an enterprise ships and operates.

Version-precision ceiling. Only 69.6% of the bundled quad-hash signatures carry a version precise enough to answer a CVE range. It does not generalise to the other four surfaces: the 1,236,310-entry FLARE corpus and the trained .pat packs record no version at all, so a library named through either is named without one. State it before a buyer tests it.

Motion. On-prem or SaaS; annual site license priced by estate size.

Binary-centric threat intel platforms

Names. Three platforms, none of which publishes pricing:

PlayerScalePosition
Stairwell1B+ malware samples, 8.2B file sightings, 2T+ DNS records, ~1M files/day private corpusGenAI alert triage shipped May 2025
ReversingLabsTitanium ~40B files/daySpectra Assure for supply-chain; named in the 2025 Gartner Market Guide for SSCS
Intezer$5.3M revenue 2025, much smaller than Stairwell or RLGenetic code analysis, SOC automation

Lead with. Depth their platforms do not carry — macOS entitlements and XPC surface, resolved call-site signatures, capa-aligned indicators with ATT&CK, plus firmware SBOM with CVE.

Motion. Two live paths:

Malware research / CTI

Names. Kaspersky GReAT, Mandiant Intel (Google TI), Microsoft Threat Intelligence, ESET Research, Trend Micro, CrowdStrike Intelligence, Cisco Talos, Recorded Future, Flashpoint, Intel 471.

Pain. Mac malware coverage is thinner than Windows across most incumbents. Senior researchers use IDA, Ghidra or Binary Ninja for deep dives. The gap is triage at scale and ATT&CK coverage rollups that feed intel products.

Lead with. DNA similarity search and the capa-aligned capability catalog pre-tagged with ATT&CK, with UPX unpacked natively so packed samples are judged on the real payload. JSONL export as a licensable feed.

Do not overclaim. Static config extraction is a demo on AmosStealer and a research collaboration on anything else — the general emulator path has never recovered a config from a corpus sample. No recall number off the 1,729-sample corpus is quotable to a Windows- or Linux-focused team: 1,336 of those samples are Mach-O and exactly 1 is ELF.

Motion. License to research teams or as a data product.

RE / audit firms

Names. NCC Group, Trail of Bits, Leviathan, Include Security, Atredis, Doyensec, Assetnote, Synack, and boutiques.

Pain. The working premise is that mechanical triage eats most of an engagement's hours at rates the client increasingly resists. No engagement has been instrumented to confirm the share, so it is a hypothesis to test in the first three conversations, not a figure to quote back.

Lead with. Reconstruction to a Rust project with typed interfaces, XPC protocol traits and per-function confidence scores, with the compile result reported rather than promised, plus audit-matrix — per-XPC-entry verifier and privileged reachability with a dominance flag.

Motion. Per-seat or per-engagement licensing.

Endpoint security vendors (OEM-embed)

Names. CrowdStrike Falcon, SentinelOne, Palo Alto Cortex XDR, Microsoft Defender for Endpoint, Sophos, Jamf Protect, Iru, Mosyle.

Pain. Their macOS static analysis is a score, not an explanation.

Lead with. No GUI, bolts into an agent. Rust apart from five linked C and assembly libraries the host inherits, named in Known limits — AWS-LC crypto first among them, and the first thing a vendor's build team will check. Commit to no size or latency figure: the shipped build is 208 MB and takes 0.56–0.74 s on a 154 KB Mach-O, and the trimmed-corpus build an agent would actually embed does not exist yet.

Motion. Longest sales cycle of any archetype; highest LTV.

Supply-chain security tools

Names.

BucketPlayersOverlap
Closest matchJFrog Xray, ReversingLabs Spectra AssureBoth scan compiled artifacts
Adjacent (source/manifest SCA)Snyk, Black Duck / Synopsys, GitHub Advanced Security, Endor LabsOperate above the binary layer. Partnership plausible if they want to extend down to shipped binaries
Different axis (registry detection)Socket (npm), Phylum (cross-registry)Watch package registries, not compiled executables. Not direct overlap
Not in this categoryChainguardHardened Linux container base images, not binary SCA

Lead with. Library and function recognition spans five independent signature surfaces, so a bundled library is named in a shipped binary even when the symbol table is gone — which is what turns a stripped vendor artifact into a binary-level SBOM with CVE attribution. Quad-hash is the tier whose versions are precise enough to answer a CVE range, and its largest single source is a BSD corpus contributing 842,583 signatures over 505 libraries; the enterprise CRA-inventory motion turns this into its own ICP.

IR firms

Names. Mandiant (Google), Kroll, CrowdStrike Services, Stroz Friedberg, Volexity, Secureworks IR.

Lead with. Air-gap install, scan the victim's system, then diff the whole system against a known-good baseline — added, removed and changed binaries surface implants and tampering directly, with per-row verdict enrichment on the diff.

Motion. Per-engagement license. Low-ACV, high-velocity, repeating.

Enterprise CISOs with Mac fleets

Names. Cross-industry.

Lead with. Vendor-agent vetting, macOS upgrade impact, supply-chain audit.

Motion. Frequently reached through the MDR / security-vendor channel rather than direct.

Government, defense, intel

Names. DoD component teams, CISA, Sandia, Los Alamos, FVEY partners, three-letter agencies.

Lead with. Two binaries, no cloud, air-gap deployable. The vulnerability corpus is a separately shipped artifact that goes stale at exactly the rate the operator refreshes it; everything outside vulnerability matching runs offline.

Motion. Site-license via cleared channel partners.

Cyber insurance underwriters

Names. Resilience, Coalition, At-Bay, Corvus, Beazley.

Lead with. Quantified fleet-risk data feed.

Motion. Experimental. One underwriter win, rest follow.


Competitive landscape

Direct overlap is confined to artifact scanning, firmware SBOM tooling, and — on expansion into fleet retroactive hunt — binary-centric threat intel. The rest of the landscape is adjacent, orthogonal, or downstream.

CategoryPlayersPosition
Binary-centric threat intelStairwell, ReversingLabs (Spectra / Titanium), IntezerPartner upstream as a data feed, or compete at fleet-hunt on expansion. Both live.
Interactive RE workbenchesGhidra, IDA Pro, Binary Ninja, Radare2, HopperComplementary. They deep-dive one binary; openbinary batches, indexes and triages a corpus.
Dynamic sandboxesVirusTotal, Joe Sandbox, ANY.RUN, Hatching Triage, Falcon SandboxOrthogonal. They execute; openbinary never does. Most buyers use both.
Source / manifest SCASnyk, Black Duck / Synopsys, GitHub Adv. Sec., Endor Labs, MendAdjacent. Partnership plausible if they want to extend down to compiled binaries.
Source SAST / code scanningSemgrep, CodeQL (GitHub), SonarQube, Checkmarx, Snyk CodeThey scan a source repo you point them at. openbinary runs SAST CWE on the source bundled inside a firmware or container, alongside binary CWE on the same unpack. Overlap only on the source layer.
App-inventory / SBOM managementAnchore, Dependency-Track, FOSSA, Manifest, JFrogThey manage and store SBOMs; most ingest a generated SBOM rather than producing one from the shipped artifact. openbinary generates it from the binary-and-source truth of the package. Feed-in or compete on generation.
Artifact / binary-scanning SCJFrog Xray, ReversingLabs Spectra AssureClosest direct overlap on compiled-binary scanning.
Container image scanningTrivy, Grype, Docker Scout, Aqua, Sysdig, Prisma Cloud, WizAdjacent — they read OS and language package manifests inside the image; openbinary analyzes the compiled binaries that manifest cannot see. Sits alongside, not against.
CI/CD binary gatesNo direct incumbent — source SCA and container scanners both stop at manifestsNet-new gate at the artifact layer: hardening posture, real-vs-declared SBOM drift, binary CWE/CVE, signing.
Firmware SBOM / IoT binary auditMicrosoft (ReFirm Labs), Finite State, Netrise, Onekey, Binarly, Fraunhofer FACT, EMBADirect overlap on the firmware-unpack + binary-CWE + SBOM-with-CVE surface. Differentiated by air-gap deploy, embeddable with no GUI, and the cross-OS binary depth on top.
OT / ICS security platformsClaroty, Nozomi, Armis, Dragos, Microsoft Defender for IoTAdjacent — they own asset and network telemetry, openbinary feeds firmware truth. Data-feed or OEM-embed.
Registry malicious-package detectionSocket, PhylumDifferent axis — they watch npm and PyPI, not compiled executables.
Hardened container imagesChainguardDifferent product, different OS.
CTI feedsRecorded Future, Mandiant Intel (Google TI), Microsoft TI, Flashpoint, Intel 471Downstream consumers. Resolved signatures, ATT&CK rollup and DNA are a licensable data product.
Mac MDR / EDRHuntress, Red Canary, Jamf Protect, Iru, Mosyle, Sophos, ExpelEarly conversation targets. Most rely on hash reputation plus runtime telemetry; the behavioral layer is the gap.
Endpoint XDR majorsCrowdStrike, SentinelOne, Cortex XDR, DefenderOEM-embed opportunity. Long cycle.
Mac security communityObjective-See (Wardle's annual roundup, 10th edition published January 2026 covering 2025), Objective by the SeaEcosystem allies, not buyers. The macOS indicator rules are seeded from the 2025 roundup.

Differentiators

Six capabilities have no equivalent in any adjacent tool.


Known limits

Eleven limits are measured, and each is better stated in the room than found by the buyer.

Latency is seconds, not milliseconds, and load-sensitive. Measured on an Apple M4 Pro with the shipped CLI, end to end — process start, corpus load, findings, malware DNA and report rendering:

BinarySizeMachineWall time
/bin/ls154,624 bytesidle0.56–0.74 s over ten runs
/usr/bin/ssh1,555,472 bytesidle5.05–5.38 s
/usr/bin/ssh1,555,472 bytesload average 2510.1–22.0 s

Per-function analysis is Rayon-parallel and competes for every core, so the large-binary figure is a core-availability claim as much as a time claim — hedge it in a demo on a shared box. Much of the small-binary figure is one-time corpus loading: the bundled FLIRT and malware-DNA corpora do not finish loading until 0.45 s into the 0.58 s /bin/ls run, and a server deployment pays that once by keeping a pool of pre-warmed workers. The analysis cost itself scales with code size and is not a fixed budget. No sub-200 ms figure survives measurement on the shipped path, so latency is pitched as "seconds, not a reverse-engineering engagement", never as a millisecond number.

Binary size is dominated by signature data. The single-file CLI is 208,551,056 bytes: 24.5 MB of machine code and 175 MB of __const, almost all of it the bundled signature corpora (53 MB of trained FLIRT .pat packs alone). No feature flag currently drops that data, so any OEM-embed conversation needs a build that omits the tiers the host does not use. Do not quote a size figure until that build exists.

The embed is not dependency-free. The command-line build's normal dependency graph links five C and assembly libraries:

Linked libraryVersionRole
aws-lc-sys0.41.0crypto
ring0.17.14crypto
lmdb-master-sys0.2.6LMDB storage core
lz4-sys1.11.1compression
zstd-sys2.0.16compression

An OEM embedding the engine inherits all five, so "Rust" describes the analysis code and not the linked artifact. A host with its own crypto policy or an approved-components list asks about AWS-LC before any technical evaluation starts.

Air-gap is not free of external data. The advisory corpus is deliberately not bundled. An operator fetches it with openbinaryd update-vulndb — roughly five minutes for the initial cvelistV5 clone, then OSV per-ecosystem JSON, the CISA KEV catalog and FIRST EPSS scores, auto-refreshed on a 24-hour interval; the ingest shells out to the system git binary. An internal https mirror base URL can replace the canonical source URLs wholesale, which is the supported shape for a network-isolated site; in a SCIF with no mirror it becomes a shipped-in artifact with an operational refresh process. The curated firmware-version and component rules are compiled in and do work offline, so the NAS326 CVE-2020-9054 hit needs no network — but the OSV-backed half of CVE attribution goes stale at exactly the rate the operator refreshes it. Everything outside vulnerability matching is offline.

Versions are not always CVE-comparable. 93.2% of the bundled quad-hash signatures carry a version string, but many are a bare ABI-major integer mined from a soname — 3, from libcrypto.so.3 — which cannot satisfy a range like "before 3.0.14" because it has no minor or patch segment to order. Counting only multi-segment, range-comparable versions the figure is 69.6%, and on x86_64 — where most vulnerability questions get asked — it is 64.1%. Where the version is only an ABI-major, the library is named and the CVE match falls back to the range's own major.

Apple userland has no body-hash coverage. The Mach-O body-hash corpus is XNU kernels only: 3,797 distinct function names stored across 11 per-SoC kernel images, all from one OS build — macOS 26.1 (25B78). No Apple system dylib, and no Apple library version, is in any bundled corpus.

The malware corpus is skewed by construction. Any aggregate recall or precision number read off it describes a macOS-stealer corpus with a Windows tail, not a balanced sample of malware:

FormatSamplesNote
Mach-O1,336881 of them universal binaries
PE376
Scripts and text droppers16
ELF1the verdict engine's Linux behaviour is effectively unmeasured
Total1,729

684 samples carry an AmosStealer label; the next largest labelled groups are AgentTesla (27), Medusa (21), Heodo and Formbook (20 each); 328 are unlabelled.

Emulator config extraction has never fired on a corpus sample. An instrumented sweep of 103 samples in July 2026 recovered data from 0 of the 86 that completed analysis; the extraction driver seeded a function's literal constants and nothing else, so a real prologue's sub sp, sp, #N diverged on operation 1, before the run reached the loop the candidate was selected for. A separate sweep of five UPX-packed samples through the entry-point driver returned 0 of 5, diverging at operation 31 on a stack-relative load, because the stack contents are never seeded. A concrete stack and frame pointer are now seeded, which addresses the first cause; neither sweep has been re-measured. Extraction is also gated off the standard ingest path — it runs for direct callers of the analyzer, the CLI's full mode and the ML retrain path. The one family extractor working in production, AmosStealer, is a static byte replay in the detection crate rather than emulator output, and the structured-config plugin names the record layout it parsed, not an attributed real-world family, because no in-the-wild corpus backs a family claim for that shape. Demo it on AmosStealer; do not promise it on a prospect's sample.

UPX unpacking has a named blind spot. The unpacker locates the block chain by searching for a literal UPX!. Commodity Linux malware routinely zeroes exactly that magic while the layout still runs — so the samples flagged for deliberately defeating upx -d are precisely the ones this cannot unpack. They stay a ledgered skip plus a packing signal.

Source SAST is broad and shallow. Run against the 966 scorable marker-annotated gap fixtures, 241 pass:

ScopeFixturesPassShape
All languages966241
Terraform26024The extreme: 26 HCL rule ids, so 236 fixtures miss at least one line they are required to flag, though none over-fire
Go6835The opposite shape: best pass rate, worst over-fire rate at 13

There is no cross-file dataflow — analysis is per file, so a taint flow crossing a module boundary is a miss — no framework routing emulation, no scope typing outside Python, JavaScript and PHP, and any source file over 8 MB is skipped whole rather than truncated, which silently blanks minified bundles. The skip is indistinguishable from a clean scan: an oversize .py whose second line is os.system(input()) returns language python and zero findings. Rust has a walker crate wired to nothing and Solidity has fixtures with no walker at all. Sell it as breadth over the scripts nobody else reads inside a firmware image, never as a Semgrep or CodeQL replacement on a source repository.

The package diff is path-and-verdict, not posture. It returns added, removed and changed binaries by path, with optional per-row verdict, highest CVE severity and KEV flag, and a count of attached SBOM components. It does not yet return a component-level delta list or a per-hardening-flag regression column; those are assembled from the per-binary posture findings and the hardening hash, not read off the diff.


Pricing and deal shape

Pricing is by deployment model, not per-seat, and every range below is a hypothesis rather than an observed transaction.

ModelPrior rangeLikely buyerPrior cycle
Self-serve / usage-based$0 – $12K, expandingDevelopers, CI/CD, container and app teams (bottom-up, lands then grows)Self-serve to weeks
SaaS subscription$12K – $300KEndpoint MDR, CTI, RE firms, research groups1–3 months
On-prem site license$200K – $500KGovernment, defense, regulated enterprise6–12 months
OEM / embed licenseCustom, typically $250K – $2M + royaltyEndpoint vendors, binary-intel platforms9–18 months
Per-engagement$5K – $100KIR firms, legal / IP disputesDays to weeks, repeating
Data feed / API$50K – $500KCTI teams, threat-intel platforms2–6 months

Value anchors (estimates, not observed transactions). Manual RE of a single binary is commonly quoted at 2–5 days at $300–600/hr, or roughly $5K–$20K. A 5-person in-house RE team runs past $1M/year. Stairwell and ReversingLabs disclose no deal sizes.


References

Links verified April 2026.

macOS threat landscape

Competitor / landscape

Enterprise Mac market

Firmware, IoT, regulatory

SBOM, build integrity, CI/CD