GitHub

morluto/rea — Reverse engineer anything with agents, from app behavior down to native binaries.

에이전트로 앱 동작부터 네이티브 바이너리까지 역공학하는 REA

REA는 AI 에이전트가 네이티브 바이너리, JavaScript·Electron 앱, .NET 어셈블리, 웹사이트를 조사하도록 CLI와 MCP 도구를 연결하는 오픈소스 프로젝트입니다. 분석은 로컬에서 진행하며, 조사 근거와 한계를 Evidence로 남깁니다.

AI 요약

REA는 소스 코드가 없는 앱의 기능을 에이전트가 조사하고, 조사 결과를 바탕으로 별도 프로젝트에 비슷한 기능을 구현하도록 돕는 CLI·MCP 도구입니다. 예를 들어 에이전트에 Notes 앱의 오프라인 검색 동작을 조사하고 TypeScript와 SQLite로 비슷한 기능을 만들라고 요청하면, REA가 앱의 바이너리와 관련 코드를 살펴볼 도구를 제공합니다. REA가 맡는 부분은 분석이며, 실제 코드 작성은 에이전트가 기존 파일 편집·테스트 도구로 진행합니다. 원본 소스 코드를 복구하거나 앱을 자동 복제한다고 주장하지 않습니다.

에이전트와 분석 도구 연결

npx rea-agents setup을 실행하면 사용할 에이전트를 선택하고 MCP 접근과 REA 워크플로를 설정합니다. 설정 변경 사항을 적용하기 전에 검토할 수 있고, 기존 설정은 백업합니다. Hopper 설치는 별도 선택 사항이며 승인 후 진행합니다. Hopper는 자체 라이선스가 필요한 별도 소프트웨어입니다. Ghidra를 사용하려면 이미 설치된 Ghidra와 Java 경로를 지정해야 합니다. 설정 후 에이전트를 재시작하면 자연어로 조사 작업을 요청할 수 있습니다.

Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI, Windsurf, Devin, OpenCode, Antigravity, GitHub Copilot CLI, Command Code, VS Code 등에서 설정을 지원합니다. 그 밖에도 로컬 MCP 서버를 실행할 수 있는 에이전트라면 수동 설정으로 연결할 수 있습니다. CLI에서 rea doctor는 호스트 환경과 의존성, 분석 도구, 에이전트 설정을 검사합니다. rea capabilities와 rea providers에서는 사용 가능한 기능과 분석 공급자를 확인합니다.

조사 범위와 공급자

네이티브 분석은 Hopper 또는 Ghidra로 Mach-O, ELF, PE 바이너리와 macOS .app을 조사합니다. 함수, 문자열, 어셈블리, 디컴파일 결과, 호출 관계와 참조를 살펴봅니다. Ghidra 분석은 원본 소스가 아닌 의사 코드와 관찰 결과를 제공합니다. Linux와 macOS에서는 함수 이름과 진입점 주석을 세션 데이터베이스에 원자적으로 기록할 수 있지만 실행 파일 바이트는 바꾸지 않습니다. Windows Ghidra 지원은 로컬 NTFS에 있는 x86-64 PE를 대상으로 하는 실험적 읽기 전용 범위입니다.

패키지와 리소스 조사에서는 디렉터리, ZIP, APK, IPA, ASAR, plist, 컴파일된 Interface Builder 파일, Apple 자산 카탈로그 등을 다룹니다. JavaScript·Electron 앱은 앱을 실행하지 않고 모듈, 가져오기, 소스맵, 라우트, IPC 채널, 저장소, 네이티브 애드온을 정적으로 분석합니다. 동적이거나 모호한 관계는 확인되지 않은 상태로 남깁니다. .NET 어셈블리는 메타데이터와 CIL 명령, 네이티브 의존성을 검사합니다.

웹 조사는 이미 실행 중인 Chrome 계열 브라우저에 연결해 선택한 페이지의 구조, 네트워크 메타데이터, 스크립트 근거, 스크린샷 등을 수집합니다. 수동 관찰 도구는 페이지를 이동하거나 클릭하지 않고 JavaScript를 실행하지 않습니다. 별도 시나리오 캡처 기능은 요청에 지정된 동작을 수행해 화면과 네트워크 활동 등을 기록합니다. Node·Electron 런타임 관찰은 Inspector에 연결해 스크립트 위치와 실행 컨텍스트 이벤트를 기록하지만, 모듈 간 가져오기 관계나 IPC 활동까지 추론하지는 않습니다.

근거와 한계 관리

REA는 분석 결과를 대상 파일, 공급자, 위치, 신뢰도, 한계와 함께 Evidence로 기록합니다. Evidence 번들을 가져오거나 내보내고, 파일·함수·실행 결과를 비교할 수 있습니다. 정적 분석과 런타임 관찰 결과를 연결할 때도 상관관계를 인과관계로 단정하지 않습니다. 재구성 검사는 통과·실패·미확인 상태를 구분하며, 관찰이 빠진 경우를 통과로 처리하지 않습니다.

Process Capture는 요청에 지정한 실행 파일과 시나리오를 사용자 권한으로 실행하고, 터미널·상호작용·종료·파일 시스템·프로세스 변화를 기록합니다. 보안 샌드박스가 아니므로 실행 대상은 현재 사용자의 권한을 가집니다. 브라우저 시나리오와 마찬가지로, 누락되거나 잘린 관찰만으로 두 실행이 같았다고 판단하지 않습니다. 분석 결과는 로컬에 남고 REA는 앱을 호스팅 분석 서비스로 업로드하지 않습니다. 다만 에이전트나 모델 제공자의 데이터 정책은 별도로 확인해야 합니다.

실행 환경과 재현성

지원 환경은 macOS 12 이상과 Ubuntu 24.04 이상, Fedora 41 이상, 64비트 Arch Linux입니다. Node.js는 22.x(22.19 이상), 24.x(24.11 이상), 26 이상이 필요합니다. 네이티브 바이너리 분석에는 Hopper 또는 Ghidra가 필요하지만, 아카이브와 JavaScript 정적 분석처럼 네이티브 엔진 없이 동작하는 기능도 있습니다. Linux의 Hopper 데모 실행에는 Xvfb, Python 3, X11, XTEST 의존성이 필요하며 승인된 설정 절차가 이를 설치합니다.

CLI 분석 결과는 대상 바이트, 작업, 매개변수, 분석 도구와 설정이 일치할 때 스냅샷에서 재사용할 수 있습니다. 스냅샷은 로컬에 소유자 전용 권한으로 저장하며, 정확히 같은 질의의 결과를 다시 쓸 때 공급자를 재실행하지 않습니다. MCP 세션은 열린 대상과 Evidence 기록을 유지합니다. 분석 도구를 자동 선택할 때 사용 가능한 도구가 여럿이면 명시적으로 선택해야 하며, 분석 실패 후 다른 도구로 조용히 전환하지 않습니다.

REA는 현재 네이티브 분석 범위, 앱 계층 연결, 런타임 동작 비교, 브라우저·Electron 상호작용, .NET 분석을 확장 과제로 제시합니다. IDA/Hex-Rays, Binary Ninja, Rizin, 모바일 앱, 펌웨어 등은 평가 대상이며 현재 지원 기능과 구분합니다.

원문: GitHub / 번역·요약: Trawling