morluto가 만든 오픈소스 프로젝트(
morluto/rea, MIT).
왜 필요한가?
소스 코드가 없는 프로그램이 어떻게 동작하는지 알아내려면 역공학(reverse engineering) 도구가 필요합니다. 네이티브 바이너리는 Ghidra나 Hopper 같은 디스어셈블러(기계어를 사람이 읽을 수 있는 형태로 바꿔 주는 도구)로, Electron 앱은 압축을 풀어 번들된 JavaScript로, 웹사이트는 브라우저 개발자 도구로 살펴봅니다. 대상마다 도구와 사용법이 다르고, 코딩 에이전트는 이런 도구를 직접 다루지 못합니다.
REA는 이 도구들을 하나의 MCP 서버로 묶어 에이전트에 연결합니다. 에이전트가 MCP로 REA를 호출해 대상을 살펴보고 관련 코드를 추적하면, REA는 발견한 내용을 근거와 함께 돌려줍니다. 에이전트는 그 결과를 바탕으로 추가 질문을 하거나, 동작을 설명하거나, 구현을 작성하고 테스트합니다. 같은 기능을 터미널에서 CLI로도 쓸 수 있습니다.
무엇을 할 수 있나
공식 사이트의 사례 세 가지가 쓰임새를 보여 줍니다.
- DX-Ball: 사운드 좌우 위치 계산 복원 — 사운드 호출에서 출발해 위치를 좌우 음량으로 바꾸는 함수를 찾고, 불완전한 의사 코드(pseudocode)를 C 코드로 옮깁니다. 복원한 코드는 원본 x86 기준 3,205개 케이스를 통과하고, 컴파일된 함수 63바이트를 그대로 재현합니다.
- Notion: Electron 클립보드 흐름 추적 — 화면 쪽(renderer)의 클립보드 API에서 시작해 preload와 IPC를 거쳐 메인 프로세스까지 따라가고, 서식 있는 클립보드 형식을 확인합니다.
- TH04: DOS 게임의 탄막 계산 복원 — PC-98용 원본 게임의 16비트 명령어를 살펴 고정 각도와 조준 각도 계산을 복원하고, 재구성한 C++ 코드를 당시 컴파일러 출력과 비교합니다.
분석할 수 있는 주요 대상과 결과는 다음과 같습니다. 전체 목록은 README의 “What you can analyze” 표에 있습니다.
| 대상 | REA가 돌려주는 것 | 필요한 것 |
|---|---|---|
| 네이티브 바이너리 | 의사 코드, 어셈블리, 문자열, 심볼, 호출과 참조 관계 | Hopper, Ghidra, IDA 중 하나 |
| JavaScript / Electron | 모듈, import, source map, 라우트, IPC, 네이티브 애드온 관계 | Node.js와 npm |
| 웹사이트 | 페이지 구조, 스크립트, 네트워크 관찰 결과, 요청한 스크린샷 | Chrome 계열 브라우저 |
| .NET 어셈블리 | 메타데이터, CIL 명령어, 선언된 네이티브 의존성, 빌드 비교 | 없음(정적 분석만) |
| Android APK | 매니페스트 선언, 클래스, 디컴파일된 메서드와 참조 | JADX와 JDK |
| 저장된 네트워크 캡처 | 요청, 응답, 노출된 페이로드와 소스 위치 | HAR 또는 Fiddler Everywhere SAZ 파일 |
핵심 기능
-
근거와 한계를 함께 반환
분석 결과에는 각 결론을 뒷받침하는 근거와 한계가 포함됩니다. 에이전트는 코드, 참조 관계, 확인하지 못한 부분을 함께 받아 설명이나 구현에 사용합니다.
-
네이티브 분석 엔진 선택
네이티브 분석은 이미 설치된 Hopper, Ghidra, IDA를 사용합니다. Hopper는 설정 과정에서 승인하면 설치할 수 있고, 작업에 필요할 때 REA가 Hopper를 실행합니다.
-
정적 분석과 런타임 캡처 구분
JavaScript와 .NET의 정적 분석은 애플리케이션을 실행하지 않고 파일만 읽습니다. 런타임 캡처는 대상을 사용자 권한으로 실행하거나 조작하며, 각 런타임 가이드가 그 영향을 설명합니다.
-
MCP와 CLI가 같은 작업 흐름 사용
에이전트용 MCP 도구와 터미널 명령이 같은 작업 흐름을 씁니다. 에이전트 없이 스크립트에서 호출할 수도 있습니다.
-
설정 변경 전 미리 보기와 백업
setup은 변경할 경로와 내용을 먼저 보여 주고 승인을 받은 뒤 적용합니다. 에이전트 설정 파일을 수정할 때는 관련 없는 항목을 보존하고 백업을 만듭니다.
사용 방법
Node.js 22.x(22.19 이상), 24.x(24.11 이상), 26 이상 중 하나와 npm이 필요합니다. 다음 명령으로 설정을 시작합니다.
npx rea-agents setup
연결할 에이전트를 고르고, 제안된 변경 내용을 확인한 뒤 승인합니다. 설정이 끝나면 REA의 MCP 서버와 작업 지침(스킬)이 등록되므로 에이전트를 다시 시작합니다.
이후 에이전트에게 분석을 요청합니다. README의 예시 프롬프트는 다음과 같습니다.
Understand how search works in the Notes app, show me the evidence, and build a
similar feature for my project.
터미널에서 바로 쓸 수도 있습니다. 압축을 푼 JavaScript/Electron 앱 디렉터리나 ASAR 파일을 분석하는 명령입니다.
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json
결과에는 모듈, import, Electron 경계와 각각의 근거가 담깁니다. rea 명령을 계속 쓰려면 npm install --global rea-agents로 설치합니다.
제거할 때는 rea uninstall을 실행합니다. REA가 등록한 에이전트 설정과 스킬 파일만 제거합니다.
알아두면 좋은 점
- 허용된 대상에만 사용합니다 — 프로젝트의
DISCLAIMER.md는 용도를 합법적인 연구, 교육, 상호운용성 확보, 소프트웨어 보존, 그리고 본인이 소유했거나 분석 권한이 있는 소프트웨어의 분석으로 밝힙니다. DRM이나 라이선스 검사 우회, 게임 치트 개발, 상용 소프트웨어 복제는 지원하지 않습니다. 역공학은 관할 지역의 법이나 대상 소프트웨어의 라이선스에 따라 제한될 수 있으며, 필요한 권한을 확보할 책임은 사용자에게 있습니다. - 샌드박스가 아닙니다 —
SECURITY.md는 신뢰할 수 없는 바이너리를 열면 선택한 분석 엔진이 사용자 권한으로 그 파일을 처리한다고 밝힙니다. 런타임 캡처는 대상을 실제로 실행합니다. 출처를 알 수 없는 대상은 격리된 환경에서 다루는 편이 안전합니다. - 분석은 로컬에서 실행됩니다 — README는 REA가 대상을 로컬에서 분석한다고 밝힙니다. 에이전트가 받은 도구 결과는 사용하는 모델 제공자의 데이터 정책을 따릅니다.
- 상용 도구 라이선스는 별도입니다 — Hopper, IDA, JEB 같은 상용 도구는 사용자가 정식으로 확보해야 하며, REA가 라이선스를 제공하지 않습니다. Ghidra는 기존 설치를 그대로 사용합니다.
- 변경이 잦습니다 — README는 REA가 빠르게 바뀌며 릴리스마다 버그 수정이 잦다고 안내합니다. 전역 설치는
rea update로, npx 방식은npx rea-agents@latest setup으로 갱신한 뒤 에이전트를 다시 시작합니다. - 스킬만 설치한 경우 —
npx skills add morluto/rea --skill reverse-engineer-anything은 에이전트용 지침만 설치하며, MCP 서버 등록이나 분석 엔진은 포함하지 않습니다. - 플랫폼별 요건 — 일부 대상은 특정 환경이 필요합니다. 예를 들어 펌웨어, 패킷 캡처, 크래시 덤프 분석은 Linux와 별도 도구를 요구합니다. 대상별 요건은 README 표에서 확인합니다.
- 출처 — morluto/rea (MIT), 문서: rea.tools/guides.