REA: 에이전트가 소스 없는 앱을 뜯어 보게 하는 MCP
100MB짜리 Electron 앱을 52초 만에 읽고 창·IPC 개수를 모두 맞힌 사용기가 올라왔어요
- 누가
- morluto가 만들고 여러 기여자가 함께 고치는 오픈소스예요. 소스 없는 앱의 동작을 알아내려는 개발자와 연구자용이에요.
- 언제
- 2026년 4월에 저장소가 생겼고, 최신 릴리스는 2026년 10월 25일의 rea-agents v6.8.0이에요.
- 어디서
- Claude Code, Codex, Cursor, Gemini CLI, Grok Build 등 로컬 MCP를 쓰는 에이전트에서 돌고, 분석은 내 PC에서 해요.
이게 불편했어요
다른 앱에서 마음에 드는 기능을 봐도, 소스가 없으면 어떻게 만든 건지 알 방법이 마땅치 않았어요. 디컴파일러를 열고 어셈블리와 호출 관계를 하나씩 따라가야 했고, 에이전트에게 물어도 정작 그 바이너리를 직접 열어 볼 도구가 없었어요.
그래서 이렇게 풀어요
REA는 에이전트에 MCP 서버 하나를 붙여서, 앱 파일을 에이전트가 직접 열어 보게 해요. 네이티브 코드는 Hopper·Ghidra·IDA·Kuna에 맡겨 의사코드와 어셈블리를 받고, JavaScript·Electron과 .NET은 엔진 없이 파일만 읽어요. 결론마다 근거와 모르는 부분이 함께 오기 때문에, 에이전트는 그걸 바탕으로 설명하고 내 프로젝트에 비슷한 기능을 만들어 테스트까지 해요.

이걸로 만든 사람들
안에서는 이렇게 돌아가요
- 1
나 → Claude Code
npx rea-agents setup고른 에이전트에 REA MCP 서버와 작업 지침 스킬을 기존 설정 백업과 함께 등록해요.src/cli/setupCommands.ts - 2
Claude Code → REA MCP 서버
대상에 맞는 첫 도구 호출스킬 지침대로 ASAR면 analyze_javascript_application, 네이티브 파일이면 open_binary처럼 대상부터 보고 골라요..agents/skills/reverse-engineer-anything/SKILL.md - 3
REA MCP 서버 → Hopper · Ghidra · IDA · Kuna
인증된 브리지 실행Hopper의 --python 옵션으로 브리지를 띄우고, 소켓과 무작위 토큰으로만 요청을 주고받아요.bridge/hopper_bridge.py - 4
Hopper · Ghidra · IDA · Kuna → REA MCP 서버
의사코드 · 어셈블리 · 참조엔진 안에서 함수, 호출, 문자열, 참조를 읽어 REA 쪽 클라이언트로 돌려보내요.src/hopper/HopperClient.ts - 5
REA MCP 서버 → Claude Code
trace_application_feature 결과JavaScript 앱은 엔진 없이 기능 경로를 따라가고, 쓴 근거의 출처를 기록해 결과에 붙여요.src/server/registerApplicationTools/traceFeature.ts - 6
Claude Code → 근거가 붙은 설명과 구현
설명, 근거, 구현과 테스트에이전트가 받은 근거로 기능을 설명하고, 내 프로젝트에 비슷한 기능을 만들어 테스트해요.
넣으면 이렇게 나와요
나한테 맞을까요
이럴 때 좋아요
- 소스가 없는 앱의 기능이 어떻게 돌아가는지 알고, 내 제품에 비슷하게 만들고 싶을 때
- Electron·JavaScript 앱의 창, IPC, preload 구조를 빨리 훑어야 할 때
- 오래된 게임이나 프로그램을 읽을 수 있는 C/C++로 되살리는 보존 작업
- 녹화한 웹앱 요청으로 에이전트 학습·평가용 환경을 만들 때
이건 안 돼요
- README 기준, 네이티브 분석에는 Hopper·Ghidra·IDA·Kuna 중 하나가 필요하고 IDA·Hopper·JEB는 각자 라이선스를 지켜야 해요.
- Linux에서는 Ghidra·JADX와 JavaScript 분석에 procps 호환 ps가 필요하고, Windows의 Ghidra 지원은 아직 실험 단계예요.
- 사용기 기준, 헬퍼 함수로 조립한 preload 경로는 정적 분석이 찾지 못해 preload가 0개로 나왔어요.
- MIT라 회사에서도 쓰고 고칠 수 있지만, README는 내 것이거나 분석 허락을 받은 소프트웨어에만 쓰라고 적어 두었어요.
발행 전에 Devalley 편집자가 검토했어요. 칼럼은 어떻게 만드나요
REA: an MCP that lets your agent take apart closed apps
A tester gave it a 100 MB Electron app; 52 seconds later every window and IPC count matched
- Who
- Open source by morluto, fixed by many contributors; for developers and researchers who want to know how an app works without its source.
- When
- The repository started in April 2026; the latest release is rea-agents v6.8.0 from October 25, 2026.
- Where
- Runs in agents that use local MCP servers, such as Claude Code, Codex, Cursor, Gemini CLI and Grok Build; analysis stays on your machine.
What was hard
You see a feature you like in another app, but without its source there is no easy way to learn how it was built. It meant opening a decompiler and following assembly and call graphs by hand, and your agent had no tool to open that binary itself.
What it does about it
REA gives your agent one MCP server that lets it open the app's files directly. Native code goes to Hopper, Ghidra, IDA or Kuna for pseudocode and assembly; JavaScript, Electron and .NET are read as files with no engine at all. Every conclusion arrives with its evidence and its unknowns, so the agent can explain the feature and then build and test a version of it in your project.

What people made with it

Ran it on PI-Desktop's 100 MB app.asar in 52 seconds. Window, contextBridge and IPC counts all matched a manual grep; it missed two preload files whose paths were built by helper functions.
REA read 459 files (24.2 MB of text), parsed 421 JavaScript files, walked 3,114,427 AST nodes and had zero parse failures.
How it runs inside
- 1
You → Claude Code
npx rea-agents setupRegisters the REA MCP server and its workflow skill with the agents you pick, backing up existing config.src/cli/setupCommands.ts - 2
Claude Code → REA MCP server
First tool, chosen by targetThe skill routes by what you supplied: analyze_javascript_application for an ASAR, open_binary for a native file..agents/skills/reverse-engineer-anything/SKILL.md - 3
REA MCP server → Hopper · Ghidra · IDA · Kuna
Authenticated bridgeStarts a bridge through Hopper's --python option and talks to it only over a socket with a random token.bridge/hopper_bridge.py - 4
Hopper · Ghidra · IDA · Kuna → REA MCP server
Pseudocode, assembly, referencesThe engine reads functions, calls, strings and references and sends them back to REA's client.src/hopper/HopperClient.ts - 5
REA MCP server → Claude Code
trace_application_feature resultFor JavaScript apps it follows a feature's path without an engine and records the evidence sources it used.src/server/registerApplicationTools/traceFeature.ts - 6
Claude Code → Explanation, evidence, code
Explain, implement, testThe agent explains the feature from that evidence, then builds a similar one in your project and tests it.
What goes in, what comes out
Is it for you
Good for
- Learning how a feature in an app without source works, to build something like it
- Mapping an Electron or JavaScript app's windows, IPC and preload quickly
- Preservation work: bringing an old game or program back as readable C/C++
- Turning recorded web app traffic into an environment to train or evaluate agents
Not for
- Per the README, native analysis needs Hopper, Ghidra, IDA or Kuna, and IDA, Hopper and JEB must be properly licensed.
- On Linux, Ghidra, JADX and JavaScript analysis need a procps-compatible ps; Ghidra on Windows is still experimental.
- In the tester's run, preload paths built through helper functions were missed by static analysis, so it reported 0 preloads.
- MIT, so companies may use and modify it, but the README limits use to software you own or are authorized to examine.
Reviewed by Devalley’s editor before publishing. How the column is made