769 / 774

7 분 소요

hits

REA(Reverse Engineer Anything)는 소스 코드가 없는 앱이 어떻게 동작하는지 AI 에이전트가 직접 조사하게 해 주는 오픈소스 도구다. 어떤 앱에서 마음에 드는 기능을 봤을 때 에이전트에게 REA로 살펴보라고 하면, 에이전트는 그 앱을 검사해 기능의 동작 방식을 설명하고 근거를 보여 준 다음 내 프로젝트에 맞는 버전을 만들 수 있다. 분석 대상은 컴파일된 실행 파일부터 안드로이드 앱, 웹사이트, 기기 펌웨어까지 넓다.

저장소는 깃허브의 morluto/rea이고 TypeScript로 작성됐으며 MIT 라이선스를 따른다. 2026년 4월 14일에 만들어진 저장소가 10월 16일 기준으로 깃허브 별 26만 3천 개 이상을 받았다. README는 이 도구를 바이너리, 애플리케이션, 런타임 동작을 아우르는 리버스 엔지니어링용 MCP 하나라고 소개한다.

Hopper 안에서 REA가 분석 브리지를 실행하며 네이티브 바이너리를 검사하는 화면
Hopper에서 REA가 분석 브리지를 띄워 네이티브 바이너리(/usr/bin/true)를 검사하는 화면. 출처 REA README.

어떤 일을 하는 도구인가

REA는 에이전트를 네이티브 바이너리, 자바스크립트·일렉트론 앱, .NET 어셈블리, 웹사이트를 검사하는 도구들과 연결한다. 같은 도구를 터미널에서 직접 쓸 수도 있다. 분석은 로컬에서 돌고, 결과에는 결론마다 그 근거와 한계가 함께 붙는다.

깊이 있는 네이티브 분석에는 Hopper, Ghidra, IDA 중 하나를 쓴다. 설치 과정에서 사용자가 승인하면 Hopper를 대신 설치해 주고, Ghidra와 IDA는 이미 설치된 것을 쓴다. 정적 자바스크립트 분석과 .NET 검사는 네이티브 분석 엔진 없이도 된다.

README의 FAQ는 REA가 앱을 업로드하느냐는 질문에 대상을 로컬에서 분석한다고 답한다. 다만 도구가 낸 결과는 에이전트에게 넘어가고, 그 에이전트가 쓰는 모델 제공사에는 제공사 자체의 데이터 정책이 적용된다.

작동 방식

에이전트는 MCP로 REA를 호출해 대상을 검사하고 관련 코드를 추적한다. REA는 찾아낸 내용을 근거와 함께 돌려주고, 에이전트는 이를 바탕으로 후속 질문을 던지거나 동작을 설명하거나 구현을 작성하고 테스트한다. CLI 명령도 같은 워크플로를 쓴다.

REA 조사 흐름도. 질문, 검사와 추적, 근거 읽기, 활용의 네 단계와 후속 질문 화살표
REA 조사 흐름. 에이전트가 로컬 대상(앱·바이너리·브라우저)에 대해 묻고, REA가 로컬 분석 어댑터로 검사·추적하면, 에이전트가 코드·참조·미확인 사항을 읽고 설명·구현·테스트에 쓴다. 후속 질문은 다시 REA로 돌아간다. 출처 REA README.

돌려받는 코드는 분석 종류에 따라 다르다. 네이티브 분석은 의사 코드(pseudocode)와 어셈블리를 돌려주고, 자바스크립트·일렉트론 분석은 모듈과 그 관계를 복원한다. 실제 구현은 에이전트가 이 결과를 보고 작성하고 테스트한다.

설치와 사용법

Node.js와 npm이 설치돼 있으면 다음 명령으로 시작한다.

npx rea-agents setup

연결할 에이전트를 고르고 제안된 변경 사항을 검토해 승인하면 된다. 설치는 REA의 MCP 서버와 그에 맞는 워크플로 지침을 추가하고, 기존 설정은 백업해 둔다. 끝나면 에이전트를 다시 시작한다.

README가 지원 에이전트로 꼽는 것은 Claude Code, Codex, Cursor, Gemini CLI, Grok Build다. 설치 문서의 지원 목록에는 Claude Desktop, Windsurf, GitHub Copilot CLI, VS Code 등을 포함해 24개 클라이언트가 올라 있다. 목록에 없더라도 로컬 MCP 서버를 지원하는 에이전트라면 MCP를 직접 등록해 쓸 수 있다.

리눅스에서는 Ghidra, JADX, 펌웨어 도구를 실행하거나 정적 자바스크립트·일렉트론 분석을 할 때 프로세스 소유권 확인을 위해 REA의 PATH에 procps 호환 ps가 있어야 한다.

에이전트에게는 README의 예시처럼 요청한다.

Understand how search works in the Notes app, show me the evidence, and build a
similar feature for my project.

노트 앱의 검색 기능이 어떻게 동작하는지 근거와 함께 알아내고, 내 프로젝트에 비슷한 기능을 만들어 달라는 뜻이다. Notes 자리에 대상 앱과 알고 싶은 기능을 넣는다.

터미널에서 바로 쓸 수도 있다. 다음 명령은 압축을 푼 자바스크립트·일렉트론 앱 디렉터리나 ASAR 파일을 검사해 모듈, import, 일렉트론 경계와 각각의 근거를 돌려준다. Windows에서는 경로를 "D:/apps/example"처럼 쓴다.

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

자주 쓸 생각이면 npm install --global rea-agents로 rea 명령을 설치한다. 네이티브 분석은 먼저 분석 제공자(provider)를 설정해야 한다.

README는 REA가 빠르게 바뀌고 새 릴리스마다 버그 수정이 잦다며 최신 상태를 유지하라고 권한다. 전역 설치했다면 rea update를 실행하고, npx로 썼다면 npx rea-agents@latest setup을 다시 실행한 뒤 에이전트를 재시작한다. Bun으로 전역 설치한 경우 rea update에는 Bun 1.2.17 이상이 필요하다.

내려받을 곳도 정해 두었다. README는 REA를 morluto/rea 저장소, rea.tools, npm의 rea-agents 패키지에서만 받으라고 안내한다. 이름이 비슷한 저장소나 복사된 README만으로는 공식 배포본이라고 볼 수 없다는 경고다.

분석할 수 있는 대상

REA를 쓰려면 Node.js 22.x(22.19 이상), 24.x(24.11 이상), 26 이상 중 하나와 npm이 필요하다. 그 밖에 필요한 도구와 지원하는 호스트 환경은 대상마다 다르다. 표의 ‘직접 준비’는 REA가 설치해 주지 않아 사용자가 마련해야 하는 도구라는 뜻이다.

대상 REA가 돌려주는 정보 요구 사항
네이티브 바이너리 의사 코드, 어셈블리, 문자열, 심볼, 호출과 참조 Hopper, Ghidra 또는 IDA
오프라인 ELF 구조 섹션, 세그먼트, 원본 심볼·재배치 정보, 정적 보호 기법 후보 Linux x64용 pwntools(직접 준비)
Go 바이너리 내장된 컴파일러 버전, 모듈, 모듈 교체(replace) 정보, 빌드 설정 내장 정적 ELF/PE/thin Mach-O 검사, Go 설치 불필요
Rust 바이너리 cargo-auditable로 내장된 크레이트 이름, 버전, 소스, 의존 관계 내장 정적 ELF/PE/thin Mach-O 검사
WASM 아티팩트 유효성 검사, 섹션, import·export의 정확한 WAT 형태, 디코딩된 WAT WABT 1.0.42(직접 준비)
EVM 바이트코드 디스패치 선택자, 바이트 오프셋, 추론한 인수, 상태 변경 가능성 Linux x64, 로컬 raw/hex 바이트코드
SQLite 데이터베이스 테이블, 컬럼, 인덱스, 뷰, 트리거, 일반 테이블 중 선택한 행 로컬 데이터베이스·WAL 스냅숏, Node.js 24.x(24.15 이상) 또는 26 이상
기록된 리눅스 크래시 원시 노트, 기록된 모든 스레드의 레지스터·시그널, 선택적 매핑 후보 Linux x64용 pwntools(직접 준비), 선택적으로 GDB/pwndbg
자바스크립트·일렉트론 모듈, import, 소스 맵, 라우트, IPC, 네이티브 애드온 관계 Node.js와 npm, 리눅스는 procps 호환 ps
웹사이트 페이지 구조, 스크립트, 네트워크 관찰 결과, 요청한 스크린숏 크롬 계열 브라우저
저장된 네트워크 캡처 요청, 응답, 노출된 페이로드, 소스 위치 HAR 또는 Fiddler Everywhere SAZ, 리눅스의 mitmproxy는 mitmdump
.NET 어셈블리 메타데이터, CIL 명령어, 선언된 네이티브 의존성, 빌드 비교 없음(정적 분석만)
안드로이드 APK 매니페스트 선언, 클래스, 디컴파일한 메서드, 참조 헤드리스 JADX와 전체 JDK(Linux/macOS/Windows x64)
안드로이드 기기 기기, 패키지, 프로세스, 로그, 덤프, 화면 캡처, APK·파일 전송 adb(직접 준비, 에뮬레이터 또는 실기기)
JEB 프로젝트 엔진 기반 프로젝트 유닛, 아티팩트 다이제스트, 타입·메서드 의사 코드 사용자가 띄운 MCP 제공 JEB 클라이언트, REA_JEB_MCP_URL로 지정
안드로이드 리소스 디코딩된 매니페스트, 문자열 테이블, 로케일, 버전 정보 Apktool 실행기(직접 준비)
플러터 앱 Dart 스냅숏 해시, ABI별 라이브러리 다이제스트, 엔진 빌드 출처 없음(정적 APK 파싱)
펌웨어 영역, 추출 결과, 네이티브 분석으로 넘길 항목 리눅스의 Binwalk 또는 Unblob
기록된 패킷 선택한 필드, 반복 값, 필터, decode-as 규칙 리눅스, TShark 4.x와 prlimit
패킷 요약 엔드포인트, DNS, TLS SNI, 프로토콜 분포, HTTP 요청 tshark와 capinfos(직접 준비, 리눅스에서 검증)
기록된 로직 신호 디코더 주석, 샘플 범위, 진단 정보 리눅스, sigrok-cli 0.7.2와 prlimit
패키지와 리소스 파일 목록, 다이제스트, plist, 애플 번들 구조, 추출한 리소스 별도 도구 표기 없음(관련 가이드만 안내)
프로세스 동작 터미널 출력, 상호작용, 종료와 파일 시스템 관찰, 실행 간 비교 네이티브 PTY가 있는 Linux/macOS

정적 자바스크립트 검사와 .NET 검사는 앱을 실행하지 않고 주어진 파일만 읽는다. 런타임 캡처는 사용자 권한으로 대상을 실행하거나 대상과 상호작용하며, 그 영향은 각 런타임 가이드에 적혀 있다.

오프라인 네이티브 바이너리 검사에는 사용자가 준비한 GNU objdump와 Rizin도 쓸 수 있다. REA가 이 둘을 설치하거나 업데이트하지는 않는다. 지원하는 네이티브 형식과 호스트 환경은 분석 제공자마다 다르다. Ghidra는 16비트 DOS 분석도 지원하고, Windows용 Ghidra 지원은 아직 실험 단계다.

실제 사례

README와 홈페이지의 쇼케이스는 세 가지 사례를 소개한다.

DX-Ball 사운드 패닝, Notion 클립보드 브리지, TH04 탄막 링 사례를 나타낸 픽셀 일러스트 세 점
왼쪽부터 DX-Ball 사운드 패닝, Notion 클립보드 브리지, TH04 탄막 링 사례를 나타낸 일러스트. 출처 REA README.
  • DX-Ball, 사운드 패닝 계산 재구성. 사운드 호출을 따라 위치를 패닝 값으로 바꾸는 도우미 함수까지 들어가 명령어를 살피고, 불완전한 의사 코드를 C 코드로 옮긴다. 재구성한 코드는 원본 x86 기준 케이스 3,205개를 통과하고, 컴파일된 함수 바이트 63개를 모두 그대로 재현한다.
  • Notion, 일렉트론 클립보드 브리지 추적. 렌더러의 클립보드 API를 찾아 프리로드와 IPC를 거쳐 메인 프로세스까지 따라가고, 서식 있는 클립보드 형식을 살핀다.
  • TH04, DOS 탄막 링 계산 복원. PC-98용 원본 게임의 16비트 명령어를 검사해 고정 각도와 조준 각도 계산을 복원하고, 재구성한 C++ 코드를 당시 컴파일러의 출력과 비교한다.

사용 조건과 책임

README는 REA의 용도를 합법적인 연구, 교육, 상호운용성, 소프트웨어 보존, 그리고 본인이 소유했거나 검사 권한을 받은 소프트웨어의 분석으로 밝힌다. 책임 있는 사용 안내(DISCLAIMER.md)는 여기에 보안 연구, 악성코드와 침해 사고 분석, 취약점 연구와 조율된 공개, CTF, 디버깅과 감사를 더한다. 불법이거나 허가받지 않은 사용에 대한 프로젝트의 입장은 과거 릴리스와 재배포본을 포함해 모든 버전, 배포 경로, 플랫폼에 똑같이 적용된다.

같은 안내는 프로젝트가 지원하지도 돕지도 않는 용도를 따로 적어 두었다.

  • DRM, 라이선스 검사, 안티치트 같은 기술적 보호 조치 우회
  • 게임 치트 개발이나 온라인 서비스 변조
  • 테스트 권한이 없는 시스템의 인증, 봇 차단, 접근 통제 우회
  • 독점 소프트웨어 복제나 보호된 코드·에셋 재현
  • AI 모델 제공사의 이용 정책이나 안전장치 회피
  • AI 계정이나 API 접근 권한의 재판매·공유

이런 도움 요청은 이슈와 토론에서 답변 없이 닫히고, 요청한 사람이 REA 커뮤니티에서 제외될 수도 있다.

필요한 허가를 받고 법률, 라이선스 계약, 서비스 약관을 지키는 일은 사용자 책임이다. 사는 지역의 법이나 분석하는 소프트웨어의 라이선스가 리버스 엔지니어링 자체를 제한할 수도 있다. 에이전트에게 시킨 명령, 설정, 스크립트, 동작도 사용자 책임에 들어간다. 소프트웨어가 공개돼 있거나 파일을 갖고 있거나 디버깅 엔드포인트에 접근할 수 있다는 사실만으로 모든 작업이 허락되지는 않는다. 산출물을 검사할 권한이 있다고 해서 그 프로그램을 실행하거나, 트래픽을 가로채거나, 기기를 바꾸거나, 다른 사람의 시스템과 상호작용할 권한까지 생기지도 않는다. 일부 워크플로는 프로그램을 실행·관찰하고, 네트워크 트래픽을 캡처하고, 연결된 기기를 조작하기도 하므로, 신뢰할 수 없는 대상은 적절한 환경에서 다루라고 권한다. 로컬에서 돌린다고 권한이 생기거나 외부에 영향이 없다고 보장되지도 않는다.

분석 결과에도 한계가 있다. 디컴파일, 재구성, 휴리스틱, AI 보조 분석은 불완전하거나 틀릴 수 있고 정확성, 완전성, 보안, 호환성, 법적 적합성을 보장하지 않는다. 중요한 결론은 근거를 직접 확인한 뒤에 기대야 한다. 소스 코드처럼 보이는 결과물이나 분석 보고서를 얻었다고 원래 프로그램이나 그 데이터, 생성된 결과물에 대한 권리가 생기지는 않는다. 결과를 게시하거나 공유하거나 다른 제품·서비스에 쓰기 전에 대상의 권리 관계와 도구의 약관을 확인해야 한다.

IDA Pro와 Hex-Rays 디컴파일러, Hopper, JEB 같은 상용 도구는 해당 라이선스에 따라 합법적으로 구하고 사용 권한을 갖춰야 한다. REA는 어떤 도구의 라이선스, 키, 활성화 권한도 주지 않는다. 체험판과 데모 역시 사용자 수, 기능, 자동화, 결과물 공유 제한을 포함한 공급사 약관을 따른다. 크랙 버전, 도난 키, 허가 없는 키 공유, 라이선스 제한 우회는 허용되지 않는다.

REA가 직접 작성한 코드는 MIT 라이선스로 배포되며 별도 보증 없이 있는 그대로(AS IS) 제공된다. 서드파티 자료는 각자의 라이선스와 저작권 표시를 따른다. 취약점을 발견하면 공개 이슈가 아니라 저장소 Security 탭의 비공개 신고 기능(Report a vulnerability)으로 알려야 한다.

출처

  • morluto, REA: Reverse Engineer Anything, GitHub 저장소. https://github.com/morluto/rea
  • REA 홈페이지. https://rea.tools/
  • REA, DISCLAIMER.md(책임 있는 사용 안내). https://github.com/morluto/rea/blob/main/DISCLAIMER.md
  • 위키독스 블로그 소개글. https://wikidocs.net/blog/@jaehong/33128/
공유