커밋 한 모금
AI 에이전트개발 도구

8KB 파일 하나로 에이전트에 역공학 스킬을 심었다 — 설치 없이 받아서 돌려 본 기록

2026년 10월 26일 · 읽는 데 5분
한 줄 요약앱·바이너리를 분석(역공학)하게 하는 에이전트 스킬이다. MCP 서버나 207개 도구 없이 8KB짜리 안내 파일 한 장만으로 "어떤 원시 명령을 쓰면 가장 빠른지"를 알려 준다. 설치 없이, 인터넷도 쓰지 않고 직접 받아서 확인해 봤다.
▶
60초 영상으로 보기유튜브 커밋 한 모금 쇼츠

무엇인가

leanrea는 에이전트(Claude Code 등)가 앱이나 바이너리를 역공학할 때 쓰는 스킬이다. 역공학은 앱 내부의 코드나 명령을 열어 구조를 파악하는 작업이다. 기존 도구인 REA(Reverse Engineer Anything)는 에이전트와 도구 사이에 MCP 서버(MCP: 에이전트가 도구를 부를 수 있게 해 주는 중간 계층)를 두고 207개 도구를 등록한다. leanrea는 이 계층을 아예 빼 버렸다.

대신 스킬 파일 한 장에 세 가지를 담았다. 하나는 대상 종류별(전자 앱, 축소된 웹 파일, 네이티브 바이너리, Go 바이너리 등 18가지)로 가장 빠른 원시 명령이다. 다음은 복사해서 바로 돌리는 첫 명령이고, 마지막은 흔히 빠지는 함정 목록이다. 에이전트는 이 안내를 보고 시스템에 이미 있는 file, otool, nm, strings 같은 기본 명령을 직접 실행한다. 저자 벤치마크에서는 REA보다 실행 시간이 38%, 비용이 35% 줄었고 정확도는 같았다(2,530스타, MIT 라이선스).

직접 해 본 것

저장소를 받아 설치하지 않고, 이 맥에 이미 있는 명령만으로 스킬에 적힌 명령을 실제로 돌려 봤다. 스킬 파일은 실측 8,374바이트, 67줄이었다. README의 "8KB 스킬"이라는 표기는 맞았다.

네이티브 모듈 분석은 잘 됐다. 스킬의 일괄 명령(file, lipo, otool -L, nm, strings를 한 번에 실행)을 분석 대상의 네이티브 모듈에 돌리니 0.1초 만에 인벤토리가 나왔다. 덤프한 디스어셈블리 4.8MB에서는 grep으로 함수 747개까지 확인했다.

Go 바이너리도 돌려 봤다. 이 맥에는 Go가 없어(go: command not found) 스킬이 폴백으로 제시한 strings -a gh | rg 'Go buildinf'를 썼다. 빌드 정보에서 Go 버전 1.27.1과 모듈 주소를 확인했다. 다만 이 호메브루 빌드에는 의존성 버전 태그가 없어 의존성 버전은 알 수 없었다.

전자(asar) 앱 분석에서는 한계가 드러났다. 스킬의 공식 명령은 npx로 도구를 내려받아 실행하는 방식이라, 설치 금지 조건 때문에 쓰지 못했다. 대신 표준 라이브러리로 asar 헤더 파서를 직접 만들어 522MB짜리 asar를 열어 봤다. 대상 앱은 축소된 웹 번들에 webview를 쓰는 구조였고, 메인 프로세스 JS가 asar 안에 없어 IPC 스윕 결과가 비어 있었다. 웹 중심 앱에서는 이 스킬의 라우터가 빈손으로 끝날 수 있다는 뜻이다.

해 보지 못한 것도 있다. 로컬 27B 모델에 스킬을 넣어 Go 태스크를 돌리는 시험은 준비까지 마쳤지만, 반복 한도(60/60)에 걸려 실행하지 못했다. 저자 벤치마크 재현(제공된 setup·run 스크립트)도 이 맥에 claude CLI, Anthropic 키, npm, Notion.app이 없어 할 수 없었다. 그래서 스킬의 빠른 명령을 직접 실행하는 것으로 대신했다.

이 맥에서 쓸 수 있나

시험한 환경은 Mac Studio, Apple M5 Max(arm64), 메모리 48GB, macOS 27.0.1(빌드 26A434), 디스크 여유 약 159GB다. 로컬 AI 모델 서버가 메모리 약 34GB를 계속 쓰고 있다.

leanrea에는 특별한 요구 사양이 없다. 스킬은 평문 파일이라 어느 에이전트의 규칙이나 시스템 프롬프트에든 붙이기만 하면 된다. 의존성도 시스템 기본 명령(file, otool, nm, strings, lipo 등)뿐이다. 저자 벤치마크는 macOS arm64에서 돌렸으니 이 맥과 같은 계열이다. otool·nm 계열이 0.1초 만에 인벤토리를 내는 걸 보면 이 사양에서 부담될 일은 없어 보인다.

다만 48GB 중 34GB를 로컬 모델 서버가 쓰고 있어서, 이 스킬을 로컬 모델로 돌릴 때는 남는 메모리가 많지 않다는 점을 감안해야 한다. 앞서 말한 이유(반복 한도)로 스킬 주입 시험(27B)을 못 돌렸으니, 이 부분만 확인하지 못했다.

이런 분께

맞는 분: Claude Code 같은 에이전트에 앱·바이너리 분석을 시키는데 도구 설치나 토큰 부담이 크다고 느낀 분. Electron/asar, 축소된 JS, Go, Mach-O 같은 대상의 인벤토리를 빠르게 뽑고 싶은 분. MIT 라이선스라 저작권 표기만 유지하면 상업 사용과 재배포가 가능하다.

안 맞는 분: Vite·webview 구조의 웹 중심 앱을 다루는 분(이번에 IPC 스윕이 빈 결과로 나왔다). 에이전트가 없는 환경이거나, MCP 도구 207개를 전부 로딩하는 환경도 맞지 않는다. 이 경우 REA의 400.7k 토큰 부담이 그대로 오는데, 벤치 노트도 이를 가장 불리한 경우로 꼽는다.

주의할 점

저자 벤치마크는 샘플 3회, 모델 1개(Sonnet 5.5), 맥 1대, 대상 3개(Notion·gh 등)로 돌렸다. 통계적 신뢰도가 낮으니 "38% 빠르다"를 절대 수치로 읽지 않는 게 좋다. 벤치에서 REA는 가장 유리한 조건(도구를 필요할 때만 로드)으로 쟀고, Ghidra·jadx 같은 추가 도구는 설치하지 않고 양쪽 모두 Xcode 도구만으로 돌렸다.

스킬 규칙에는 "사용자가 허용하면 brew install"이라는 문구가 있다. 자동 설치가 아니라 문구일 뿐이지만, 스킬을 에이전트에 붙이기 전에 이 줄은 읽어 볼 만하다. 이번 시험의 부산물로 추출물 2,040개 파일이 임시 폴더에 남아 있다. asar를 열어 본 적이 있다면 임시 파일을 치우는 것도 잊지 말자.

출처

  • https://github.com/aicodeking/leanrea (GitHub 저장소)
  • 확인 시각: 2026-10-26 04:31 KST

설치·실행 결과는 글쓴이 환경(맥, 인터넷 차단 시험 등) 기준이며 여러분 환경에서는 다를 수 있습니다.