TARGET / AUTHORIZATION分析对象:自行编译的 hello、hello-stripped(白名单第 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(目标 01/02)、lab03(目标 03)。
MODULE // 04

One free engine, three targets

20 mindifficulty: beginner

The setup guide lit up REA's zero-cost engine on one target. This lesson runs the same provider — pwntools-elf, the pwntools-elf engine — across three very different binaries, so you can see what "ELF layout analysis" actually covers: your own build, a stripped build, and a 4.5MB system library. Every output below is from our lab machine, run 2026-10-12.

Prerequisites: finish setup steps 4 (the pwntools venv + REA_PWNTOOLS_PYTHON variable). Nothing else needed for pwntools-elf — no Ghidra, no paid tools.

pwntools-elf target 01 — your own build (unstripped)

The hello-world ELF from lesson 2. Its layout result can be cross-checked against manual readelf output — that is the whole point:

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
(与 lab 01 手工 readelf 结果一致 —— 交叉验证通过)

Read the evidence contract line by line: a content-addressed evidence_id, the exact bytes analyzed (sha256), the provider and its three pinned library versions, and a normalized pwntools-elf result your own binutils can confirm.

pwntools-elf target 02 — the stripped build

Same source, symbol table deleted (lesson 3). Layout analysis does not care about names — sections and segments are structural:

bash — lab@realearn verified: ran 2026-10-12
$ npx rea inspect-binary-layout /root/projects/realearn/lab-env/hello-stripped
evidence_id: ev_a2ba32af…
subject: hello-stripped / sha256 7dda4d05…

Different evidence ID, different sha256 — the tool is hashing what it actually read, not what it expects. That is the pwntools-elf audit trail working.

pwntools-elf target 03 — a 4.5MB system library

OpenSSL's libcrypto (lesson 1's target), via the CLI with JSON output:

bash — lab@realearn verified: ran 2026-10-12
$ npx rea inspect-binary-layout /usr/lib64/libcrypto.so.3.0.12 --format json
evidence_id: ev_424ee8d3…
normalized_result: 30 sections / 11 segments
(MCP 通道同目标: resource_constraint —— 不截断,提示改走 evidence bundle)

Note the last line: over the MCP channel, this large result is refused with resource_constraint rather than silently truncated, with a pointer to the evidence-bundle path. pwntools-elf fail-closed applies to output size too.

what the pwntools-elf engine is — and is not

Three pwntools-elf targets in, the boundary is concrete: pwntools-elf covers ELF layout inspection (sections, segments, entry point) plus the full evidence lifecycle — everything in this track. analyze and decompile stay fail-closed without Ghidra/Hopper/IDA: forcing the free provider explicitly returns capability_unavailable ("Choose one of: ghidra, hopper, ida"). We show that refusal, verbatim, in setup step 6.

Where to next: the tools hub lays out what the paid engines add — or continue with the boundary lesson to see exactly where the free tier ends, and why that is a feature.

next: The analyze/decompile boundary →