REA로 Claude Code가 배포본에서 버튼 동작을 찾게 하는 법
붙이고 질문 앞에 스킬 이름을 적는다
REA는 소스 없는 배포본을 읽는 도구를 에이전트에게 내주는 MCP 서버입니다. 붙여 두면 Claude Code가 app.asar를 실행하지 않고 읽어, 버튼이 하는 일을 파일과 줄 위치를 달아 답합니다. app.asar는 Electron이 앱 파일을 한 덩어리로 묶은 아카이브입니다.
npx rea-agents setupNode.js는 22.19+, 24.11+, 26 이상 중 하나가 필요합니다. 에이전트 목록에서 Claude Code를 Space로 고르고, Hopper 설치 질문에는 No를 고릅니다. Hopper는 네이티브 바이너리용이라 Electron 앱에는 필요 없습니다.
검토 화면에 MCP 서버 등록과 스킬 설치, 두 변경이 나옵니다. Apply these 2 changes?에서 승인하고 Claude Code를 다시 켜면 끝입니다.
메모 앱 1.2.0을 쓰는 사용자가 "내보낸 파일이 어디 있나요?"라고 물으면, 그때 묶어 낸 app.asar가 있는 폴더에서 Claude Code를 열고 이렇게 보냅니다.
/reverse-engineer-anything app.asar 는 내가 만든 메모 앱 1.2.0 배포본이야. 내보내기 버튼을 누르면 메모가 어디에 어떤 파일로 저장되는지 근거와 함께 알려 줘.스킬 이름 없이 같은 문장만 보내면 REA를 붙여 둔 세션도 REA 도구 대신 셸 명령으로 asar를 풀어 읽곤 합니다.
같은 질문을 REA 없이 보낸 답과 나란히 놓으면 결론은 같습니다. 둘 다 문서 폴더 아래 MemoExports/<제목>.md를 찾습니다.
REA 없이 받은 답은 근거로 asar에서 꺼낸 코드 조각을 그대로 옮깁니다. REA를 거친 답은 내보내기 버튼이 main 프로세스에 저장을 시키는 통로를 note:export로 짚고, 그 양 끝을 dist/preload.js 1행처럼 파일과 줄 위치로 답니다. 앱을 실행하지 않고 코드만 읽은 결과라는 한계 문장도 답 끝에 붙습니다.
배포본이 main 브랜치의 어느 커밋인지 알고 그 소스를 바로 꺼낼 수 있다면 REA 없이 소스를 읽게 두면 됩니다.
바뀔 파일을 먼저 보거나 한 프로젝트에만 붙이려면
setup은 ~/.claude.json에 mcpServers.rea를 더하고, ~/.claude/skills/reverse-engineer-anything에 스킬을 깝니다. 원래 설정은 ~/.claude.json.rea.backup으로 남습니다. 승인 전에 계획만 보려면 이렇게 돌립니다.
npx rea-agents setup --client claude_code --dry-runsetup으로 등록하면 모든 프로젝트에 REA가 붙습니다. 한 프로젝트에서만 쓰려면 그 폴더에서 로컬 범위로 등록합니다. 이 방법은 MCP 도구만 붙이고 스킬은 깔지 않아서 스킬 이름으로 부를 수 없습니다.
claude mcp add --scope local rea -- npx -y rea-agents@6.4.0 mcpCodex·Cursor·Gemini CLI도 setup의 같은 목록에서 고릅니다.
에이전트 없이 터미널에서 같은 분석을 돌리려면
CLI로 같은 분석을 돌릴 수 있습니다. 결과 JSON이 크니 jq로 통로와 preload가 화면에 연 객체만 거릅니다.
npx -y rea-agents@6.4.0 analyze-javascript-application "$PWD/app.asar" --json > memo.jsonjq -r '.normalized_result.graph.nodes[] | select(.kind | test("ipc|context-bridge")) | .kind as $k | .observations[] | "\($k) \(.label) \(.evidence.location.value.source):\(.evidence.location.value.start.line)"' memo.json | column -t메모 앱에서는 화면에 열린 객체가 memo 하나이고, note:export를 받는 핸들러가 dist/main.js 4행에 있습니다.
업데이트 뒤 문의에는 두 배포본을 같이 준다
1.3.0을 낸 뒤 "내보낸 파일이 문서 폴더에 없다"는 문의가 오면 두 배포본을 같이 줍니다.
/reverse-engineer-anything v1.2.0/app.asar 와 v1.3.0/app.asar 는 내 메모 앱의 두 배포본이야. 1.3.0에서 내보내기 저장 위치가 어떻게 달라졌는지 근거와 함께 짧게 알려 줘.REA가 두 배포본을 각각 분석한 뒤 버전 비교로 바뀐 곳을 note:export 핸들러로 좁힙니다. 1.3.0은 userData/exports에 날짜를 붙여 저장하니, 사용자에게 새 위치를 안내하거나 옛 폴더를 옮기는 코드를 넣으면 됩니다.
Electron 앱이 아닌 대상이나 남이 만든 앱이라면
네이티브 바이너리의 의사코드는 별도 분석 엔진이 있어야 나옵니다. 분석 대상 표에서 자주 쓰는 것만 추렸습니다.
| 대상 | 돌려받는 것 | 더 필요한 것 |
|---|---|---|
| Electron·JS 앱(asar, 폴더) | 모듈, IPC, preload 관계와 위치 | 없음 |
| .NET 어셈블리 | 메타데이터, CIL 명령 | 없음 |
| Go·Rust 바이너리 | 빌드에 담긴 의존 모듈과 버전 | 없음 |
| 네이티브 바이너리 | 의사코드, 어셈블리, 문자열 | Hopper·Ghidra·IDA 중 하나 |
| Android APK | 매니페스트, 클래스, 메서드 | JADX와 JDK |
남이 만든 앱은 라이선스와 약관이 분석을 허락하는지 먼저 봅니다. DRM·라이선스 확인 우회는 허용된 용도가 아닙니다.