앱 속을 AI가 뜯어보는 REA, 주간 별 24만 개

앱 속을 AI가 뜯어보는 REA, 주간 별 24만 개

2026-10-18 기준 GitHub 주간 트렌딩 1위는 morluto/rea다. 이번 주에만 별을 239,923개 받았다. 2위 storytold/artcraft가 받은 18,479개의 13배쯤 된다. 2위도 결코 작은 숫자가 아닌데, 옆에 세워 두니 동네 뒷산처럼 보인다. 같은 날 전체 별은 315,436개, 포크는 79,971개였다. 매체마다 115K, 145K, 248K처럼 숫자가 제각각인 건 찍은 시각이 달라서다. 별이 워낙 빨리 늘다 보니 숫자가 금방 옛날 숫자가 된다. 그래서 이 글에 나오는 숫자에는 전부 날짜를 붙였다.

솔직히 숫자보다 먼저 든 생각은 이거였다. "그럼 이제 남의 앱을 베낄 수 있다는 건가?" README를 읽고 사례와 검증 글을 뒤져 보니 답은 이랬다. 생각보다 덜 마법 같고, 생각보다 더 조심해야 한다.

REA가 하는 일

REA는 Reverse Engineer Anything의 줄임말이다. 저장소 소개문은 이렇다. "Reverse engineer anything with agents, from app behavior down to native binaries." MIT 라이선스로 공개된 TypeScript 프로젝트다.

역공학은 소스 코드 없이, 완성된 프로그램만 보고 속이 어떻게 돌아가는지 알아내는 일이다. 지금까지는 Ghidra(NSA가 만든 무료 도구), IDA, Hopper 같은 디컴파일러를 사람이 직접 붙잡고 씨름해야 했다. REA가 새 디컴파일러는 아니다. 이런 기존 도구들과 AI 에이전트 사이에 놓는 다리다.

흐름은 이렇다.

  1. Claude Code, Codex, Cursor, Gemini CLI, Grok Build 같은 에이전트가 MCP로 REA를 부른다.
  2. REA는 내 PC에서 대상을 분석하고, 결과와 근거를 돌려준다.
  3. 에이전트는 그 결과를 가지고 동작을 설명하거나, 비슷한 기능을 만들어 시험한다.

분석할 수 있는 대상은 꽤 넓다. 네이티브 실행 파일(Hopper · Ghidra · IDA 필요), JavaScript/Electron 앱, .NET, Android APK, 웹사이트, 펌웨어, WASM, SQLite, 네트워크 캡처까지 받는다. 한 소스 리뷰가 세어 보니 MCP 도구 정의가 약 207개, CLI 하위 명령이 153개였다. 결과는 전부 '근거(evidence)' 기록으로 나온다. 기록마다 어떤 도구가 찾았는지, 신뢰도가 얼마인지, 한계가 무엇인지가 붙는다. 나는 이 설계가 제일 마음에 들었다. 에이전트가 그럴듯하게 지어낸 설명과 실제로 찾아낸 사실을 갈라서 볼 수 있어서다.

예시로 보는 원리: 계산기와 공룡 게임

공식 사이트 사례 두 개가 감 잡기에 좋다.

윈도우 계산기에서 200 + 10%를 누르면 220이 나온다. REA 4.1.0으로 Windows Calculator 11.2508.4.0을 분석해 보니, + 뒤에서는 %가 "첫 수의 10%"(20)로 바뀌고, × 뒤에서는 그냥 0.1로 바뀌었다. 같은 10%인데 앞에 어떤 연산자가 왔느냐에 따라 뜻이 달라진다. % 버튼이 앞자리 눈치를 보고 있었던 셈이다.

크롬 공룡 게임이 점점 빨라지는 규칙도 찾아냈다. 인터넷이 끊겨야 만나는 그 공룡 말이다. 속도 6에서 출발해, 부딪히지 않고 업데이트할 때마다 0.001씩 붙고, 13에서 멈춘다(ACCELERATION 0.001, MAX_SPEED 13).

두 규칙을 내 손으로 다시 써 보면 아래와 같다. 원본 코드가 아니라, 밝혀진 규칙을 설명하려고 만든 예시다.

// 예시: REA가 밝힌 규칙을 다시 쓴 것 (원본 코드 아님)
function calcPercent(a: number, op: "+" | "×", p: number): number {
  return op === "+" ? a + a * (p / 100) : a * (p / 100);
}
calcPercent(200, "+", 10); // 220
calcPercent(200, "×", 10); // 20

function dinoSpeed(updates: number): number {
  return Math.min(6 + 0.001 * updates, 13);
}
dinoSpeed(4000);  // 10
dinoSpeed(10000); // 13

공룡 속도는 계산식 한 줄이면 된다.

속도 = min(6 + 0.001 × 업데이트 횟수, 13)

4,000번이면 6 + 4 = 10.0이고, 7,000번부터는 13에 묶인다. 사이트에 적힌 측정값(4,000번 뒤 10.0, 10,000번 뒤 13.0)과도 맞아떨어진다.

제일 눈길을 끈 건 1996년 윈도우 게임 DX-Ball 사례다. 소리를 좌우로 나누는 계산을 C로 다시 만들어 원본 x86과 3,205개 경우를 맞대 봤더니 전부 통과했다. 컴파일된 함수 63바이트까지 똑같았다고 한다. 다만 프로젝트가 스스로 밝힌 결과이고, 공들여 고른 아주 작은 함수라는 점은 같이 기억해 둬야 한다.

직접 써 보기

설치는 한 줄이면 된다. Node.js 22.19 이상(또는 24.11 이상, 26 이상)이 필요하다.

# README에 나온 명령 (직접 돌려 보지는 않았다)
npx rea-agents setup

어느 에이전트에 붙일지 고르고, 바뀔 설정을 확인한 다음 승인하는 식이다. 기존 설정은 백업해 둔다.

처음이라면 내가 만든 Electron 앱에 정적 분석부터 돌려 보길 권한다. JavaScript와 .NET 정적 분석은 Ghidra 같은 엔진을 따로 깔지 않아도 된다.

# README 예시 명령
npx -y rea-agents@latest analyze-javascript-application /absolute/path/to/app --json

그러면 모듈, import, Electron 경계가 근거와 함께 나온다. 에이전트한테 일을 맡길 때는 README 예시처럼 질문을 좁히고 근거를 달라고 하는 게 좋다. "Understand how search works in the Notes app, show me the evidence, and build a similar feature for my project." 앱 전체를 통째로 묻지 말고 기능 하나만 묻는다. 그리고 "근거를 보여 줘"는 빼먹지 않는다.

과장 걷어내기

우선 원본 소스는 나오지 않는다. 손에 쥐는 건 의사코드, 어셈블리, 모듈 관계다. 변수 이름, 주석, 원래 구조는 돌아오지 않는다. 프로그램 하나를 통째로 복원한 사례도 아직 없다.

독립 검증 결과도 갈린다. SystemDesign Academy가 소스를 이미 알고 있는 Electron 앱에 REA 6.4.0을 돌려 봤다. 파일·줄 위치 30개는 30개 모두 맞혔다. 그런데 창은 8개 중 1개만 찾았고, 창에 답을 보내는 지점 8곳과 nodeIntegration(보안 설정) 4곳은 하나도 못 찾았다. 결론은 "찾지 못한 것이 없다는 뜻은 아니다"였다. 찾았다고 한 건 정확했지만, 못 본 것도 수두룩했다는 얘기다.

DEV Community 글이 전한 MindStudio의 비교도 결이 비슷하다. Mac 미리보기 앱을 다시 만드는 과제에서, REA를 안 붙인 일반 에이전트가 먼저 끝냈다. "dramatically better"하지는 않다는 평이었다.

별을 샀다는 의혹도 있다. GenAI Magazine은 증거를 찾지 못했지만, 부풀려졌을 가능성까지 지우지는 않았다. 진짜 관심이라는 신호로는 npm 설치 수를 들었다. 10/2에 16회였던 하루 설치가 10/12에는 103,109회가 됐고, 10/6~12 합계는 231,579회였다. 릴리스 36개, 기여자 222명도 근거로 꼽았다.

조심할 것

가짜 복제본. 10/13 'rea-tools'라는 조직이 README를 베껴 놓고 "Windows Standalone .exe"(82.6MB)를 올렸다. 신고 시점까지 172회 내려받혔고, 신고 글에 따르면 Microsoft Defender가 이 파일을 트로이 목마(Wacatac)로 잡았다. 역공학 도구를 받으려다 내 PC가 분석 대상이 되는 셈이니 웃을 일이 아니다. 공식 경로는 GitHub morluto/rea, rea.tools, npm rea-agents 세 곳뿐이다.

설정 파일. Claude Code에 설치하면 ~/.claude.json과 ~/.claude/skills에 등록된다. 그러면 어느 프로젝트에서든 REA를 부를 수 있다. 따로 떼어 쓰고 싶다면 CLAUDE_CONFIG_DIR로 프로필을 나누면 된다. REA는 샌드박스가 아니다. README 말대로 분석은 내 PC에서 하지만, 에이전트가 받은 도구 결과는 그 모델 제공사의 데이터 정책을 따른다(Pillitteri 정리).

법과 약관. DISCLAIMER는 보안 연구, 악성코드 분석, CTF·교육, 호환성, 오래된 소프트웨어 보존, 내 소프트웨어 감사 같은 용도를 밝힌다. DRM · 라이선스 검사 · 안티치트 우회, 게임 핵, 남의 소프트웨어 복제는 지원하지 않는다. EU는 디렉티브 2009/24/EC 6조의 조건(호환성 등)을 갖출 때만 디컴파일을 허용한다. 미국은 DMCA 1201조가 기술적 보호 조치 우회를 막는다(보안 연구·호환성 예외가 있다). 법률 조언이 아니니 업무에 쓸 거라면 꼭 따로 확인해야 한다.

내 생각: 클라이언트 코드는 이제 읽힌다

"앱을 통째로 베끼는 도구"는 아직 아니다. 그래도 개발자로서 새겨들을 메시지는 분명하다. 앱 안에 넣어 둔 로직은 이제 에이전트가 읽어 낸다. 할인 규칙, 요금 계산, 기능 잠금 같은 걸 클라이언트에 두고 "난독화했으니 괜찮다"고 버티던 시절은 저물고 있다. 계산기의 % 규칙처럼 작은 것일수록 더 쉽게 드러난다.

그래서 나는 두 가지를 해 볼 생각이다. 하나는 중요한 판단을 서버로 옮기는 것. 다른 하나는 REA를 내 앱에 먼저 돌려 보는 것이다. 남이 내 앱을 뜯어보기 전에 나부터 뭐가 보이는지 확인하는 감사 도구로는 꽤 쓸 만해 보인다.

정리

  • REA는 MCP로 AI 에이전트와 Ghidra · IDA 같은 역공학 도구를 잇는 오픈소스다. 2026-10-18 기준 이번 주 별 239,923개(전체 315,436개)로 트렌딩 1위다.
  • 결과는 근거와 신뢰도가 붙은 기록으로 나온다. 원본 소스는 나오지 않고, 독립 검증에서는 놓친 것도 많았다.
  • 받을 때는 공식 경로 세 곳만 쓰고, 설정 파일 등록과 법·약관을 꼭 확인해야 한다.
  • 개발자에게 주는 교훈: 핵심 로직은 서버로.

출처