실행파일 하나만 남은 프로그램, "이게 대체 무슨 프로그램이지?" — 이제 디스어셈블러를 열 필요 없이 AI에게 시켜봤습니다
ZCode AI 활용 시리즈 · Windows 11 + ZCode + REA 6.7.0 기준 (2026-10)
이런 경험, 한 번쯤 있으실 겁니다.
이때 쓰는 게 리버스 엔지니어링 도구입니다. 유료의 IDA Pro, NSA가 만든 무료 Ghidra 같은 디스어셈블러가 대표적이죠. 문제는 이 도구들, 전문가용 GUI 프로그램이라는 점입니다. 열어보면 어셈블리와 어지러운 그래프가 나오고, 뭘 봐야 할지 알아야 뭘 볼 수 있습니다.
그래서 생각한 게 "AI 에이전트한테 시키면 안 되나?"였습니다. 사실 이 시리즈에서 Blender·FreeCAD·KiCad를 MCP로 AI에 물려봤는데, 이번엔 반대로 AI가 프로그램을 들여다보게 만들어보고 싶었습니다. 그 역할에 딱 맞는 도구가 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 | 불필요 |
핵심 특징은 세 가지입니다.
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
초고를 쓰고 며칠 뒤 REA가 6.7.0까지 업데이트됐습니다(2026-10-18 릴리스). 설정은 그대로 두고 npm install --global rea-agents@latest 한 번으로 갱신되며, 이 글의 실측치도 6.7.0 기준으로 다시 확인했습니다(도구 170개 → 207개). 주요 추가 기능은:
⚠️ 업데이트 한 가지 주의점: 구버전 REA MCP 서버가 실행 중인 상태에서
npm install하면 Windows에서는 네이티브 모듈 교체가 반쯤 끝나고, 이후 "Windows native artifact SHA-256 does not match package metadata" 오류로 Ghidra 연동이 죽습니다. AI 클라이언트를 종료한 뒤 업데이트하고,rea capabilities에서 Ghidra가available인지 확인하세요. (저는 확인 안 하고 썼다가 한 번 더 재시작했습니다)
전체 흐름은 이렇습니다.
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 클라이언트 재시작 — 이후 세션부터 도구가 자동으로 물립니다.
설치 후 첫 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부터 확인하세요.
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
설치 검증 겸 실험 대상으로 뽑은 건 윈도우에 기본 탑재된 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["결과 리포트"]
이 밖에 자주 쓰는 시나리오:
터미널에서 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로 볼 수 있습니다.
좋았던 점
아쉬운 점 (Windows 기준)
rea capabilities로 확인 가능)Blender·FreeCAD·KiCad에서 "AI가 도구를 만지는" 자동화를 해봤다면, REA는 그 반대편인 "AI가 프로그램을 해부하는" 경험입니다. 설치는 순정 상태로 30분이면 충분하고, 진짜 시간은 Node 버전 확인에 쓰세요 — 저는 그걸로 한 시간을 썼으니까요.
REA는 분석 권한이 있는 대상(자사 제품, 보안 연구, CTF, 상호운용성 확보, 교육)을 위한 도구입니다. 타인의 저작물을 무단으로 해독·변조하거나 라이선스·DRM을 우회하는 데 사용해서는 안 됩니다. 상용 분석 엔진(IDA, Hopper, JEB)은 별도 라이선스가 필요합니다.
rea --llms / rea --llms-full| 이전 | FreeCAD + MCP 가이드 업데이트 — 2026-10-14 실전 패치 4종 | 웰컴스 매니저 | 2026-10-14 |
|---|---|---|---|
| 다음 | | 웰컴스 매니저 | 2026-10-14 |
주소창 오른쪽의 설치 아이콘으로도 설치할 수 있어요
카카오톡·네이버 앱 안에서는 설치할 수 없어요 — 오른쪽 위 ⋮ → “Chrome에서 열기” 후 진행해 주세요
설치하면 주소창 없이 전체화면 앱처럼 실행됩니다