REA MCP 사용기 — exe·APK·웹앱을 AI로 해부하는 리버스 엔지니어링

웰컴스 매니저 조회 272

exe 파일을 AI에게 물어본다 — 리버스 엔지니어링 MCP 'REA' 구축·사용기

실행파일 하나만 남은 프로그램, "이게 대체 무슨 프로그램이지?" — 이제 디스어셈블러를 열 필요 없이 AI에게 시켜봤습니다
ZCode AI 활용 시리즈 · Windows 11 + ZCode + REA 6.7.0 기준 (2026-10)


01. 왜 필요했나

이런 경험, 한 번쯤 있으실 겁니다.

  • 출처를 알 수 없는 exe 파일 하나가 남아 있는데, 바이러스 검사는 깨끗한데 뭘 하는 프로그램인지 알 수가 없다
  • 소스코드가 없는 레거시 프로그램을 유지보수해야 하는데, 개발사는 이미 사라졌다
  • 내가 만든 프로그램이 고객 PC에서 이상 동작을 하는데, 로그만으로는 원인을 모르겠다

이때 쓰는 게 리버스 엔지니어링 도구입니다. 유료의 IDA Pro, NSA가 만든 무료 Ghidra 같은 디스어셈블러가 대표적이죠. 문제는 이 도구들, 전문가용 GUI 프로그램이라는 점입니다. 열어보면 어셈블리와 어지러운 그래프가 나오고, 뭘 봐야 할지 알아야 뭘 볼 수 있습니다.

그래서 생각한 게 "AI 에이전트한테 시키면 안 되나?"였습니다. 사실 이 시리즈에서 Blender·FreeCAD·KiCad를 MCP로 AI에 물려봤는데, 이번엔 반대로 AI가 프로그램을 들여다보게 만들어보고 싶었습니다. 그 역할에 딱 맞는 도구가 REA였습니다.


02. REA가 하는 일

REA는 MIT 라이선스 오픈소스로, 하나의 CLI이자 MCP 서버로 동작합니다. MCP(Model Context Protocol)는 AI 에이전트에게 도구를 물려주는 표준 규격인데, REA를 등록해두면 AI가 스스로 "이 exe 분석해볼게"라면서 도구를 호출합니다.

분석 대상 형식 별도 엔진 필요?
네이티브 실행파일 PE (Windows exe/dll), ELF, Mach-O Ghidra 등 1개 설치 필요
.NET 프로그램 PE/CLI (C# 등) 불필요
JavaScript / Electron 앱 asar, JS 번들 불필요
웹사이트 라이브 페이지, HAR, 소스맵 불필요
Android 앱 APK JADX + apktool (선택)
펌웨어 · 스마트컨트랙트 바이너리 덤프, EVM 바이트코드 불필요
네트워크 캡처 pcap/pcapng, QUIC qlog, HAR, Fiddler SAZ tshark 등 (선택)
기타 아티팩트 SQLite DB, WASM, Go/Rust 빌드정보, Flutter AOT, HarmonyOS HAP 불필요

핵심 특징은 세 가지입니다.

  1. 완전 로컬 — 분석 파일이 클라우드로 업로드되지 않습니다. 회사 내부 프로그램도 올릴 걱정 없이 분석할 수 있습니다.
  2. Evidence 기반 — 모든 결과는 해시·출처·신뢰도가 기록된 "증거" 객체로 반환됩니다. AI가 그럴싸하게 지어내는 게 아니라 실측에 근거해 답합니다.
  3. 규모 — 도구 207개, 프롬프트 6개. 분석뿐 아니라 버전 비교, 웹앱 관측, 크래시 덤프 해석까지 커버합니다.

전체 그림

flowchart TB
  subgraph AI["ZCode 등 AI 에이전트"]
    A["사용자가 대화로 지시"]
  end
  subgraph REA["REA (동일 바이너리)"]
    S["rea --mcp · MCP 서버 — 도구 207개"]
    C["rea analyze / decompile ... · CLI로 직접 실행도 가능"]
  end
  subgraph ENG["분석 엔진"]
    G["Ghidra (네이티브 디컴파일)"]
    J["JDK 21 (Ghidra 구동용)"]
    B["내장 파서 (.NET / JS / 펌웨어)"]
  end
  subgraph T["분석 대상"]
    T1["exe / dll"]
    T2["Electron · JS 앱"]
    T3["웹사이트 (CDP 연결)"]
    T4["APK · 펌웨어"]
  end
  A -->|"MCP 도구 호출"| S
  S -->|"도구 결과"| A
  A -->|"터미널에서 직접"| C
  S --> ENG
  C --> ENG
  ENG --> T

2026-10 업데이트 노트 — 6.4.0 → 6.7.0

초고를 쓰고 며칠 뒤 REA가 6.7.0까지 업데이트됐습니다(2026-10-18 릴리스). 설정은 그대로 두고 npm install --global rea-agents@latest 한 번으로 갱신되며, 이 글의 실측치도 6.7.0 기준으로 다시 확인했습니다(도구 170개 → 207개). 주요 추가 기능은:

  • 네트워크 캡처 분석 (6.5) — pcap/pcapng(TShark), QUIC qlog, Fiddler SAZ, HAR 기반 API 표면 추출. "이 프로그램이 어디로 통신하는가"를 캡처 파일만으로 추적할 수 있게 됐습니다.
  • 오프라인 아티팩트 분석 (6.5) — SQLite DB 스냅샷, WASM 모듈(실행 없이), Go/Rust 빌드 메타데이터(임베디드 의존성 목록 포함), Flutter APK 구조, HarmonyOS HAP 인벤토리.
  • CPU 아키텍처 확장 (6.5~6.6) — Ghidra 연동이 RISC-V, MIPS32, Windows ARM PE, m68k까지 지원. ARM용 프로그램도 Windows PC에서 정적 분석할 수 있게 됐습니다.
  • 신호 녹음 디코딩 (6.5) — sigrok 녹음 파일에 프로토콜 디코더(UART 등)를 적용 (Linux 전용).
  • 코드스플릿 JS 번들 복구 (6.5) — 웹/Electron 앱이 청크로 쪼개져 있어도 관련 번들을 한꺼번에 회수.

⚠️ 업데이트 한 가지 주의점: 구버전 REA MCP 서버가 실행 중인 상태에서 npm install하면 Windows에서는 네이티브 모듈 교체가 반쯤 끝나고, 이후 "Windows native artifact SHA-256 does not match package metadata" 오류로 Ghidra 연동이 죽습니다. AI 클라이언트를 종료한 뒤 업데이트하고, rea capabilities에서 Ghidra가 available인지 확인하세요. (저는 확인 안 하고 썼다가 한 번 더 재시작했습니다)


03. 설치기 — 예상보다 쉬웠고, 딱 한 군데서 막혔다

전체 흐름은 이렇습니다.

flowchart LR
  A["Node.js 24 LTS"] --> B["rea-agents 설치 — npm install -g"]
  B --> C["Ghidra 설치 — 압축만 풀면 끝"]
  C --> D["JDK 21 설치 (Temurin)"]
  D --> E["AI 클라이언트에 — MCP 서버 등록"]
  E --> F["rea doctor로 검증"]
  F --> G["재시작 → 완료"]

준비물

구성 요소 버전 용도
Node.js 24.x LTS REA 구동 (23.x는 아래 트러블 참고 — 필수 확인!)
rea-agents 6.7.0 REA 본체
Ghidra 12.1.x 네이티브 exe 디컴파일 엔진
Temurin JDK 21 Ghidra 구동용
AI 클라이언트 ZCode 등 MCP 지원이면 무엇이든

💡 exe 분석만 쓸 거면 Ghidra+JDK가 필요하지만, .NET·Electron·웹 분석은 REA만으로 됩니다. 가볍게 시작해도 됩니다.

단계별 설치

① Node.js — 버전 확인이 제일 중요

winget install OpenJS.NodeJS.LTS
node --version        # v24.x가 나와야 안전

② REA 설치

npm install --global rea-agents
rea --version         # 6.7.0 확인

③ Ghidra 설치 — 릴리스 페이지에서 zip을 받아 적당한 폴더에 풀기만 하면 됩니다. 인스톨러가 아닙니다.

tar -xf ghidra_12.1.4_PUBLIC_*.zip -C "D:\Tools"

④ JDK 21 설치 — Adoptium Temurin에서 JDK 21 설치.

⑤ AI 클라이언트에 MCP 서버 등록 — ZCode 기준, 사용자 설정 파일(C:\Users\{사용자명}\.zcode\cli\config.json)에 추가합니다.

{
  "mcp": {
    "servers": {
      "rea": {
        "command": "cmd",
        "args": ["/c", "rea", "--mcp"],
        "env": {
          "JAVA_HOME": "C:\\Program Files\\Eclipse Adoptium\\jdk-21.0.12.101-hotspot",
          "GHIDRA_INSTALL_DIR": "D:\\Tools\\ghidra_12.1.4_PUBLIC"
        }
      }
    }
  }
}

⑥ 검증

rea doctor        # 전체 환경 점검
rea mcp doctor    # MCP 서버 기동 + 도구 리스팅 검증

⑦ AI 클라이언트 재시작 — 이후 세션부터 도구가 자동으로 물립니다.

🧨 시행착오 1: "artifact changed" 무한 오류 — 범인은 Node 23

설치 후 첫 exe 분석에서 모든 명령이 artifact_changed 오류로 실패했습니다. "분석 중에 파일이 바뀌었다"는 메시지라 파일 잠금 문제인가 싶어 여러 폴더에서 재시도했지만 소용없었죠.

원인은 REA가 아니라 Node.js 23.x 자체의 Windows 버그였습니다. Node 23의 lstat이 Windows에서 파일 식별자(dev)를 0으로 잘못 반환해서, REA의 "분석 중 파일이 안정적인가" 검사가 항상 실패하는 겁니다. Node 24 LTS로 교체하자 한 번에 해결됐습니다.

교훈: REA 문서의 요구 버전(^22.19.0 || ^24.11.0 || >=26.0.0)에 23이 없는 데는 이유가 있습니다. 설치 전 node --version부터 확인하세요.

🧨 시행착오 2: Java 버전 충돌 — 전역 환경을 건드리지 않는 해법

Ghidra는 JDK 21 이상을 요구하는데, 이 PC에는 기존 Java 17 프로젝트가 있어서 시스템 JAVA_HOME을 바꿀 수 없었습니다. 다행히 위 ⑤의 설정처럼 MCP 서버 env 항목에만 JAVA_HOME을 넣으면 REA 프로세스에만 JDK 21이 적용됩니다. 전역 환경은 그대로, 기존 프로젝트는 무사했습니다.

✅ 검증 결과

rea doctor     → node 24.21.0 healthy / ghidra 12.1.4 healthy
                 native_decompiler (pe x86_64) healthy
rea mcp doctor → healthy, 도구 207/207, 프롬프트 6/6

04. 실전 사용기 — 윈도우 기본 프로그램 where.exe를 불러뜨리다

설치 검증 겸 실험 대상으로 뽑은 건 윈도우에 기본 탑재된 where.exe(64KB) 입니다. 시스템 폴더의 파일은 잠길 수 있으니 임시 폴더에 복사한 뒤 분석했습니다.

AI에게 이렇게 말만 했습니다: "이 exe 분석해줘. 어떤 프로그램이야?"

AI가 스스로 analyze 도구를 호출했고, 실제 결과 일부입니다:

segments: 9개 (.text 32KB, .rdata, .data, .rsrc, .reloc ...)
procedure_count: 198     ← 함수 198개 인식
string_count: 153        ← 문자열 153개 추출

이어서 "엔트리포인트를 C 코드로 보여줘"라고 하니 Ghidra가 디컴파일한 의사 C 코드가 돌아왔습니다:

void entry(void)
{
  FUN_140001554();
  FUN_140001140();
  return;
}

여기서 FUN_140001554를 따라가면(main 함수) 실제 명령줄 파싱 로직이 나옵니다. 어셈블리를 한 줄도 안 읽고, 대화만으로 함수 단위 로직 추적이 됐습니다.

참고로 첫 명령에서 provider_unavailable 오류가 한 번 나왔는데, 재실행하니 정상이었습니다. 자동 프로바이더 선택이 가끔 흔들리는 케이스로 보이니, 이 오류가 나면 일단 한 번 더 실행해보세요.

널리 쓰는 워크플로우

네이티브 exe 분석:

flowchart TD
  S["exe 복사 (시스템 파일은 임시 폴더로)"] --> A["analyze — 형식·아키텍처·함수 수 파악"]
  A --> R["inspect-pe-resources — 아이콘·버전·문자열 리소스"]
  A --> Q["search / trace — 관심 키워드 검색"]
  Q --> D["decompile — Ghidra 의사 C 코드"]
  D --> X["xrefs / function — 호출 관계 추적"]
  X --> E["결과 리포트"]

이 밖에 자주 쓰는 시나리오:

  • 버전 비교 — 구버전/신버전 exe를 던져주면 "어떤 함수·리소스가 바뀌었는지" diff를 보여줍니다. 업데이트 내역이 불투명한 배포판 검증에 유용합니다.
  • Electron 앱 분석 — asar를 열어 JS 소스를 회수하고, 실행 중인 앱을 CDP로 붙어 화면·네트워크를 관측할 수 있습니다.
  • 웹앱 분석 — 크롬을 디버그 포트로 띄우고 페이지 구조·스크립트·네트워크 캡처(HAR)를 분석합니다.

터미널에서 CLI로 직접 쓸 때 (자주 쓰는 명령):

rea analyze D:\target.exe                    # 앱 개요
rea decompile D:\target.exe --procedure main # 함수 디컴파일
rea search D:\target.exe "password"          # 문자열·함수명 검색
rea xrefs D:\target.exe 0x140001554          # 교차 참조
rea capabilities                             # 이 PC에서 가능한 작업 목록

출력 형식(--format toon = 토큰 절약)이나 --token-count 같은 AI 친화 옵션이 기본 내장돼 있습니다. 전체 명령 목록은 rea --llms로 볼 수 있습니다.


05. 좋았던 점 · 아쉬운 점

좋았던 점

  • 대화가 곧 분석입니다. "이거 뭐야?" → "엔트리포인트 보여줘" → "여기 호출되는 곳 찾아줘"의 흐름이 그대로 명령이 됩니다. Ghidra GUI를 여닫을 필요가 없습니다.
  • 완전 로컬이라 사내 프로그램도 안심하고 올립니다.
  • Evidence 기반이라 결과를 믿을 수 있습니다. AI가 "아마 이럴 겁니다"가 아니라 실측 해시와 프로시저 목록을 근거로 답합니다.
  • .NET·Electron·웹은 엔진 설치 없이 REA만으로 됩니다.

아쉬운 점 (Windows 기준)

  • 네이티브 동적 분석(실행하며 후킹)은 macOS 전용입니다. Windows에서는 정적 디컴파일 + 웹/Electron 동적 관측이 한계입니다. (rea capabilities로 확인 가능)
  • Node 버전 가림이 좀 셉니다. 앞서 본 Node 23 버그처럼, 24 LTS를 권장합니다.
  • exe 분석을 위해선 Ghidra(약 400MB) + JDK 21 설치가 필요합니다.

06. 정리 — 이런 분께 추천합니다

  • 소스 없는 프로그램을 다뤄야 하는 유지보수 담당자
  • 배포본 exe의 변조 여부·업데이트 내역을 검증하고 싶은 개발자
  • 보안 감사, CTF, 학습 목적으로 리버스 엔지니어링을 시작하려는 분

Blender·FreeCAD·KiCad에서 "AI가 도구를 만지는" 자동화를 해봤다면, REA는 그 반대편인 "AI가 프로그램을 해부하는" 경험입니다. 설치는 순정 상태로 30분이면 충분하고, 진짜 시간은 Node 버전 확인에 쓰세요 — 저는 그걸로 한 시간을 썼으니까요.


07. 사용 전에 — 합법적 사용 범위

REA는 분석 권한이 있는 대상(자사 제품, 보안 연구, CTF, 상호운용성 확보, 교육)을 위한 도구입니다. 타인의 저작물을 무단으로 해독·변조하거나 라이선스·DRM을 우회하는 데 사용해서는 안 됩니다. 상용 분석 엔진(IDA, Hopper, JEB)은 별도 라이선스가 필요합니다.

참고 링크

💬 댓글 0
글보기
제목REA MCP 사용기 — exe·APK·웹앱을 AI로 해부하는 리버스 엔지니어링2026-10-14 01:48
카테고리AI 활용
작성자
# exe 파일을 AI에게 물어본다 — 리버스 엔지니어링 MCP 'REA' 구축·사용기

> 실행파일 하나만 남은 프로그램, "이게 대체 무슨 프로그램이지?" — 이제 디스어셈블러를 열 필요 없이 AI에게 시켜봤습니다
> ZCode AI 활용 시리즈 · Windows 11 + ZCode + REA 6.7.0 기준 (2026-10)

---

## 01. 왜 필요했나

이런 경험, 한 번쯤 있으실 겁니다.

- **출처를 알 수 없는 exe 파일** 하나가 남아 있는데, 바이러스 검사는 깨끗한데 뭘 하는 프로그램인지 알 수가 없다
- **소스코드가 없는 레거시 프로그램**을 유지보수해야 하는데, 개발사는 이미 사라졌다
- 내가 만든 프로그램이 **고객 PC에서 이상 동작**을 하는데, 로그만으로는 원인을 모르겠다

이때 쓰는 게 리버스 엔지니어링 도구입니다. 유료의 IDA Pro, NSA가 만든 무료 Ghidra 같은 디스어셈블러가 대표적이죠. 문제는 이 도구들, **전문가용 GUI 프로그램**이라는 점입니다. 열어보면 어셈블리와 어지러운 그래프가 나오고, 뭘 봐야 할지 알아야 뭘 볼 수 있습니다.

그래서 생각한 게 "AI 에이전트한테 시키면 안 되나?"였습니다. 사실 이 시리즈에서 Blender·FreeCAD·KiCad를 MCP로 AI에 물려봤는데, 이번엔 반대로 **AI가 프로그램을 들여다보게** 만들어보고 싶었습니다. 그 역할에 딱 맞는 도구가 REA였습니다.

---

## 02. REA가 하는 일

[REA](https://github.com/morluto/rea)는 MIT 라이선스 오픈소스로, **하나의 CLI이자 MCP 서버**로 동작합니다. MCP(Model Context Protocol)는 AI 에이전트에게 도구를 물려주는 표준 규격인데, REA를 등록해두면 AI가 스스로 "이 exe 분석해볼게"라면서 도구를 호출합니다.

| 분석 대상 | 형식 | 별도 엔진 필요? |
|---|---|---|
| 네이티브 실행파일 | PE (Windows exe/dll), ELF, Mach-O | Ghidra 등 1개 설치 필요 |
| .NET 프로그램 | PE/CLI (C# 등) | 불필요 |
| JavaScript / Electron 앱 | asar, JS 번들 | 불필요 |
| 웹사이트 | 라이브 페이지, HAR, 소스맵 | 불필요 |
| Android 앱 | APK | JADX + apktool (선택) |
| 펌웨어 · 스마트컨트랙트 | 바이너리 덤프, EVM 바이트코드 | 불필요 |
| 네트워크 캡처 | pcap/pcapng, QUIC qlog, HAR, Fiddler SAZ | tshark 등 (선택) |
| 기타 아티팩트 | SQLite DB, WASM, Go/Rust 빌드정보, Flutter AOT, HarmonyOS HAP | 불필요 |

**핵심 특징은 세 가지입니다.**

1. **완전 로컬** — 분석 파일이 클라우드로 업로드되지 않습니다. 회사 내부 프로그램도 올릴 걱정 없이 분석할 수 있습니다.
2. **Evidence 기반** — 모든 결과는 해시·출처·신뢰도가 기록된 "증거" 객체로 반환됩니다. AI가 그럴싸하게 지어내는 게 아니라 실측에 근거해 답합니다.
3. **규모** — 도구 207개, 프롬프트 6개. 분석뿐 아니라 버전 비교, 웹앱 관측, 크래시 덤프 해석까지 커버합니다.

### 전체 그림

```mermaid
flowchart TB
subgraph AI["ZCode 등 AI 에이전트"]
A["사용자가 대화로 지시"]
end
subgraph REA["REA (동일 바이너리)"]
S["rea --mcp · MCP 서버 — 도구 207개"]
C["rea analyze / decompile ... · CLI로 직접 실행도 가능"]
end
subgraph ENG["분석 엔진"]
G["Ghidra (네이티브 디컴파일)"]
J["JDK 21 (Ghidra 구동용)"]
B["내장 파서 (.NET / JS / 펌웨어)"]
end
subgraph T["분석 대상"]
T1["exe / dll"]
T2["Electron · JS 앱"]
T3["웹사이트 (CDP 연결)"]
T4["APK · 펌웨어"]
end
A -->|"MCP 도구 호출"| S
S -->|"도구 결과"| A
A -->|"터미널에서 직접"| C
S --> ENG
C --> ENG
ENG --> T
```

### 2026-10 업데이트 노트 — 6.4.0 → 6.7.0

초고를 쓰고 며칠 뒤 REA가 6.7.0까지 업데이트됐습니다(2026-10-18 릴리스). 설정은 그대로 두고 `npm install --global rea-agents@latest` 한 번으로 갱신되며, 이 글의 실측치도 6.7.0 기준으로 다시 확인했습니다(도구 170개 → 207개). 주요 추가 기능은:

- **네트워크 캡처 분석 (6.5)** — pcap/pcapng(TShark), QUIC qlog, Fiddler SAZ, HAR 기반 API 표면 추출. "이 프로그램이 어디로 통신하는가"를 캡처 파일만으로 추적할 수 있게 됐습니다.
- **오프라인 아티팩트 분석 (6.5)** — SQLite DB 스냅샷, WASM 모듈(실행 없이), Go/Rust 빌드 메타데이터(임베디드 의존성 목록 포함), Flutter APK 구조, HarmonyOS HAP 인벤토리.
- **CPU 아키텍처 확장 (6.5~6.6)** — Ghidra 연동이 RISC-V, MIPS32, **Windows ARM PE**, m68k까지 지원. ARM용 프로그램도 Windows PC에서 정적 분석할 수 있게 됐습니다.
- **신호 녹음 디코딩 (6.5)** — sigrok 녹음 파일에 프로토콜 디코더(UART 등)를 적용 (Linux 전용).
- **코드스플릿 JS 번들 복구 (6.5)** — 웹/Electron 앱이 청크로 쪼개져 있어도 관련 번들을 한꺼번에 회수.

> ⚠️ **업데이트 한 가지 주의점**: 구버전 REA MCP 서버가 **실행 중인 상태**에서 `npm install`하면 Windows에서는 네이티브 모듈 교체가 반쯤 끝나고, 이후 "Windows native artifact SHA-256 does not match package metadata" 오류로 Ghidra 연동이 죽습니다. **AI 클라이언트를 종료한 뒤 업데이트**하고, `rea capabilities`에서 Ghidra가 `available`인지 확인하세요. (저는 확인 안 하고 썼다가 한 번 더 재시작했습니다)

---

## 03. 설치기 — 예상보다 쉬웠고, 딱 한 군데서 막혔다

전체 흐름은 이렇습니다.

```mermaid
flowchart LR
A["Node.js 24 LTS"] --> B["rea-agents 설치 — npm install -g"]
B --> C["Ghidra 설치 — 압축만 풀면 끝"]
C --> D["JDK 21 설치 (Temurin)"]
D --> E["AI 클라이언트에 — MCP 서버 등록"]
E --> F["rea doctor로 검증"]
F --> G["재시작 → 완료"]
```

### 준비물

| 구성 요소 | 버전 | 용도 |
|---|---|---|
| Node.js | **24.x LTS** | REA 구동 (23.x는 아래 트러블 참고 — 필수 확인!) |
| rea-agents | 6.7.0 | REA 본체 |
| Ghidra | 12.1.x | 네이티브 exe 디컴파일 엔진 |
| Temurin JDK | 21 | Ghidra 구동용 |
| AI 클라이언트 | ZCode 등 | MCP 지원이면 무엇이든 |

> 💡 exe 분석만 쓸 거면 Ghidra+JDK가 필요하지만, .NET·Electron·웹 분석은 REA만으로 됩니다. 가볍게 시작해도 됩니다.

### 단계별 설치

**① Node.js — 버전 확인이 제일 중요**

```powershell
winget install OpenJS.NodeJS.LTS
node --version # v24.x가 나와야 안전
```

**② REA 설치**

```bash
npm install --global rea-agents
rea --version # 6.7.0 확인
```

**③ Ghidra 설치** — [릴리스 페이지](https://github.com/NationalSecurityAgency/ghidra/releases)에서 zip을 받아 적당한 폴더에 풀기만 하면 됩니다. 인스톨러가 아닙니다.

```bash
tar -xf ghidra_12.1.4_PUBLIC_*.zip -C "D:\Tools"
```

**④ JDK 21 설치** — [Adoptium Temurin](https://adoptium.net/temurin/releases)에서 JDK 21 설치.

**⑤ AI 클라이언트에 MCP 서버 등록** — ZCode 기준, 사용자 설정 파일(`C:\Users\{사용자명}\.zcode\cli\config.json`)에 추가합니다.

```json
{
"mcp": {
"servers": {
"rea": {
"command": "cmd",
"args": ["/c", "rea", "--mcp"],
"env": {
"JAVA_HOME": "C:\\Program Files\\Eclipse Adoptium\\jdk-21.0.12.101-hotspot",
"GHIDRA_INSTALL_DIR": "D:\\Tools\\ghidra_12.1.4_PUBLIC"
}
}
}
}
}
```

**⑥ 검증**

```bash
rea doctor # 전체 환경 점검
rea mcp doctor # MCP 서버 기동 + 도구 리스팅 검증
```

**⑦ AI 클라이언트 재시작** — 이후 세션부터 도구가 자동으로 물립니다.

### 🧨 시행착오 1: "artifact changed" 무한 오류 — 범인은 Node 23

설치 후 첫 exe 분석에서 **모든 명령이 `artifact_changed` 오류로 실패**했습니다. "분석 중에 파일이 바뀌었다"는 메시지라 파일 잠금 문제인가 싶어 여러 폴더에서 재시도했지만 소용없었죠.

원인은 REA가 아니라 **Node.js 23.x 자체의 Windows 버그**였습니다. Node 23의 `lstat`이 Windows에서 파일 식별자(`dev`)를 0으로 잘못 반환해서, REA의 "분석 중 파일이 안정적인가" 검사가 **항상 실패**하는 겁니다. Node 24 LTS로 교체하자 한 번에 해결됐습니다.

> **교훈:** REA 문서의 요구 버전(`^22.19.0 || ^24.11.0 || >=26.0.0`)에 23이 없는 데는 이유가 있습니다. **설치 전 `node --version`부터 확인하세요.**

### 🧨 시행착오 2: Java 버전 충돌 — 전역 환경을 건드리지 않는 해법

Ghidra는 JDK 21 이상을 요구하는데, 이 PC에는 기존 Java 17 프로젝트가 있어서 시스템 `JAVA_HOME`을 바꿀 수 없었습니다. 다행히 위 ⑤의 설정처럼 **MCP 서버 `env` 항목에만 JAVA_HOME을 넣으면** REA 프로세스에만 JDK 21이 적용됩니다. 전역 환경은 그대로, 기존 프로젝트는 무사했습니다.

### ✅ 검증 결과
```
rea doctor → node 24.21.0 healthy / ghidra 12.1.4 healthy
native_decompiler (pe x86_64) healthy
rea mcp doctor → healthy, 도구 207/207, 프롬프트 6/6
```

---

## 04. 실전 사용기 — 윈도우 기본 프로그램 where.exe를 불러뜨리다

설치 검증 겸 실험 대상으로 뽑은 건 윈도우에 기본 탑재된 **`where.exe`(64KB)** 입니다. 시스템 폴더의 파일은 잠길 수 있으니 임시 폴더에 복사한 뒤 분석했습니다.

AI에게 이렇게 말만 했습니다: **"이 exe 분석해줘. 어떤 프로그램이야?"**

AI가 스스로 `analyze` 도구를 호출했고, 실제 결과 일부입니다:
```
segments: 9개 (.text 32KB, .rdata, .data, .rsrc, .reloc ...)
procedure_count: 198 ← 함수 198개 인식
string_count: 153 ← 문자열 153개 추출
```

이어서 **"엔트리포인트를 C 코드로 보여줘"**라고 하니 Ghidra가 디컴파일한 의사 C 코드가 돌아왔습니다:

```c
void entry(void)
{
FUN_140001554();
FUN_140001140();
return;
}
```

여기서 `FUN_140001554`를 따라가면(main 함수) 실제 명령줄 파싱 로직이 나옵니다. 어셈블리를 한 줄도 안 읽고, 대화만으로 함수 단위 로직 추적이 됐습니다.

> 참고로 첫 명령에서 `provider_unavailable` 오류가 한 번 나왔는데, 재실행하니 정상이었습니다. 자동 프로바이더 선택이 가끔 흔들리는 케이스로 보이니, 이 오류가 나면 일단 한 번 더 실행해보세요.

### 널리 쓰는 워크플로우

**네이티브 exe 분석:**

```mermaid
flowchart TD
S["exe 복사 (시스템 파일은 임시 폴더로)"] --> A["analyze — 형식·아키텍처·함수 수 파악"]
A --> R["inspect-pe-resources — 아이콘·버전·문자열 리소스"]
A --> Q["search / trace — 관심 키워드 검색"]
Q --> D["decompile — Ghidra 의사 C 코드"]
D --> X["xrefs / function — 호출 관계 추적"]
X --> E["결과 리포트"]
```

**이 밖에 자주 쓰는 시나리오:**

- **버전 비교** — 구버전/신버전 exe를 던져주면 "어떤 함수·리소스가 바뀌었는지" diff를 보여줍니다. 업데이트 내역이 불투명한 배포판 검증에 유용합니다.
- **Electron 앱 분석** — asar를 열어 JS 소스를 회수하고, 실행 중인 앱을 CDP로 붙어 화면·네트워크를 관측할 수 있습니다.
- **웹앱 분석** — 크롬을 디버그 포트로 띄우고 페이지 구조·스크립트·네트워크 캡처(HAR)를 분석합니다.

**터미널에서 CLI로 직접 쓸 때 (자주 쓰는 명령):**

```bash
rea analyze D:\target.exe # 앱 개요
rea decompile D:\target.exe --procedure main # 함수 디컴파일
rea search D:\target.exe "password" # 문자열·함수명 검색
rea xrefs D:\target.exe 0x140001554 # 교차 참조
rea capabilities # 이 PC에서 가능한 작업 목록
```

출력 형식(`--format toon` = 토큰 절약)이나 `--token-count` 같은 AI 친화 옵션이 기본 내장돼 있습니다. 전체 명령 목록은 `rea --llms`로 볼 수 있습니다.

---

## 05. 좋았던 점 · 아쉬운 점

**좋았던 점**

- **대화가 곧 분석**입니다. "이거 뭐야?" → "엔트리포인트 보여줘" → "여기 호출되는 곳 찾아줘"의 흐름이 그대로 명령이 됩니다. Ghidra GUI를 여닫을 필요가 없습니다.
- **완전 로컬**이라 사내 프로그램도 안심하고 올립니다.
- **Evidence 기반**이라 결과를 믿을 수 있습니다. AI가 "아마 이럴 겁니다"가 아니라 실측 해시와 프로시저 목록을 근거로 답합니다.
- .NET·Electron·웹은 **엔진 설치 없이** REA만으로 됩니다.

**아쉬운 점 (Windows 기준)**

- 네이티브 **동적 분석(실행하며 후킹)은 macOS 전용**입니다. Windows에서는 정적 디컴파일 + 웹/Electron 동적 관측이 한계입니다. (`rea capabilities`로 확인 가능)
- Node 버전 가림이 좀 셉니다. 앞서 본 Node 23 버그처럼, **24 LTS를 권장합니다.**
- exe 분석을 위해선 Ghidra(약 400MB) + JDK 21 설치가 필요합니다.

---

## 06. 정리 — 이런 분께 추천합니다

- 소스 없는 프로그램을 다뤄야 하는 **유지보수 담당자**
- 배포본 exe의 **변조 여부·업데이트 내역**을 검증하고 싶은 개발자
- 보안 감사, CTF, 학습 목적으로 리버스 엔지니어링을 시작하려는 분

Blender·FreeCAD·KiCad에서 "AI가 도구를 만지는" 자동화를 해봤다면, REA는 그 반대편인 **"AI가 프로그램을 해부하는"** 경험입니다. 설치는 순정 상태로 30분이면 충분하고, 진짜 시간은 Node 버전 확인에 쓰세요 — 저는 그걸로 한 시간을 썼으니까요.

---

## 07. 사용 전에 — 합법적 사용 범위

REA는 **분석 권한이 있는 대상**(자사 제품, 보안 연구, CTF, 상호운용성 확보, 교육)을 위한 도구입니다. 타인의 저작물을 무단으로 해독·변조하거나 라이선스·DRM을 우회하는 데 사용해서는 안 됩니다. 상용 분석 엔진(IDA, Hopper, JEB)은 별도 라이선스가 필요합니다.

## 참고 링크

- REA GitHub: [github.com/morluto/rea](https://github.com/morluto/rea)
- npm: [npmjs.com/package/rea-agents](https://www.npmjs.com/package/rea-agents)
- Ghidra 릴리스: [github.com/NationalSecurityAgency/ghidra/releases](https://github.com/NationalSecurityAgency/ghidra/releases)
- Temurin JDK 21: [adoptium.net/temurin/releases](https://adoptium.net/temurin/releases)
- 전체 도구 매니페스트: `rea --llms` / `rea --llms-full`
댓글
자동등록방지
(자동등록방지 숫자를 입력해 주세요)
목록으로