Repository navigation
Releases: Alyhnte/ReaPlus
Release list
Reverse Engine Anything Plus v0.8.0
Reverse Engine Anything Plus v0.8.0
Protocol release: the MCP surface grows up — resources, prompts, toolset
profiles, and typed outputs — while new security boundaries (workspace root,
tokenless HTTP, audit log) lock the server down. Long jobs get async + progress
pilots. 58/58 default tests green.
Highlights
- Resources + prompts: two static read-only resources
(rea-plus://server-info,rea-plus://capabilities-safety) and three
side-effect-free triage prompts (packer-triage,dotnet-malware-triage,
android-triage). Full surface is now 171 tools + 2 resources + 3 prompts. - Toolset profiles:
REA_TOOLSETSfilters registration to a slice
(minimal= 8,static= 98,android= 27,dotnet= 20,web= 26,
debug= 50; comma-separated union). Unknown names fail startup instead of
silently falling back toall. - Typed outputs: 120 tools declare
outputSchemaand 169 carry
annotations;structuredContentmirrors the text JSON on plain-object
results. Per-tool status lives indocs/TOOLS.md, generated from the real
compiled server (node scripts/generate-tool-reference.mjs --check). - Workspace root: with
REA_WORKSPACE_ROOTset,rea_*path arguments,
conduitopen_target/debug_openpaths, and user-visible derived writes
(.unpacked,.extracted, HAR output) must resolve inside a root —
junction, UNC, drive-relative, ADS, and reserved Windows names rejected. - Tokenless HTTP lockdown: without
DBG_BRIDGE_TOKEN, HTTP registers only
a 44-tool read-only allowlist (fail-closed, intersected withREA_TOOLSETS).
REA_AUDIT_LOGwrites append-only JSONL with no arguments, tokens, or paths;
defaults are 120 req/min/IP and 16 concurrent requests. - Async job pilot (opt-in): with
REA_ASYNC_JOBS=1, five job tools
(rea_job_start/status/result/cancel/list) run whitelisted tools (today:
rea_process_run) with a 2-concurrent queue; cancel kills the process tree. - Roots + progress pilots:
REA_ROOTS=1narrows the workspace from client
roots on legacy stdio;rea_process_runstreams paced progress and honors
notifications/cancelled.
Fixed
- Registry identity: package
mcpNameandserver.jsonname are now
io.github.Alyhnte/rea-plus; npmbinpaths and repository URL are in
canonical form; lockfile version is synced. - Jadx honesty: manifest/class/decompile results are validated before
success is reported; missing tool or broken input returns an error envelope,
never a fakeok:true. Real jadx flags verified against the installed binary. - Frida exception honesty: exceptions outside the agent's own breakpoint
slot returnfalseto the real flow instead of being swallowed as fake hits. - Stale docs: README badge and lane counts re-synced (547 its, 58 files);
ROADMAP/CHANGELOG carry the real 120/169 numbers.
Added
src/server/workspaceRoot.ts+tests/workspace-root.test.mjs,
tests/workspace-derived.test.mjs(conduit + derived-write coverage).src/server/toolMetadata.ts,src/server/conduitMetadata.ts(central
outputSchema/annotations registries) +tests/sdk-surface.test.mjs,
tests/conduit-surface.test.mjs.src/server/toolsets.ts+tests/toolsets.test.mjs.src/server/registerResourcesPrompts.ts+tests/resources-prompts.test.mjs.src/server/httpPolicy.ts+tests/http-policy.test.mjs.src/server/roots.ts+tests/roots.test.mjs.src/server/progress.ts+tests/progress-cancel.test.mjs.src/server/asyncJobs.ts+tests/async-jobs.test.mjs.scripts/generate-tool-reference.mjs+docs/TOOLS.md+
tests/tool-reference.test.mjs(drift gate: generated reference must match)..github/workflows/publish.yml(manual-only, dry-run by default; real
publish needs an explicitPUBLISHapproval).- Frida exception regression test (
tests/frida-agent-exception.test.mjs)
and jadx bridge honesty tests (tests/jadx-bridge.test.mjs). tests/publish-workflow.test.mjs,tests/version-sync.test.mjs
(single-authority version sync across package/lock/server/sources).
Verification
npx tsc --noEmitclean;npm run buildclean.node scripts/generate-tool-reference.mjs --checkpasses (171/2/3).- Focused protocol suites: 201/201 (sdk, async-jobs, conduit, http-policy,
workspace, roots, progress, toolsets, resources-prompts, tool-reference,
publish, version-sync, publish-workflow, frida-exception, jadx). - Default lane
npm test: 58/58 PASS, 0 FAIL (Windows + Ubuntu CI shape). node scripts/publish-kontrol.mjsOK;npm publish --dry-runOK
(314 files, no login — real publish not attempted).- Live-debugger/Frida injection suites stay out of the default lane (VM/CI only).
Upgrade notes
- Default surface is unchanged in count (171 tools) unless you opt in:
REA_TOOLSETSslices it,REA_ASYNC_JOBS=1adds 5 job tools (176 total). - Setting
REA_WORKSPACE_ROOTnewly constrains path arguments — unset means
no restriction, so existing setups are unaffected until they opt in. - Tokenless HTTP now serves only the 44-tool read-only allowlist; set
DBG_BRIDGE_TOKENfor the full surface over HTTP. Stdio is unchanged. - npm registry publish is still the open gate; until then
npx -y github:Alyhnte/ReaPlusremains the supported one-command path.
Reverse Engine Anything Plus v0.7.4
Reverse Engine Anything Plus v0.7.4
Distribution release: rea-plus is now genuinely easy for other people to install,
and a packaging bug that would have stopped every package consumer at boot is fixed.
Highlights
- One-command install, no clone:
npx -y github:Alyhnte/ReaPlusbuilds and runs
(cold start totools/listverified at ~31s, 171 tools). - One-click client setup: Add-to-Cursor and Install-in-VS-Code badges in the README,
plus ready-made configs for Claude Desktop/Code, Cursor, VS Code, Windsurf, Codex,
and opencode underconfigs/. - Docker:
docker buildworks today; this release also publishes
ghcr.io/alyhnte/reaplusautomatically. - New README: live badges, architecture diagram, per-client collapsibles, an
environment-variable table, and an honest security model.
Fixed
- Consumer boot crash (important): Playwright was a
devDependencyimported
statically by product code, so installing the package and starting the server died
withERR_MODULE_NOT_FOUND. Playwright is now loaded lazily and is a documented
optional extra; the server boots without it and browser tools return
capability_unsupported. For browser tools:npm i playwright && npx playwright install chromium.
(Found by an end-to-end tarball consumer simulation, now part of the release routine.)
Added
preparescript so git-based installs builddist/automatically.Dockerfile+.github/workflows/docker.yml(release → GHCR push; manual runs
build-only by default).smithery.yamlregistry metadata; personal-path examples scrubbed fromconfigs/.docs/ROADMAP.md— the full prioritized roadmap table (distribution, MCP protocol,
security, engines, domains, behavior, scale, tests, docs).
Verification
- Tarball consumer simulation: fresh install → stdio
initialize→tools/list= 171,
with Playwright absent. - Cold
npxfrom GitHub (empty npm cache): init in ~31s including the build, 171 tools. - Default test lane 43/43 locally; CI green on Ubuntu (Node 20 + 22) for this release.
- Install deeplinks were generated programmatically and verified by decoding.
Upgrade notes
- No tool or transport changes since v0.7.3. If you embed rea-plus as a dependency and
used browser tools, add Playwright as shown above. - npm registry publish is the top roadmap item; until then the GitHub
npxform above
is the supported one-command path.
Reverse Engine Anything Plus v0.7.3
Reverse Engine Anything Plus v0.7.3
CI and portability patch on top of v0.7.2. The default test lane is now green on a
clean machine (Ubuntu CI, Node 20 + 22), not just on the author's Windows box — and
the product no longer contains any machine-specific install paths.
Highlights
- Default lane: 43/43 test files pass on Windows (tools present), on Windows with a
stripped PATH (tools absent), and on Ubuntu CI (Node 20 and 22). - Zero personal paths left in
src/,tests/, orscripts/(verified by grep).
Fixed
- Portable fixtures: tests read the tracked corpus in
tests/corpus/via
import.meta.urlinstead of absolute author-machine Temp paths.korpus-kur
refreshes fixtures only whenREA_KORPUS_ELF/REA_KORPUS_PEare set. - Honest presence probes:
spawnSyncdoes not throw when a binary is missing, so
try/catch gates silently reported present. Probes (product mitm gate, test gates)
now checkr.error/status. This also removed a ~13s phantom proxy wait when
mitmdump is absent. - Principled test gates: when wabt, upx, ilspycmd, dnfile, or Chromium is absent,
tests assert thecapability_unsupportedgate (or skip visibly) instead of
expecting author-machine tools. The UPX version is no longer pinned to 5.2.1. - Generalized tool discovery (product):
REA_UPX_BIN,REA_WABT_BIN, and
REA_AAPT2_BINenv overrides + PATH only; personal WinGet/C:\toolslocations removed. - .NET CIL on Linux: the python search now tries
python,python3,pyin order
(previously onlypython); CoreLib discovery prefersSystem.Private.CoreLib.dll
and searches platform dotnet roots, withREA_CORELIB_DLLas an override. - Ghidra project dir lives under the OS temp dir instead of a personal path; the
local-Ghidra suites requireREA_GHIDRA_DIRexplicitly (no machine default). - CLI tests spawn
process.execPathinstead of relying onnodebeing on PATH. - Runner diagnostics: failure tails in CI logs are longer (the previous 5-line tail
hid assertion details).
Verification
- Local:
tscclean, build clean,npm test43/43 with full tools and 43/43 with a
stripped PATH; portable-fixture tests also pass from a different working directory. - CI: branch run green before merge; this release is tagged from a main commit whose
CI is green on Node 20 + 22.
Upgrade notes
- No tool or transport changes since v0.7.2. If you relied on the old built-in install
locations for upx/wabt/aapt2, put them on PATH or setREA_UPX_BIN/
REA_WABT_BIN/REA_AAPT2_BIN. - Supersedes v0.7.2, whose CI was red off the author machine (34/43). The v0.7.2
notes describe the hardening release; v0.7.3 makes its test claims true everywhere.
Reverse Engine Anything Plus v0.7.2
Reverse Engine Anything Plus v0.7.2
A correctness and hardening release from a full end-to-end review of the codebase.
No tool was renamed and no tool was removed: the surface stays at 171 live tools
(30 frozen conduit + 141 rea), now with honest errors, validated inputs, and a
test lane that actually runs.
Highlights
npm startnow starts the real server (dist/server.js); it previously pointed at a
transport-less factory module and exited serving nothing.- Domain failures are reported as MCP errors (
isError: true) instead of success. - Address inputs can no longer inject r2/rizin commands (
;,!shell escapes rejected). - Tools that returned
ok: truewithout doing the work now do it for real — or say so. npm testruns the real default suite: 43 files / 321 its, all green.
Fixed
- Entry point:
startscript targetsdist/server.js(same as therea-plusbin). - Test script:
npm testwas pointing outside the repo (../conduit/...); it now runs
scripts/run-tests.mjs. The old command survives asnpm run test:golden. - CI honesty: the workflow claimed "all tests" while running 2 of 49 files. CI now runs
npm test(default lane) and says so. - Error envelope: the rea tool wrapper had no
try/catchand never setisError;
thrown errors became protocol errors and{ ok: false }results looked successful. - Missing runtime assets: the build copies
frida-agent.jsand the Ghidra Python
scripts intodist/(scripts/copy-assets.mjs); the published Frida engine no longer
dies withengine_unavailable. The stalesrc/enginesfallback path was corrected. - Version drift: one truth everywhere —
package.json,server.json, and the server
banner all report 0.7.2 (the v0.7.1 release still identified as 0.7.0 at runtime). - Publish safety:
prepublishOnlybuilds first, so a fresh clone cannot publish a
dist-less package. - Cutter decompile: the
pdffallback ran without analysis and returnedokwith an
empty body; it now runsaaa;pdfand an empty result iscapability_unsupported. - Corpus setup:
korpus-kurcopied fixtures from author-machine Temp paths and crashed
elsewhere; missing sources now keep the tracked corpus. The idempotency test measures
the second run, as its name says.
Security
- Command injection: address arguments are validated in the MCP schemas and again in
the Cutter/R2Plus bridges (hex, decimal, or symbol names only). - cmd.exe shim: radare2's Windows shim rejects cmd metacharacters (
%,&,|,",
…) instead of quoting around them, and shutdown tree-kills the process sor2.exe
grandchildren are not orphaned. - SSRF:
rea_jeb_sorguonly POSTs to loopback by default. Remote targets require the
operator opt-inREA_JEB_ALLOW_REMOTE=1; link-local and cloud-metadata hosts are
always blocked. - Unauthenticated HTTP: when
DBG_BRIDGE_TOKENis unset, the server still starts for
local use but prints a loud warning that HTTP auth is disabled.
Honesty (no more fake ok)
rea_dotnet_metadatachecked only theMZmagic, so every native PE counted as
".NET" (and unpack routing believed it). It now verifies the real CLR data directory
in-process; external readers are reported, not required.rea_pwn_elf_layoutreturnedok: truewith a "queued" summary and did nothing.
It now returnscapability_unsupporteduntil pwntools is actually wired.stdout_sha256_kısawas FNV-1a despite the name; it is now a real SHA-256 prefix.- Fake PTY removed: process capture always used pipes while sometimes claiming a PTY
channel, andrea_process_comparediffed pipe against itself. The channel is honestly
pipe, and compare returnscapability_unsupporteduntil a real PTY exists. rea_net_captureignored the given URL and captured traffic to its own decoy
server. It now requests the given localhost URL through the proxy; the decoy remains
only fordata:inputs and is labeled in the summary.
Robustness
- Frida timeouts: agent RPCs (
callAgent,describe) are bounded by
DBG_BRIDGE_FRIDA_TIMEOUT_MS(default 30s); a wedged agent no longer hangs a tool call. - Frida cleanup: a failed inject detaches and unregisters the half-open session
instead of leaking it (theattachpath had no cleanup at all). - Checkpoint safety: re-open and re-attach clear the previous target's checkpoints,
sorewindcannot write one process's memory/registers into another. - Session overwrite race: concurrent re-open on x64dbg/cdb/Frida no longer orphans
the overwritten debugger process.
Tests & verification
- New
tests/fixes-regression.test.mjs(12 its) locks these fixes in; it was red on the
unfixed code and is green now. - New test runner (
scripts/run-tests.mjs): per-file 90s cap, process-tree kill on
timeout, and it never hangs on inherited pipes. - Default lane: 43/43 files pass. Live-injection/debugger, packet-capture, browser,
e2e, and local-Ghidra suites are excluded by default and run vianpm run test:live
(VM or dedicated CI job) — they spawn or inject into real processes. - Verified end to end over HTTP:
initializereportsrea-plus 0.7.2,tools/list
returns 171 tools, an injection attempt (0x10;!calc) is rejected by schema
validation, and a gated domain result comes back withisError: true.
Known limitations
- Destructive-tool MCP annotations are deferred: the bundled SDK v2 surface does not
expose a verifiable annotations field. - Some provider tools remain thin (e.g. jadx manifest/class fields, browser scenario
recording); they are tracked in the review report for a follow-up release. - The local-Ghidra suites (
ghidra-full,ghidra-prof2) need a machine-local Ghidra
install and are not part of the default lane.
Upgrade notes
- No breaking changes to tool names or transports. Two behavior changes to know:
domain failures now surface asisError: true(clients that treated them as success
will see errors), andrea_process_comparereturnscapability_unsupportedon every
platform until a real PTY lands. - Rebuild after upgrading:
npm ci && npm run build(build now also copies assets).
Reverse Engine Anything Plus v0.7.1
Reverse Engine Anything Plus v0.7.0
Added
- rea_unpack_hunt: guided flow for unknown packers (upx -> dotnet -> OEP dump recipe)
- WSL guide for Linux-only tools (binwalk/unblob manual steps)
- 171 live tools, 49 test files green
Updated
- Version 0.7.0 everywhere
- README + VERIFY counts synced
Commit
Reverse Engine Anything Plus v0.6.0
Added
- rea_behavior_full: single-call behavior report (API + syscall names + file/registry profiles)
- Syscall table (22 Windows x64 entries), file/registry profilers
- PDB path reader (CodeView RSDS), DWARF summary (CU + subprograms), typedef spreader
- rea_scan_repo: repo scan with 4-way queue + mtime cache (.git/node_modules/dist skipped)
- Golden corpus: 5 fixtures (ELF, PE, APK, WASM, JS) + setup script
- npm publish prep: files list, .npmignore, publish check script (no publish yet)
- 7 new MCP tools, 170 live total, 48 test files green
Fixed
- Version 0.6.0 everywhere
- Removed committed pycache + ignore rule
Commit
Reverse Engine Anything Plus v0.5.1
Fixed- README + VERIFY counts synced to code (163 tools, 43 files, 339 its)
Reverse Engine Anything Plus v0.5.0
Added- Flutter/Dart scan, Apple Mach-O/plist/bundle, Harmony HAP reader, PE info/imports/sections- Go pclntab/vendor, WASM sections/imports, EVM stats/selectors, DOS-COM/PSP- Managed workflow + readiness/coverage scoring- Hopper request/scan, IDA idb/FLIRT, JEB query, crash parse/summary- FS journal, storage/console capture, JS require/export graph- 6 CLI commands, 5 skill-pack recipes- rea_investigate: auto plan (sniff+score+fallback) in 1 call- 163 live tools, 43 test files green## Updated- Version 0.5.0 everywhere
Reverse Engine Anything Plus v0.4.0
Added
- Frida API tracer with arguments (live proven)
- UPX info/unpack, ILSpy C# decompile, auto unpack router
- mitmdump HAR capture (localhost) + behavior timeline
- Catalog 24 (upx, ilspycmd, mitmproxy)
- 128 live tools, 32 test files green
Updated
- Version 0.4.0 everywhere (package, server, health)
- README refreshed to match (tools, catalog, tests)