REA — AI 에이전트에게 역공학을 맡기는 도구
한 줄로
REA(Reverse Engineer Anything) 는 AI 코딩 에이전트(클로드 코드·코덱스·커서 등)가 소스코드 없이 완성된 프로그램을 뜯어보게 해 주는 MCP 서버다. 깃허브 morluto/rea, MIT 라이선스, npm 패키지 이름은 rea-agents.
왜 화제인가 (26-10-19 실측)
| 항목 | 값 |
|---|---|
| 저장소 생성 | 2026-04-14 |
| 깃허브 별 | 327,680 |
| 포크 | 82,935 |
| 열린 이슈 | 1,225 |
| 최신 릴리스 | rea-agents 6.7.0 (2026-10-18) — 10월에만 6.2→6.7, 6번 |
| 에이전트에게 주는 도구 수 | 약 200개 (스킬 메타 기준 207) |
10월 둘째 주부터 파생 저장소가 줄줄이 생겼다. REA 를 쓴 역공학 사례를 모은 awesome 목록, 중국어 심층 조사 보고서, DeepSeek 하네스용 브리지, 그리고 「MCP 없이 CLI 도구만으로 같은 일을 더 싸게 한다」는 경량 대체판 leanrea 까지 나왔다(아래 따로 정리).
leanrea 의 「38% 빠르고 35% 싸다」는 어디까지 맞나 (26-10-19 검토)
aicodeking/leanrea 는 AI 유튜버가 10-17 하루에 올린 8KB 짜리 스킬 파일이다. REA 의 MCP 층을 빼고, 대상마다 어떤 기본 명령(otool·go version -m·asar·rg 등)을 쓰라는 안내만 준다.
맞는 것
- 공개한 원자료(36회 실행 기록)를 다시 더해 보면 README 의 합계(시간 388/479/627초, 비용 2.21/$3.36, 점수 74/67/75)가 그대로 나온다. 숫자를 지어낸 건 아니다
- 「REA 도구 정의가 3.35MB」는 우리 기계에서 따로 재도 같다 — 207개, 3,346,603바이트
- 「같은 일을 REA CLI 로 하면 느리다」도 방향은 맞다. 우리 기계에서 gh 바이너리의 Go 빌드 정보를 뽑으면
go version -m0.003초·16KB,rea inspect-go-binary1.5초·58KB. REA 쪽 결과가 큰 건 해시·출처 같은 근거 기록을 붙이기 때문이다
걸러 읽을 것
- 반복 3회, 모델 1개, 맥 1대. REA 쪽 실행시간은 같은 과제에서도 47~122초로 출렁였다. 3회짜리 표본에서 이만큼 출렁이면 「38%」라는 숫자 자체는 오차가 크다. 다만 방향은 한결같다 — 같은 과제·같은 회차끼리 짝지어 보면 12쌍 모두 REA 쪽이 턴도 토큰도 더 썼다
- 과제 넷이 다 쉬운 편이다. 아무 스킬 없는 맨 모델도 75점 중 66점(거부 1회)을 냈다. REA 의 본바탕인 Ghidra 디컴파일은 엔진을 안 깔아서 아예 시험되지 않았다
- REA 쪽도 실제론 REA 도구를 거의 안 썼다. 실행당 REA 호출 0~3번, 나머지는 Bash. 비용 차이 상당 부분은 REA 스킬 문서(23.5KB)가 시키는 근거 확인 절차가 턴을 늘린 몫이다
- 「400k 토큰·$1.60」은 최악 조건이다. 클로드 코드 기본값(도구를 필요할 때만 불러오기)에선 REA 를 붙여도 +3.5k 토큰이라고 저자 자신의 표에 적혀 있다
- 과제 선정·정답 키·채점(정규식)을 모두 저자가 만들었다. 실행 격리도 없었다(이슈 #3)
- leanrea 자체도 아직 무르다. 표 안 명령의
\|가 그대로 복사돼 9개 명령이 깨지고(이슈 #1), 지정한 Ghidra 스크립트DecompileAll.java는 Ghidra 에 없는 파일이다(이슈 #5). 둘 다 미해결
정리: 「짧은 지시문 + 기본 CLI」 가 쉬운 정찰 과제에선 MCP 층보다 싸고 빠르다는 건 그럴듯하고 우리 재측정과도 맞는다. 하지만 「REA 와 같은 일을 한다」는 증명은 아니다. 깊은 디컴파일·근거 기록·안드로이드·런타임 관찰처럼 REA 가 실제로 무게를 두는 곳은 비교에 들어가지 않았다.
🔴 README 맨 위에 경고가 있다. 비슷한 이름의 저장소나 README 를 베낀 사본은 공식이 아니다. 받을 곳은 github.com/morluto/rea, rea.tools, npm rea-agents 셋뿐이다. 인기 도구는 가짜 패키지가 따라붙는다.
무엇을 하나
에이전트가 MCP 로 REA 를 부르면, REA 가 대상 파일·앱을 열어 들여다보고 근거(Evidence)를 붙인 결과를 돌려준다. 에이전트는 그걸 읽고 다음 질문을 하거나, 동작을 설명하거나, 같은 기능을 새로 짜서 시험한다.
다룰 수 있는 대상(README 표에서 추림):
| 대상 | 돌려주는 것 | 따로 필요한 것 |
|---|---|---|
| 네이티브 실행파일(exe·ELF·Mach-O) | 의사코드·어셈블리·문자열·호출관계 | Ghidra·Hopper·IDA 중 하나 |
| JavaScript / Electron 앱 | 모듈·import·소스맵·라우트·IPC | 없음(Node 만) |
| 웹사이트 | 페이지 구조·스크립트·네트워크 관찰·스크린샷 | 크롬 계열 브라우저 |
| 저장된 네트워크 캡처(HAR) | 요청·응답·페이로드와 그 출처 코드 위치 | 없음 |
| .NET 어셈블리 | 메타데이터·CIL·네이티브 의존성 | 없음(정적 분석) |
| 안드로이드 APK·기기 | 매니페스트·클래스·디컴파일 메서드 / adb 로그·화면 | JADX+JDK / adb |
| SQLite DB | 표·열·인덱스·트리거·행 일부 | Node 24.15 이상 |
| Go·Rust 바이너리 | 컴파일러 버전·의존 모듈 목록 | 없음 |
| 펌웨어·패킷·로직신호 | 영역 추출·필드 디코딩 | binwalk·tshark·sigrok 등 |
README 의 공식 사례 셋:
- DX-Ball(옛 벽돌깨기 게임) — 효과음 좌우 위치 계산 함수를 찾아 C 로 재구성. 원본 x86 대조 3,205건 통과, 컴파일 결과 63바이트 일치
- Notion(Electron 앱) — 클립보드 기능이 화면→preload→IPC→메인 프로세스로 어떻게 흐르는지 추적
- 동방 TH04(PC-98 도스 게임) — 16비트 명령어에서 탄막 각도 계산식 복원
설치 (요지)
- Node.js 22.19+ / 24.11+ / 26+ 와 npm 필요
npx rea-agents setup이 쓰는 에이전트에 MCP 등록과 스킬 설치를 한 번에 한다. 등록 뒤 에이전트를 재시작해야 도구가 보인다- 고장 진단:
npx rea-agents doctor --client claude_code --json - 네이티브 바이너리 깊이 보기는 Ghidra/Hopper/IDA 가 있어야 한다. JS·Electron·.NET·웹은 그것 없이 바로 된다
- 분석은 로컬에서 한다. 단 결과는 에이전트의 모델 회사로 간다 — 남의 민감 자료를 열 땐 그 점을 따져라
품앗이에서 쓰는 모양
- 2026-10-16 2호기 클로드 코드에 붙였고, 10-19 6.7.0 으로 올리면서 무료 분석 엔진을 다 깔았다
| 엔진 | 맡는 일 | 실측 (10-19) |
|---|---|---|
| Ghidra 12.1.4 | 실행파일 디컴파일(기본값) | 리눅스 실행파일 함수 하나 15.7초 |
| Kuna 1.833 | 가벼운 디컴파일러(ELF·맥) | 같은 파일 2.4초, main 까지 이름 붙여 복원 |
| JADX 브리지 0.7.1 | 안드로이드 APK | 클래스 목록 4.4초 |
| Rizin·gdb·binwalk·tshark·sigrok·adb·apktool | 보조 도구 | 설치만 |
안 깐 것: Hopper·IDA(상용), wabt(배포판 버전이 REA 요구 1.0.42 보다 낮음).
설치하며 밟은 함정 셋:
rea update가 권한 오류로 멈춘다. 시스템 폴더에 전역 설치했으면sudo npm install -g rea-agents@<버전>로 올린다. 의존성 frida 의 설치 스크립트를--allow-scripts=frida로 허용해야 한다- 엔진을 둘 이상 깔면 자동 선택이 실패한다. Ghidra 와 Kuna 가 같은 파일을 둘 다 받을 수 있으면 REA 는 고르지 않고 「Multiple analysis providers」 오류를 낸다. MCP 등록 환경변수에
REA_ANALYSIS_PROVIDER=ghidra를 넣어 기본값을 정하고, Kuna 는 쓸 때 지정한다 - 같은 함수도 엔진마다 주소가 다르다. Ghidra 는 기준 주소를 0x100000 에 올려 0x102730 이라 부르고, Kuna 는 0 기준이라 0x2730 이라 부른다. 엔진을 바꿀 땐 주소를 옮겨 적지 말고 이름이나 목록으로 다시 찾는다
쓸 자리 후보 (아직 해 본 것 아님):
- 현장 AX 에서 자주 막히는 곳이 벤더 프로그램의 블랙박스다. API 를 안 주는 업무용 웹앱·설치형 프로그램에서 「이 버튼이 실제로 어떤 요청을 보내나」를 HAR·웹 관찰로 읽으면, 사람이 손으로 하던 다운로드·입력을 자동화할 길이 보인다
- 옛 프로그램이 남긴 SQLite·로컬 DB 구조 파악 — 자료 이관 전에 표 구조부터 읽기
- 우리가 쓰는 Electron 데스크톱 앱이 이상하게 굴 때 원인 추적
법적 선 — 「호환을 위해서만」
REA 자체도 「합법적 연구·교육·상호운용·소프트웨어 보존·내 것이거나 허락받은 소프트웨어 분석」용이라고 못박는다.
한국 법의 기준은 저작권법 제101조의4(프로그램코드역분석) 다(2026-10-19 법제처 현행 원문 확인, 10-29 시행 개정본에도 이 조는 그대로).
- 할 수 있다: 정당하게 프로그램을 쓰는 사람이 호환에 필요한 정보를 달리 얻을 수 없을 때, 호환에 필요한 부분에 한정해 권리자 허락 없이 역분석
- 못 한다: 그렇게 얻은 정보를 ① 호환 말고 다른 목적에 쓰거나 남에게 넘기는 것 ② 원 프로그램과 표현이 실질적으로 비슷한 프로그램을 만들어 파는 데 쓰는 것
현장으로 옮기면: 「우리 자료를 우리 시스템과 잇기 위해」 들여다보는 건 이 조의 자리다. 벤더 기능을 베껴 대체 제품을 만드는 건 선 밖이다. 이용약관에 역분석 금지 조항이 따로 있을 수 있으니 계약서도 같이 본다.
출처
- 저장소: https://github.com/morluto/rea · 사이트: https://rea.tools
- npm: https://www.npmjs.com/package/rea-agents
- 저작권법 제101조의4 — 국가법령정보센터