REA - Reverse Engineer Anything - rea-agents-6.8.0

REA, short for Reverse Engineer Anything, is an open-source toolkit that helps AI coding agents investigate how software works, even when its original source code is unavailable. Hosted on GitHub, the project connects agents to analysis tools for native binaries, JavaScript applications, Electron apps, and other software.

Rather than attempting to recover an application's exact original source code, REA collects evidence from decompilers, disassemblers, strings, symbols, function references, and other analysis techniques. An AI agent can use that evidence to explain a feature, document an implementation, or build a compatible alternative for another project.

REA provides a command-line interface (CLI), a Model Context Protocol (MCP) server, and guided workflows for compatible AI coding tools. It is particularly useful for developers who need to understand undocumented behavior, investigate legacy software, or reproduce a feature without access to its implementation.

Features

AI-Assisted Reverse Engineering

REA is designed to let developers investigate software by describing what they want to understand in natural language.

For example, you could ask an AI agent to investigate how an application's offline search works, trace the relevant functions, explain the evidence, and implement similar functionality in your own project.

REA supplies the investigation tools and findings, while the AI agent performs the reasoning and writes the new implementation. This division makes it easier to investigate unfamiliar software without manually navigating every analysis tool.

The workflow generally follows three stages: decompile or inspect the target, trace the relevant behavior through the available evidence, and recreate the desired functionality in a separate implementation.

Native Binary Analysis

REA connects AI agents to tools that inspect compiled native applications. Depending on the configured analysis provider, developers can examine functions, strings, symbols, assembly instructions, pseudocode, references, and call relationships.

These capabilities help investigate how a binary implements a particular feature or interacts with other components.

For native analysis, REA supports integration with Hopper and Ghidra. The project also documents IDA-related support in its broader development direction, although provider availability and individual capabilities depend on the installed version and platform.

Hopper is a separate product with its own licensing requirements. Ghidra must be installed independently and configured before REA can use it.

Importantly, decompilation produces an approximation of the original program logic, not the original source code with all its comments, names, and design decisions intact.

JavaScript and Electron Application Inspection

REA can analyze JavaScript applications and Electron packages without executing the target application.

It can inspect application directories and ASAR archives to identify modules, imports, dependencies, and relationships between components. This is useful for understanding how a desktop application's frontend communicates with its underlying services.

For example, developers can investigate how an Electron application handles authentication, storage, updates, or networking by examining the available code and tracing the relevant modules.

Static analysis is especially convenient because it does not require a native decompiler for supported JavaScript targets. It also reduces the risks associated with running unfamiliar applications during an initial investigation.

Command-Line Interface

REA provides a CLI for running analysis tasks directly from a terminal or through automation scripts.

Install the command-line package globally with npm:

npm install --global rea-agents

Then start the guided setup:

rea setup

To check the environment and configured analysis tools:

rea doctor --json

For a JavaScript application or Electron package, you can run an analysis directly:

npx -y rea-agents@latest analyze-javascript-application \
  /absolute/path/to/app --json

The JSON output makes it easier to process analysis results programmatically or pass structured findings to another tool.

Native binary analysis requires an appropriate provider to be installed and configured. The CLI therefore serves as a common entry point rather than replacing the underlying analysis engines.

MCP Integration for AI Coding Agents

One of REA's strongest features is its MCP server, which exposes analysis operations to compatible AI assistants.

The setup utility can configure supported clients, including Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, and Windsurf. Additional clients can connect through manual MCP configuration if they support local MCP servers.

After setup, an agent can call REA's tools to inspect a target, search for strings, examine functions, trace references, and collect evidence without requiring the user to execute each analysis command manually.

This integration is valuable for AI-assisted software development because it allows reverse engineering to become part of the same workflow used to modify and test code.

Guided Workflows and Evidence-Based Results

REA provides structured investigation workflows intended to guide an agent from an initial question toward a supported explanation.

Instead of returning only a conclusion, the tools can provide evidence and identify unresolved questions or limitations. Developers can then distinguish observed behavior from assumptions that require further testing.

The project also supports reusable analysis results and snapshots in relevant workflows, reducing the need to repeat expensive analysis operations unnecessarily.

This evidence-oriented approach is particularly useful when examining unfamiliar or poorly documented software, where an unsupported conclusion could lead to an incorrect implementation.

Local Analysis and Privacy

REA is designed to analyze target applications locally rather than uploading them to a hosted REA analysis service.

This is beneficial when investigating internal tools, proprietary software, or applications that cannot easily be shared with an external service.

However, the privacy boundary also depends on the AI agent and model provider being used. Analysis results returned to an agent may be sent to its configured model service, so developers should review that provider's data-handling policy before investigating confidential software.

Guided Installation and Diagnostics

REA includes a setup utility that configures the CLI, MCP server, and matching agent instructions. It can connect existing analysis tools and offer to install Hopper when needed.

The setup process presents proposed changes for review and approval and backs up existing agent configuration before applying changes.

Its diagnostic command checks dependencies, host compatibility, analysis tools, and agent configuration:

npx -y rea-agents@latest doctor

This helps developers identify missing dependencies or configuration problems before attempting a more involved investigation.

Performance and Compatibility

REA is distributed as a Node.js application and supports the command line and local MCP workflows. Its documented runtime requirements include Node.js 22.19 or newer in the 22.x line, Node.js 24.11 or newer in the 24.x line, or Node.js 26 and later.

Native analysis depends on the configured provider and supported host environment. The project documents support for macOS and selected Linux distributions, while Windows support varies by analysis provider and workflow.

Static JavaScript and Electron analysis has fewer dependencies because it does not require a native analysis engine. This makes it a convenient starting point for developers who want to try REA without installing a separate disassembler.

Actual analysis speed depends on the target application's size, the chosen provider, and the complexity of the behavior being investigated. Large native binaries may require more time and resources than a small JavaScript application.

REA is an analysis framework rather than a universal decompiler. Its capabilities depend on the tools available for the target platform, and the accuracy of conclusions depends on the evidence that can be recovered. It cannot guarantee recovery of original source code or perfectly reproduce every behavior of an application.

System Requirements

  • Runtime: Node.js 22.19 or newer in the 22.x line, 24.11 or newer in the 24.x line, or 26 and later.

  • Package manager: npm.

  • Operating systems: Supported macOS and Linux environments, with Windows support depending on the selected workflow and provider.

  • Native analysis: Hopper or Ghidra for the corresponding supported workflows.

  • AI integration: An MCP-compatible agent for interactive, agent-driven investigations.

  • JavaScript analysis: A local application directory or ASAR archive; no native decompiler is required for this workflow.

Ghidra integration has additional requirements, including a compatible Ghidra installation and Java Development Kit. Consult the current installation documentation for exact versions and platform-specific instructions.

Pros and Cons

Pros

  • Free and open-source under the MIT license.

  • Connects AI coding agents to reverse engineering tools through MCP.

  • Supports native binary investigation using decompilation and disassembly.

  • Analyzes JavaScript applications and Electron archives without executing them.

  • Provides CLI access for scripting and automation.

  • Collects evidence to support explanations of application behavior.

  • Offers structured workflows for investigating and recreating software features.

  • Designed for local analysis without a hosted REA analysis service.

  • Guided setup and diagnostic tools simplify configuration.

  • Can help developers understand legacy software and undocumented implementations.

Cons

  • Native analysis depends on external tools such as Hopper or Ghidra.

  • Some analysis providers have platform-specific limitations.

  • Decompilation cannot reliably recover the original source code.

  • Investigation quality depends on the available evidence and analysis engine.

  • Requires an AI agent for the full natural-language investigation workflow.

  • Additional setup may be necessary for native binaries.

  • Model-provider privacy policies still matter when sending analysis results to an AI service.

  • Reverse engineering complex applications can require substantial technical knowledge and time.

Download REA - Reverse Engineer Anything - rea-agents-6.8.0 - Software Mirrors

REA - Reverse Engineer Anything - rea-agents-6.8.0 Source Code

REA - Reverse Engineer Anything - rea-agents-6.8.0 Source code (zip)

REA - Reverse Engineer Anything - rea-agents-6.8.0 Source code (tar.gz)

REA - Reverse Engineer Anything - rea-agents-6.8.0 Release Notes:

6.8.0 (2026-10-25)

Highlights

  • Build local agent environments from network captures, browser scenarios, or a prompt, then serve derived reads and evidence-gated writes and compare them with fresh application captures.
  • Inspect more shipped formats, including GPU code objects, BEAM, Python bytecode, Unity IL2CPP metadata, Godot PCK, PyInstaller, Node.js SEA, devicetree, and additional PE/ELF tables.
  • Keep large investigations focused with retained summaries, selected fact queries, configurable recovery limits, and row-oriented CLI exports. Complete Evidence remains available.

⚠ BREAKING CHANGES

  • Function analysis: analyze_function now defaults to a retained summary. Set detail: "complete" for the previous inline dossier; the CLI retains its complete default and requires --evidence_output when selecting a summary. #5660. Thanks @CryptoJones, @gensokyo-dev, @RishTheFish21.
  • Accessibility: Accept JSON numbers and booleans in node value, alongside strings and null. Update consumers that previously assumed text-only values. cc90771, #6759, #6467. Thanks @coygeek, @gensokyo-dev, @mvanhorn.
  • JSON Lines: --format jsonl now emits object-collection rows followed by a $rea: "jsonl/v1", type: "metadata" record; scalar selections and unsupported reports are refused. Parse control records separately, select a single supported collection when necessary, and use --format json for the previous whole-document output. See JSON Lines framing. #5629, #5487. Thanks @gensokyo-dev, @jayykernel, @vijaykiran06.
  • Interface Builder: Keyed-archive graph identities use decimal table UIDs instead of authored objectID/object-id. Treat authored IDs as attributes and update persisted graph lookups; ibtool and native NIBArchive identities keep their source semantics. 6fbe67d.
  • Frida: instrument-with-frida JSON returns the canonical Evidence directly. Read normalized_result.cleanup_error instead of the former top-level wrapper field. 48f700e.
  • Reconstruction proof: ID-array proof records no longer establish verified or ready ledgers. Supply implementation/revision bindings and individual claim outcomes; handle inapplicable, unavailable, and failed proof diagnostics. f8b65e7.
  • Mach-O imports: Handle a null import name when identity is ambiguous; use raw_name and name_status to distinguish observed expressions from exact symbols. 5d0d243, 169512a.
  • Node.js: Use a runtime satisfying ^22.23.4 || ^24.22.1 || >=26.12.1; Node 23 and 25 are unsupported. Upgrade Node before installing or updating REA; the installer does not upgrade it. #6315, #6283. Thanks @GamerDubz, @gensokyo-dev, @ShikamaruNaaraa.
  • Browser storage: Historical hashed storage remains readable, but comparisons stay unknown until both captures are recaptured in the new representation. #6341, #6289. Thanks @coygeek, @gongfpp.
  • Environment serving: environment-serve serves derived state by default, including write tools whose effects are confirmed by recorded evidence. Use --replay-only for stateless replay of manifest tools. Read stop-summary state instead of state_evidence_id. #5351, #6158. Thanks @earakely-scale, @gensokyo-dev, @kaoru0822-kitauji.
  • MCP schemas: Input advertisements default to compact. Set REA_MCP_INPUT_SCHEMA_PROFILE=full for complete advertised guidance and nested constraints. #5975. Thanks @gensokyo-dev.
  • Browser console arguments: Accept null argument_types and text_capture.status: "unavailable" when the protocol argument inventory is omitted or malformed; preserve that uncertainty. #6016, #5934. Thanks @coygeek, @kaoru0822-kitauji.
  • Reconstruction summaries: summary.by_evidence_authority is keyed by Evidence authority; read the former source-state counts from required summary.by_source_state. Regenerate ledgers whose closure digests depended on the old projection. #5875, #5838. Thanks @coygeek, @kaoru0822-kitauji.
  • Swift bindings: Conformance type_name and protocol_name may be null; consume typed type_binding/protocol_binding evidence. Replace the former Objective-C-specific import-binding type/schema with MachoImportBinding. d0067ba.
  • WebSocket frames: Accept null opcodes and preserve unknown frame facts; numeric opcodes are restricted to the four-bit protocol range. 0bc2b42.
  • Resource-only inspection: Evidence subjects and executable digests may be null. Use resource_root and each resource's reported provenance instead of requiring an executable target. 6a6adf7.
  • Browser timestamps: Console and session-timeline timestamps may be null when the protocol supplies no finite/comparable time. Keep unknown time explicit in sorting and comparisons. 690fc51, 2a0410f.
  • Reference sources: Read failed root enumeration from rootFailure rather than a synthetic failed child at "."; preserve the top-level source-graph limitation. 6296fdf.
  • Filesystem capture: Accept entry_unavailable and identity_changed enumeration omission reasons in addition to the previous reason literals. c85b44e. Thanks @rudrakshagarwal4200-ai.
  • APK locales: Replace numeric legacy selectors such as es-r419 with es-419 or b+es+419. Two-letter regions remain supported. 29910d1. Thanks @mertkayacs.
  • XML plist scalars: Recognize $plist_type: "unknown" and read element, literal, and reason; unresolved XML scalars use this wrapper instead of the former real/null unknown marker or malformed scalar prefixes. Supported extended UTC years preserve their timestamp. 3537e58.

Changes

  • Binary layouts: Inspect ELF32 i386, little-endian ARM, and little- or big-endian MIPS EXEC/DYN/REL layouts on Linux x64 using a caller-supplied pwntools environment. #7052, #6934. Thanks @roblennon, @salmanalmutairi1.
  • Agent environments: Project network captures and Evidence files into manifests, preserve template path pairs and positions, export AgentEnv bundles, and serve manifests as replay environments. #4954, #5293, #5664, #4999, #4975. Thanks @earakely-scale, @gensokyo-dev, @kaoru0822-kitauji.
  • Capture to environment: Build environments from browser scenarios or a prompt, extract the initial observed state, and compare the environment with application probe captures. #5182, #6946, #5319, #5699. Thanks @earakely-scale, @gensokyo-dev, @kaoru0822-kitauji.
  • State-backed tools: Render read filters, search, sorting and paging from state; apply confirmed write effects with broader state targets and recording-based write admission. #5352, 293832b, #5800, #5787, #5600, 5375ff0, #6169, #6385, #6897. Thanks @earakely-scale, @gensokyo-dev, @kaoru0822-kitauji.
  • State learning: Model application-assigned values, preserve view-specific clock spellings, learn write clocks from scenario timing, derive fields, and learn creates across sorted arrays and referenced entities. 7ec9b6e, #6136, 957bcfa, #6138, #6967, #7025, #7034. Thanks @earakely-scale.
  • Recorded writes: Serve creates whose compatible read-backs add omitted fields or express timestamps at a different precision, and whole-object updates that regenerate observed slugs or modification times. Conflicting observations still withhold writes. State views and bundles carrying the new read-back data need REA 6.8.0 or later to serve. #7080. Thanks @earakely-scale.
  • Native investigations: Page native inventory summaries, match functions across builds, export pseudocode to resumable directories, and select objdump disassembly by symbol. #5378, #5390, #6170, #5171, #4249, #5343, #5159. Thanks @coygeek, @CryptoJones, @gensokyo-dev, @kaoru0822-kitauji.
  • Engine workflows: Bound a single Ghidra decompilation without closing its session, analyze GameCube/Wii DOL executables, and inspect static CUDA/HIP code objects. #5662, #6240, #5813, #5340, #5345. Thanks @arielfikru, @coygeek, @gensokyo-dev, @RishTheFish21.
  • PE/ELF: Inspect export tables without an engine, PE imports/delay-loads, Authenticode certificates, TLS callbacks/load configuration, ELF notes, Linux kernel module metadata, and Zstandard section-name tables. #6278, #6509, #4830, #7008, #4837, #7010, #6987, #4057. Thanks @gensokyo-dev, @kaoru0822-kitauji, @mvanhorn, @Rinkia, @ShuaixinHuang.
  • Apple/native metadata: Inspect IPS crash reports, decode Swift nominal declarations, and select universal Mach-O slices in Go/Rust metadata readers. #6511, #6257, #6219, #5341, #4102. Thanks @coygeek, @gensokyo-dev, @kaoru0822-kitauji, @mvanhorn, @Rinkia.
  • Packaged applications: Triage desktop installation directories and inspect/extract Godot PCK, PyInstaller archives, and Node.js single-executable application blobs. #5207, #3634, afa5da7, #2433, #7000, #4399. Thanks @0xthearchitect, @coygeek, @gensokyo-dev, @mvanhorn.
  • Unity and managed code: Inventory IL2CPP images/types/methods and metadata versions 24/27; read member names and literals, link native methods and generic instances, and export Ghidra seeds. Project managed call/field-access edges and page managed member summaries. #3807, #5326, 52d1a72, #5327, #5785, #6260, #5167, #3784, #5112, #4056, #5148. Thanks @8rulerstar, @alexlanghart, @elricfd, @gensokyo-dev, @jaelliot, @kaoru0822-kitauji, @Rinkia.
  • Android: Inspect APK signing declarations and structured manifest components; report static-final DEX field values. e93e3b1, #4158, #5025, #6981, #4537, #6397. Thanks @Abelo9996, @BaaRai, @FerroLx, @gensokyo-dev, @sserrgo12.
  • Bytecode and firmware: Inspect and query CPython pyc and BEAM facts, inspect flattened devicetrees, and attribute MMIO peripheral regions in native disassembly. #4826, #6928, #4833, #6943, #7009, #5348, #6922, #6938. Thanks @gensokyo-dev, @liziye627-design, @mvanhorn.
  • JavaScript: Retain queryable static route inventories, link assignment values to writes, and accept source selections as a JSON array or file. #6019, #6206, #5029, #4772, #6193. Thanks @gensokyo-dev, @IvenKooLab, @jacobmalibiran, @JoshOsullivan-au, @kaoru0822-kitauji, @KJLavender.
  • Data inspection: Decode selected protobuf/gRPC bodies, inspect GGUF/safetensors declarations, and produce byte-entropy profiles. #5031, #5603, #2331, #4986, #3323. Thanks @AayushJB03, @gensokyo-dev, @kaoru0822-kitauji, @KJLavender, @michaelkillgta, @mvanhorn.
  • CLI input/output: Accept structured request documents on stdin and expose version/runtime output formats. Row-oriented JSONL exports use the migration above. #7040, #5486, #6530, 169512a, #5483. Thanks @Abelo9996, @ahmed-husssain, @CassieFox23, @DeryFerd, @eco-null, @ezrabrilliant, @GamerDubz, @gensokyo-dev, @gongfpp, @hifzabuildsai, @jayykernel, @mhamzasakhi, @pablodiazjorge, @Plastic-time, @raidnouredden-ux, @SandstromPL, @ShuaixinHuang, @Sriram-PR, @XiaoBinGan.
  • MCP and setup: Add opt-in Streamable HTTP and FreeBuff setup registration. FreeBuff support first appears in 6.8.0; installed native FreeBuff loading and skill discovery remain unverified. #4955, #2736, #3243. Thanks @0xLLVEL, @codebuff-team, @earakely-scale, @gensokyo-dev, @kaoru0822-kitauji.
  • Recovery controls: Adjust per-call WASM/SQLite/firmware deadlines, MCP startup budgets, regex matching deadlines/worker heap, capture decoder heap, ASAR header admission, Apple dispatch input, and the bridge request ceiling. MCP runtime limit recovery reports actionable settings. #5798, #5818, aa53c06, #5863, #6304, #6267, #6301, #6299, #6209, #6233, #6376, #7049, #5797, #5812, #5851, #6176, #3917. Thanks @gensokyo-dev, @jaychou813, @kaoru0822-kitauji.
  • APK output: Set string_tables_only or CLI --string-tables-only to omit duplicate primary strings and avoid their output-capacity charge. 7c458f0, #4990, #4982. Thanks @gensokyo-dev, @kaoru0822-kitauji, @N0zoM1z0.
  • Retained analysis: Reuse successful validation of authenticated immutable native/imported-JavaScript parents and captures. Query retained Go build identity, Rust dependencies, JavaScript source-to-bundle mappings, and native export facts without repeating full output. 8f7d12e, #4962, #5349, #5524, #5815, #6128, #6907, #4810, #5499, #5802, #6112, #6900. Thanks @gensokyo-dev, @kaoru0822-kitauji, @N0zoM1z0.
  • Compact results: Use retained Frida/GDB/objdump summaries, omit redundant Ghidra raw results, and defer the analysis runtime during MCP catalog discovery. #5661, #5614, #5355, #4424, #5640, #5584, #5337. Thanks @coygeek, @gensokyo-dev, @kaoru0822-kitauji, @leeguooooo.
  • Analysis work: Reuse Hopper literal-string records, JavaScript workers and captured prefix selections, Interface Builder validation and plist scalar schemas; bound stable reads to one snapshot buffer and avoid decoding omitted GGUF strings. #5017, #5819, 31de177, #5885, 85e38ac, #6966, #5781, #5010, #5855, #6954, #5774. Thanks @gensokyo-dev, @kaoru0822-kitauji.
  • Native scheduling: Batch modern IDA callee lookups, schedule decompilation reads on demand, index NativeAOT type closure, and retain call-path ancestry once per visited node. 0c6fed9, 06fe7ee, ce61680, 5e4ec0f.
  • Selected processing: Prepare CLI positional schemas only for the selected command, separate entropy reads from report resolution, prune typed-array reference escapes, index state-write cutoffs, decode only selected replay query values, and skip payload text during WAT framing. 315b234, #6950, #5139, #5350, 96ea32b, 70835d3, #5766, #6947, #5760. Thanks @galleonli, @gensokyo-dev, @kaoru0822-kitauji.

Fixes

  • IPS report fields: Preserve the recorded terminating process and PID, termination flags, parent PID, and build/platform metadata. #7079, #7078. Thanks @rodricksz4h5.
  • Ghidra language selection: Accept stock language IDs containing LEBE or slash-separated processor names, and report conflicting DOL language overrides as configuration errors naming REA_GHIDRA_LANGUAGE_ID. #7070, #7072, #7081, #7082. Thanks @Adolanium.
  • Setup and Hopper: Preserve the Linux embedding runtime, supported x86_64 host restriction, readiness-based provider choices, orderly demo-helper shutdown, and installed apt dependency versions. Keep cleanup and skill publication ownership through retries. #5041, #3422, f5d1012, #4966, #6974, 211e353, #6920, #5015, #3419, #4921, #6975. Thanks @Abel-I-Akhigbe, @Adolanium, @DavidFB-creator, @DeryFerd, @gensokyo-dev, @kaoru0822-kitauji, @sx4im.
  • Client setup: Treat empty APPDATA as unset, distinguish MSIX Claude Desktop process views, preserve aliased Hermes server tables, reuse client dialect/alias bindings, and materialize the pinned package-runner cache before the first start. #5126, #4903, #3785, b7eeded, #7032, #5104, #4278, #3320, #7027. Thanks @CmsChase, @coygeek, @myso-kr, @pablodiazjorge, @vaidehi-snk, @wxj006007.
  • Target admission: Preserve thin arm64_32 Mach-O support, distinguish JVM identity before FAT admission, validate FAT format/CPU identity, preserve original DOS header padding, and reject NULs in local objdump/rizin paths. #5788, 6843dbe, 497037e, #7013, #3600, #5713, #6510. Thanks @coygeek, @dhruvac29, @kaoru0822-kitauji, @Lew1sWong, @qorvr.
  • Mach-O and dylibs: Preserve container framing, facts when dyld rejects a missing UUID, verified-signature snapshot identity, unsigned diagnostics, absolute paths inside the selected root, legacy platform rules, lazy-load payloads, and reasons for rejecting present dylibs. cf3288d, 2b263a7, eb7acc7, 1502cfb, 90062c0, #5650, 3b67b36, #5551. Thanks @coygeek.
  • Native facts: Admit direct dispatch-metadata providers; preserve record-local Objective-C omissions, snapshot profiles, class-import binding identity, stripped class labels, version-like names, and qualified Swift protocol identities. 50b6975, 9eec57b, 0ba4d6f, 4d7de00, 22c84ce, 4852c83, aa9043f.
  • Apple resources: Preserve independent plist scalars, processing instructions, nonstandard table widths, unsupported NIB connector coverage, and strict IPS JSON surrogate validation; classify Interface Builder objects by their declared superclass chains. fd728f2, #5806, 4526862, 14cd78c, #6990, #5805, #5228, #5218. Thanks @coygeek, @DeryFerd, @kaoru0822-kitauji, @Mangolycheematcha, @mhamzasakhi, @Shreyash021104.
  • Archives and files: Complete positional ZIP reads, preserve bounded ASAR signatures, report stable symlink loops as resolution failures, retain target applicability, and report unknown traversal coverage. Retain reported integrity contradictions for members present in only one compared artifact. #4414, e8da7e1, #5571, #5763, #5867, #5521, #5731, #5837, #7076. Thanks @Afloat16, @coygeek, @jdotc1, @kaoru0822-kitauji, @WenyuChiou.
  • Extraction and file ownership: Restrict destination-case recovery to owned collisions, retain physical-read failures through late cancellation/cleanup, preserve cleanup capabilities for retry, and retain independent firmware extraction failures. 932fbb7, 9499667, 56679dd, b3c912a, 7298bd0.
  • Provider cleanup: Preserve Windows native handles until close is confirmed, native/Inspector/Electron cleanup ownership, Kuna probe identity and cleanup, IDA registration configuration, and Hopper preparation ownership. #5772, 87ab054, ff78165, 04ae07a, dd0015a, b231c28, #4505, #5616.
  • Provider diagnostics: Give Ghidra restart recovery, stable Homebrew aliases, unsupported-host results for Linux-only integrations, correct IDA regex/readiness handling, and clear diagnostics when Windows refuses a verified native addon. #5356, 7c6142e, #5793, #4862, 99ccfb6, #6832, #5730, #4860, #5723. Thanks @coygeek, @dark13b, @gensokyo-dev, @jgt87, @jpmorris41488, @Lew1sWong.
  • MCP results: Preserve protocol envelopes on oversized errors, enforce and advertise absolute Evidence paths, retain typed output-filter errors and selected JSON paths, and give client/provider timeout recovery. Compact advertisements now normalize reported enum and union shapes for strict gateway translation. 562dab0, 3cf6206, 0e83d92, 4714c7e, 1bfa60a, #5608, #3806, #5598, #3800. Thanks @gensokyo-dev, @Hahaa909, @wang1xiang.
  • Browser lifecycles: Retain historical outcomes through cleanup, stop late navigation before session release, stop expired work, observe aborted fetch settlement, and mark later scenario actions skipped after failure or cancellation. 2e5171e, 599fdac, b2fad36, 13a8640, #6023, #5943. Thanks @coygeek, @kaoru0822-kitauji.
  • Browser comparisons: Preserve frame identity, default origin scope, unknown body/shape coverage, correspondence and uncertainty, and independent retained-observation budgets. #4040, #4413, #4476, a0c22ff, a0fcc60, #3878, #3910, #3941, #4385, #4477. Thanks @Adolanium, @coygeek, @eco-null, @gensokyo-dev, @kaoru0822-kitauji, @XY-code1.
  • Electron observations: Preserve listener callback ownership and count registrations by source callsite; block trash calls in the active hook, retain window handles through cancelled selection, and preserve cancellation during finalization. dfe8378, 5064007, 816a9dc, 1707d17, 4e2a566.
  • JavaScript source maps: Keep unmapped and missing mappings unknown, preserve partial indexed-map facts and section paths, propagate preparation capability errors, and retain observed worker failures through cancellation. a4dbb36, 2b2e362, 498a667, #6149, #6214, f01dcca, #6082, #6061. Thanks @coygeek, @diyasharma05, @kaoru0822-kitauji.
  • JavaScript semantics: Preserve overflowing timer uncertainty, unavailable-scope comparisons, directory-form URL/ESM path intent, and artifact confinement. Replaced globals lose built-in effects; erased imports no longer become runtime bindings. Treat a known truthy fork() silent option as piped stdio unless a string/array stdio override takes precedence; unresolved options stay dynamic. #3456, 8d198d6, #4646, #2700, #4565, #6994, #3400, #3882, #3367, #7083, #7084. Thanks @Adolanium, @amyanger, @coygeek, @gensokyo-dev, @HawkForge, @rohitg00, @viniciusdsandrade.
  • JavaScript routes and imports: Treat path data as route candidates, preserve route flag and lexical RPC identities, package-main trailing-slash selection, catch aliases, and factory parameter ownership. #6360, 38ecc02, #4219, 21097b1, f774dc4, #6349, #4189. Thanks @coygeek, @hemv-857, @kaoru0822-kitauji, @Nikhi00718.
  • Managed/IL2CPP: Preserve extension-only scope uncertainty and type discovery after member limits, nested names, ReadyToRun/declaration facts, selected type scope, valid shared-suffix strings, and truncated IL2CPP metadata prefixes. #5674, #5312, 87fa1b6, bc2d494, 1f0eb22, 4c5fae5, b3aadaf, #5467, #5146. Thanks @coygeek, @eco-null, @elricfd, @umi008.
  • Capture decoding: Preserve malformed protobuf trailer facts and wire/schema identity, HTTP/2 URI and UTF-8 failure facts, WebMCP property coverage, and offline capture availability without a browser provider. Report invalid record ordinals as selection errors with actual bounds where available, and trim surrounding SP/HTAB from gRPC-web trailer values while preserving internal whitespace. 9cf7a7c, b3c3b21, 4cb1f1d, 51e5938, d23be5c, #6725, #3947, #7067, #7068, #7069, #7071. Thanks @Adolanium, @coygeek, @Sriram-PR.
  • Evidence and errors: Authenticate ledger Evidence before committing; preserve parent-schema diagnostics, canonical correction details and owned cleanup outcomes; identify the rejected function-Evidence side/kind. Fixed allowances now name their actual limits. 0407bbf, #6361, 1629266, #6969, #5860, #6034, #5932, #5847. Thanks @AyoubElleuch, @coygeek, @dhruvac29, @kaoru0822-kitauji.
  • ADB and firmware recovery: Report an unparsed push checksum as unverified, normalize absent installer-package sentinels, describe extraction-relative Unblob links, and avoid recommending a budget increase at its fixed ceiling. #6010, #4073, #4573, #6971, #5924, #4175. Thanks @coygeek, @Ganesh2325, @kaoru0822-kitauji, @Rinkia, @XiaoBinGan, @yankikucuk.
  • CLI formatting: Share Markdown report formatting, exclude inherited row values, and preserve arrays of empty objects as JSON. Render Markdown table headers and cells literally while keeping intraword underscores readable. b784912, #6984, #7058, #7057, #7073. Thanks @Plastic-time, @ShuaixinHuang, @viniciusdsandrade.
  • Format identity: Preserve Python marshal scalar/decode limits, empty optional BEAM chunks, PE resource branch identities and certificate alignment, unsupported compressed ELF notes, and codec-framed GPU bundle extents. 0603223, c46064c, 66671e8, 03077d5, #6721, 9fb8c11, f6a1e2c, #6694. Thanks @coygeek, @Deepak-Kambala.
  • WASM and APK metadata: Preserve ambiguous WASM identity and partial facts, glue URL query/fragment text across line terminators, APK signer identity, and raw issuer identity when comparison rules are unknown. af8f0ba, #6802, f783f0f, 115a78f, #6639. Thanks @coygeek, @gensokyo-dev, @gongfpp.
  • Source identity: Preserve Next route spelling, module grammar and loader request identity, directory package-main behavior, accessor effects, exact source targets, and resolver-discovery versus module-loading distinctions. ddd7ac7, 9974512, f2e5fd1, baf1678, 6e324b2, 75daf0c, f91b7f8.
  • Graphs and selected facts: Preserve JavaScript graph omissions/version facts, Electron native-loader facts, web JSON identity/coverage, module-path selection, feature-trace qualifications, selected native paths, endpoint context, and mixed Swift demangler outcomes. 30db499, 5a7bddb, 79805f2, f719dc4, 7784fdb, 76500f1, 676d29f, edf7b3d, 93de7bc.
  • Managed boundaries: Honor native platform symbol lookup, consume resolved IL2CPP ELF declarations, and attribute malformed comparison inputs to the supplied argument. 64fa1db, 87745af, 96ad94f.
  • Provider and worker recovery: Preserve output loss after successful command exit, physical refusal diagnostics, bounded worker control framing, JavaScript worker-phase/budget attribution, admitted ambiguity choices, and selected EVM limiter availability. Scope objdump debug-link limitations to DWARF requests and keep process-capture preparation nonexecuting. e639edf, 171b33b, 34563fc, 3f9357b, cec8f1e, a74d859, c284168, 4fb936f.
  • Setup and limits: Retain unknown environment-budget facts, selected-skill/maintenance uncertainty, Hopper URL admission and bookmark verification, and listener failure recovery that matches the system cause. a718037, d1fbebb, 60accad, fd7da77, 0c440bf.
  • State and Evidence: Retain export tarball ownership and SQLite primary outcomes through cleanup retry, count emitted SQLite schema names across encodings, scope display refresh to matching snapshot bindings, and report retained-result validation failures consistently. Reconstruction uses one effective completion scope and kind-based labels when names are blank. ab58edc, 1006714, a47788a, 8aa40e9, b8c1b45, a35b933, #6137, #6126. Thanks @carlogiovannineri-rgb, @mohithhhh.
  • Capture coverage: Name browser bundle budgets and deadline recovery, separate domain readiness from worker attribution, attribute rendered-frame omissions to their producing stage, share offline-capture host admission with discovery, preserve selected signal-file semantics, and retain short Flutter GNU build IDs. #6036, ba78133, 5934387, ad629b2, 928ba76, 678c4cf.
  • Additional boundary facts: Retain parser format/query occurrence identity and independent malformed-input facts, unresolved nested Swift identifiers, and completed signing-capture coverage; describe crash documents without assuming a provider. 5f702dd, 99d2d7a, 90e433d, #5548, ee12d51, #5538. Thanks @coygeek, @ShuaixinHuang.
  • Documentation: Add the Romanian README. #7026. Thanks @An3treiu.
Full contribution record: 1740 commits and 497 merged PRs.

How to Install

The recommended approach is to install REA through its guided setup utility.

First, ensure that a supported Node.js runtime and npm are installed. Then run:

npx rea-agents@latest setup

Choose the AI agents you want to configure, review the proposed changes, and approve them. Setup configures the MCP connection and installs the corresponding workflow instructions.

Restart the configured AI client after setup so it can load the new MCP server.

To use REA as a regular command-line application, install it globally:

npm install --global rea-agents

Then verify the installation:

rea doctor --json

For native binary analysis, configure Hopper or an existing Ghidra installation according to the official documentation. Static JavaScript and Electron analysis can be used without installing either tool.

To update an existing installation, follow the update instructions for the installation method you used. If you use the npx workflow, refresh the agent configuration with:

npx rea-agents@latest setup

Review the proposed changes and restart the relevant client when its MCP registration changes.

Final Verdict

REA is a compelling open-source toolkit for developers who want to combine reverse engineering with AI-assisted software development. Its biggest advantage is the way it connects analysis tools, structured evidence, and MCP-compatible agents into a single investigation workflow.

Support for native binaries, JavaScript applications, and Electron packages gives it a broad range of uses, from understanding undocumented features to investigating legacy software and building compatible implementations. The CLI and evidence-oriented results also make it useful beyond interactive AI sessions.

Its main limitation is that REA depends on external analysis engines for many native workflows, and its capabilities vary by operating system and provider. It also cannot recover original source code automatically or guarantee that an implementation recreated from analysis will behave identically to the original.

For developers working with unfamiliar applications, REA is worth exploring, particularly if they already use an MCP-compatible coding agent. It is best viewed as a bridge between reverse engineering tools and AI development workflows rather than a replacement for established disassemblers or the expertise required to interpret their results.

REA - Reverse Engineer Anything - rea-agents-6.8.0
Free
Software Informations:
Developer:

Operating System:
All Platforms
Date Added:
2026-10-25T12:07:24.124Z
Categories:

Post a Comment/Report Broken Link: