TARGET / AUTHORIZATION本页演示对象:自行编译的 hello ELF(白名单第 3 类)与本机系统 /usr/lib64/libcrypto.so.3.0.12(OpenSSL 3.0.12,Apache-2.0 明文允许反编译研究,白名单第 1 类)。仅只读分析。lab 记录:doc/labs/2026-10-12-lab00 附录 R8-A。

The REA Evidence Contract: Every Result You Can Prove

Most analysis tools show you an answer. REA shows you an answer plus the receipts: which bytes were read, which engine produced the result, which library versions ran, and a content-addressed ID that ties the claim to the proof. That package is the REA evidence contract — and when results accumulate, they consolidate into an REA evidence bundle you can export and hand to someone else. This page walks the full lifecycle with outputs we ran ourselves in our lab on 2026-10-12. Nothing here is a feature list; every block below executed on our machine. The source behind this contract is the morluto/rea GitHub repository itself.

what an evidence record contains

Run a single layout inspection and read the output like a contract — every field is a promise:

bash — lab@realearn verified: ran 2026-10-12
$ npx rea inspect-binary-layout /root/projects/realearn/lab-env/hello
evidence_id: ev_6e479c83fba06374c38ab8f9fa3876e561d28d3515aa68473598e9f94dcb556c
subject: hello / sha256 36cdabb6…4207352 / elf / x86_64
provider: pwntools-elf @ pwntools 4.15.0;pyelftools 0.33;unicorn 2.1.2
normalized_result: 31 sections, entry_point 0x400320

Four claims, four proofs:

from records to a rea evidence bundle

One record proves one step. Real analysis chains steps — and REA retains them in-session, then consolidates them into an exportable bundle:

MCP tool chain — lab@realearn verified: ran 2026-10-12
inspect_binary_layout(hello) → ev_6e479c83…   (session-retained)
$ get_evidence_bundle(detail:summary)
total_retained_records: 1 ✓
$ export_evidence_bundle → hello-bundle.json  (39113 bytes, records:1, unknowns:0)

The bundle is session JSON; the last mile converts it to portable canonical form:

bash — lab@realearn verified: ran 2026-10-12
$ rea evidence-export hello-bundle.json hello-canonical.json
validation passed — canonical export ✓

That two-step is deliberate, and the refusal that guards it is instructive — see the next section.

what the contract refuses (and why that is the point)

A contract is only worth something if it refuses to sign bad paper. Three refusals we hit, all by running the tool:

1. raw evidence JSON is not a bundle

Feeding a single evidence record straight into evidence-export fails — with the fix in the error message:

bash — lab@realearn verified: ran 2026-10-12
$ rea evidence-export record.json out.json
evidence_integrity_mismatch
(Error message includes remediation: export the session bundle via MCP export_evidence_bundle first, then feed it to evidence-export)

2. oversized results are refused, not truncated

Asking for the same layout analysis on a 4.5MB system library (OpenSSL's libcrypto) over the MCP channel returns resource_constraint — with a pointer to the evidence-bundle path. The CLI channel handled the same target fine with --format json (30 sections / 11 segments). The channel decides; nothing gets silently cut.

3. missing engines are named, precisely

Ask for deep analysis with no engine installed and REA refuses with provider_unavailable and a three-line rejection list — ghidra(not_configured) / hopper(executable_missing) / ida(not_configured). Three different problems, three different fixes, all named. The full walkthrough is in our boundary lesson.

Contrast the design with tools that guess: a plausible-looking answer with no trail cannot be audited, reproduced, or defended. Fail-closed beats plausible — that is the whole philosophy the REA evidence contract encodes.

why an evidence bundle matters outside the lab

FAQ

What is a rea evidence bundle?

The exportable package of every evidence record REA retained in a session. Each record carries a content-addressed evidence_id, the analyzed input's sha256, the provider and pinned library versions, and the normalized result. Export runs through MCP's export_evidence_bundle, then rea evidence-export converts the session bundle to portable canonical form — we ran the full loop on 2026-10-12.

Why did rea evidence-export reject my evidence JSON?

Because a raw record is not a session bundle. REA refused ours with evidence_integrity_mismatch — its message points you to export via the MCP tool first. The refusal is the audit trail working: the exporter only accepts bundles whose integrity it can verify end to end.

Does REA produce evidence without Ghidra installed?

Yes — everything on this page ran with zero engines installed, using REA's built-in free pwntools-elf engine (ELF layout analysis plus the full evidence lifecycle). Deep analysis — analyze/decompile — stays fail-closed until you add Ghidra, Hopper, or IDA.

Can someone verify my results from an evidence bundle alone?

That is its purpose. The bundle records the input hash, the exact provider versions, and content-addressed IDs — a reviewer re-runs the same command against the same bytes and cross-checks. Ours reconciled with manual readelf output on the same target.

Is realearn affiliated with morluto or rea.tools?

No. realearn is independent and non-affiliated; we ran every command shown here in our own lab and mark nothing verified that we did not execute.

Related: AgentEnv: turn a recorded capture into an MCP server · REA vs Ghidra — which to pick · REA vs Ghidra MCP · the setup guide behind these records · the 6.5–6.7 changelog: what breaks 6.4-era evidence