
완전 자율형 리버스 엔지니어링 AI 에이전트
.-. ██ ██ ██ ██████ ██ ██████
(o o) ██ ██ ██ ██ ██ ██ ██
| u | ██ ██ ██ ██████ ██ ██ ███
| | ██ ██ ██ ██ ██ ██ ██ ██ ██
'~-~' █████ ██████ ██ ██ ██ ██████
autonomous reverse-engineering agent · android · binary · frida
Jurig (순다어: 유령) — 당신의 바이너리에 출몰하는 자율 AI 에이전트. TUI에서 유령은 작업하는 동안 깜빡이고, 둥실거리며, 반짝인다.
TUI를 갖춘 완전 자율 AI 에이전트 기반 리버스 엔지니어링 프레임워크. Android 우선(APK/DEX)에 더해 네이티브 바이너리까지 지원한다. Go로 작성되었고 MCP를 사용하지 않는다 — 모든 도구는 이식 가능한 RE 바이너리를 감싼 네이티브 서브프로세스 래퍼다.
| 관심사 | 선택 |
|---|---|
| 언어 / TUI | Go + Bubble Tea + Lipgloss + Glamour (마크다운 리포트) |
| 에이전트 | 자체 plan→act→observe 루프 (internal/agent) — 프레임워크 종속 없음 |
| 도구 | 네이티브 Go 서브프로세스 래퍼 (internal/tools) — MCP 없음 |
| LLM | 라우터 뒤의 단일 와이어 포맷 (Anthropic Messages 프로토콜) |
| 프로바이더 | anthropic (직접), openrouter (Anthropic "스킨"), claude-cli (구독) |
| 이식 가능 도구 | internal/portable이 번들 바이너리 → PATH 순으로 해석; 카탈로그에서 설치 |
하나의 라우터 뒤에 두 가지 와이어 프로토콜:
anthropic 종류 — 네이티브 Messages API (/v1/messages).openai 종류 — OpenAI Chat Completions (/chat/completions)와
내부 Messages↔OpenAI 변환기 (툴 호출 포함). 모든
OpenAI 호환 엔드포인트를 지원한다.기본 제공 프리셋 (config.json → providers):
| 프로바이더 | 종류 | 엔드포인트 | 키 환경변수 |
|---|---|---|---|
| mimo (기본) | openai | token-plan-sgp.xiaomimimo.com/v1 | MIMO_API_KEY |
| anthropic | anthropic | api.anthropic.com | ANTHROPIC_API_KEY |
| openrouter | openai | openrouter.ai/api/v1 | OPENROUTER_API_KEY |
| ollama (로컬) | openai | localhost:11434/v1 | — (로컬) |
| kimi | openai | api.kimi.com/coding/v1 | KIMI_API_KEY |
| moonshot | openai | api.moonshot.ai/v1 | MOONSHOT_API_KEY |
| dashscope / Qwen (Alibaba) | openai | dashscope-intl…/compatible-mode/v1 | DASHSCOPE_API_KEY |
| custom (모든 OpenAI 호환) | openai | base_url 직접 설정 | CUSTOM_API_KEY |
| claude-cli (구독) | claude-cli | claude 바이너리 | — |
프로바이더+모델은 TUI에서 Ctrl+O로 실시간 선택하거나,
JURIG_PROVIDER + JURIG_MODEL을 설정하거나, config.json의 active를
편집하여 지정한다. 프로바이더의 models 목록을 확장하여 모델을 추가한다.
base_url을 통해 어떤 프로바이더든 다른 base URL(예: 자체 호스팅 게이트웨이)로
지정할 수 있다.
Ollama: ollama serve + ollama pull qwen2.5-coder:14b 실행 후 Ctrl+O →
ollama/… 선택. 키가 필요 없다.
claude-cli (Claude Code 구독): Anthropic은 서드파티 HTTP 하네스에서 구독
인증을 차단한다(2026년 4월). 따라서 이 경로는 claude 바이너리를 호출한다.
자문/채팅 전용 — 네이티브 툴 호출 없음; 완전한 자율 툴 루프를 위해서는
openai/anthropic 프로바이더를 사용하라.
custom — 모든 OpenAI 호환 엔드포인트를 위한 하나의 범용 프로바이더. Jurig은
하드코딩된 게이트웨이를 제공하지 않는다; 설정 마법사(/setup) 또는
config.json에서 base URL을 직접 채운다. 다음에 사용 가능:
npx 9router) 또는 OmniRoute,
이들은 Cursor / Claude Code / Codex 계정을 http://localhost:20128/v1에서
프론트엔드로 제공한다.base_url(예: http://localhost:20128/v1)을 설정하고, 엔드포인트가 필요로
한다면 api_key(또는 CUSTOM_API_KEY 환경변수 / URL에는 CUSTOM_BASE_URL)를
설정한다. localhost 게이트웨이는 키 없이도 준비된 것으로 취급된다. custom
프로바이더는 auto_models로 표시되어, 선택기(Ctrl+O)가 열릴 때 엔드포인트의
/models에서 실시간 카탈로그를 가져온다 — r을 눌러 아무 프로바이더의 목록이나
새로고침할 수 있다. 구독 라우터의 경우 모델 id에 라우트 접두사가 붙는다
(cu/ Cursor, cc/ Claude Code, cx/ Codex) — 자동 로드된 목록이 정확한
id를 보여준다.
공식 클라이언트 외부에서 구독을 사용하는 것은 ToS를 위반할 수 있다 — 당신의 계정, 당신의 책임.
go build -o jurig ./cmd/jurig
플래그가 필요 없다. 첫 실행 시(또는 활성 프로바이더에 키가 없을 때) 대화형
설정 마법사가 실행된다: 프로바이더 선택 (OpenRouter / Kimi / Qwen / Ollama /
Anthropic / Claude 구독) → 키 → 모델 → 선택적 도구 사전 설치 →
~/.jurig/config.json에 저장.
./jurig # 첫 실행 → 마법사, 그다음 TUI
./jurig setup # 언제든 마법사 재실행
./jurig doctor # 프로바이더 + 툴체인 상태 표시
./jurig install jadx # 도구 사전 준비 (요청 시 자동 설치도 됨)
./jurig -p "analyze ./app.apk" # 헤드리스 원샷 (마법사 건너뜀; 키 설정 필요)
./jurig -target ./work/app -p "..." # 대상별 작업 디렉터리 고정
| 키 | 동작 |
|---|---|
| Enter | 명령 실행 / 제출 |
| ↑ / ↓ | 프롬프트 기록 |
| PgUp / PgDn | 트랜스크립트 스크롤 |
| Ctrl+F | 트랜스크립트 검색 (Enter = 다음 일치) |
| Ctrl+O | 프로바이더 / 모델 전환 |
| F1 | 도움말 오버레이 |
| Ctrl+C | 실행 중단 / 종료 |
에이전트가 범위 지정 질문을 하면 답변 메뉴가 나타난다: ↑/↓ 이동, Space 또는 1-9 토글 (다중 선택), Enter 확인.
세션 재개: 대화 + 프롬프트 기록이 <work_dir>/session.json에 유지되고
다음 실행 시 자동 복원된다 (--fresh는 깨끗하게 시작).
코드 카드: 에이전트가 소스 파일을 읽을 때마다 TUI는 작은 구문 강조 미리보기를 보여준다 — 모델은 여전히 전체 파일을 받는다.
정찰 & 분류
| 도구 | 목적 |
|---|---|
manifest | AndroidManifest 파싱 → 패키지, 권한, 익스포트된 컴포넌트 |
url_extract | 모든 URL 추출 + 중복 제거 → API/호스트 맵 |
secret_scan | 분류된 하드코딩 시크릿 스캔 (AWS/GCP/JWT/키/AES…) |
native_libs | lib/<abi>/*.so + ABI 목록 (JNI 표면) |
search_code | 소스에 대한 정규식 grep — 읽기 전에 위치 파악 |
ask_user | 에이전트가 운영자에게 질문 (다중 선택 메뉴) |
정적
| 도구 | 목적 |
|---|---|
jadx | APK/DEX/XAPK → Java (번들 자동 추출, 풍부한 요약) |
apktool | APK → smali + 디코딩된 매니페스트 |
radare2 / ghidra | 네이티브 바이너리 디스어셈블 / 헤드리스 디컴파일 |
elf_info / pe_info | ELF/PE 헤더, 심볼, 임포트 파싱 (네이티브) |
hexdump / strings | 원시 바이트 / 출력 가능 문자열 |
unzip | 네이티브 zip/apk/xapk/apks 추출 (셸 없음) |
동적 & 네트워크
| 도구 | 목적 |
|---|---|
adb | 디바이스 제어 |
frida_ps | 디바이스 앱/프로세스 목록 |
frida | 사용자 정의 Frida JS 스크립트 실행 |
frida_preset | 내장: ssl_unpin, list_classes, dump_class, hook, trace_http |
proxy | 네이티브 Go MITM 프록시 (goproxy) — 실시간 HTTPS 트래픽 캡처 |
http_request | 발견된 API 엔드포인트 재생/테스트 |
download | URL을 작업 디렉터리로 가져오기 |
실시간 네트워크 캡처: proxy start는 인프로세스 MITM 프록시를 띄우고
CA를 내보낸다. 에이전트는 디바이스를 여기로 지정하고(adb) + CA를 설치하고 +
frida_preset ssl_unpin을 실행한 다음, proxy flows로 플로우를 읽는다.
캡처된 요청/응답은 TUI의 NET 사이드 패널에 실시간으로 스트리밍된다
(터미널이 충분히 넓을 때 표시 — 레이아웃은 완전 반응형).
파일시스템 / 셸: read_file, write_file, list_dir, shell (Windows에서는 기본 PowerShell).
헤더는 에이전트가 실행되는 동안 실시간 토큰 사용량 (Nk↑ Nk↓)을 보여준다.
TUI에서: 대상/명령을 입력하고, Enter로 실행, PgUp/PgDn으로 스크롤, Ctrl+C로 중단/종료. 에이전트는 디컴파일하고, 검사하고, frida로 후킹하고, Glamour로 인라인 렌더링된 마크다운 리포트를 작성한다.
도구는 PATH 또는 tools_dir (~/.jurig/tools)에서 해석된다. 에이전트가
바이너리가 없지만 카탈로그에 알려진 도구(jadx, apktool)를 호출하면,
실행 중에 자동 다운로드한다 — 수동 단계 없음. jurig install <tool>은
사전 준비용으로 여전히 작동한다. 무겁거나 라이선스가 필요한 도구(ghidra)는
수동으로 남는다.
감지/설치 가능:
| 도구 | 목적 | 설치 방법 |
|---|---|---|
| jadx | APK/DEX → Java (1.4.7 고정; 1.5.x는 Java 21/Win에서 NPE) | jurig install jadx |
| apktool | APK → smali + 매니페스트 | jurig install apktool (jar; 래퍼 필요) |
| radare2 | 네이티브 디스어셈블/분석 | 시스템 패키지 |
| adb | 디바이스 제어 | Android platform-tools |
| frida | 동적 계측 | pip install frida-tools + 디바이스에 frida-server |
| ghidra | 헤드리스 디컴파일 | 수동 설치, tools_dir/ghidra를 가리키도록 설정 |
~/.jurig/config.json (config.example.json 참조). 환경변수 오버라이드:
ANTHROPIC_API_KEY, OPENROUTER_API_KEY, JURIG_PROVIDER,
ANTHROPIC_BASE_URL, JURIG_TOOLS_DIR.
cmd/jurig entrypoint, TUI/headless/install/doctor
internal/config config + env overlay
internal/llm Messages types, router, anthropic + openai-compat + claude-cli
internal/tools registry + tools (shell,fs,unzip,strings,radare2,jadx,apktool,adb,frida)
internal/portable resolve + install portable binaries
internal/agent autonomous loop + system prompt + events
internal/tui Bubble Tea app, Glamour rendering
MVP 작동: 에이전트 루프, 프로바이더 라우터, 도구 레지스트리, TUI, 이식 가능 관리자. 다음: 응답 스트리밍, 네트워크 캡처 (mitmproxy) 도구, ghidra 헤드리스 도구, 대상별 세션 지속성, frida-server 자동 푸시.