본문으로 건너뛰기

© 2026 Molayo

GitHub요약2026. 06. 15. 10:11

zboralski/ida-headless-mcp

요약

Model Context Protocol(MCP)을 활용하여 Headless IDA Pro를 통해 바이너리를 분석할 수 있는 도구입니다. Go의 동시성 제어와 Python 워커를 결합하여 멀티 세션 분석 환경을 제공합니다.

핵심 포인트

  • MCP를 통한 Claude Desktop 및 Claude Code와의 연동 지원
  • Go와 Python을 활용한 멀티 세션 동시성 오케스트레이션
  • 바이너리 분석을 위한 52개의 전용 MCP 도구 제공
  • Unity(Il2CppDumper) 및 Flutter(unflutter) 메타데이터 가져오기 지원

Model Context Protocol (MCP)을 통한 Headless IDA Pro 바이너리 분석. Go가 멀티 세션 동시성 (multi-session concurrency)을 오케스트레이션하며, Python 워커가 IDA 작업을 처리합니다.

┌─────────────────┐
│ MCP Client │ Claude Desktop, Claude Code, CLI
│ (HTTP/SSE) │
...

주요 기능:

  • 프로세스 격리를 통한 멀티 세션 동시성 (Multi-session concurrency)

  • 바이너리 분석을 위한 52개의 MCP 도구 (tools)

  • 자동 세션 타임아웃 (기본 4시간, 설정 가능)

  • 설정 가능한 제한(limit)을 가진 페이지화된 결과 (기본 1000)

  • Unity 게임을 위한 Il2CppDumper 메타데이터 가져오기 (import)

  • Flutter/Dart 앱을 위한 unflutter 메타데이터 가져오기 (import)

IDA Pro 9.0+ 또는 IDA Essential 9.2+ -
idalib: 설치 및 활성화: ./scripts/setup_idalib.sh

Go 1.21+ (protoc 도구 포함): make install-tools

Python 3.10+ (의존성 포함): pip3 install -r python/requirements.txt

선택 사항: Il2CppDumper (Unity 게임 분석용) -
선택 사항: unflutter (Flutter/Dart 앱 분석용)

unflutter 설치 (import_flutter를 위한 flutter_meta.json 제공) git clone https://github.com/zboralski/unflutter.git cd unflutter && make install

git clone <repo-url>
cd ida-headless-mcp
make setup

이 명령은 idalib 설정을 실행하고, Python 의존성을 설치하며, 서버를 빌드합니다.

수동 설정 또는 문제 해결을 위한 방법:

./scripts/setup_idalib.sh # idalib 설정 (IDA Pro/Essential 9.x 필요)
make install-python # Python 의존성 설치
make build # Go 서버 빌드

./bin/ida-mcp-server

서버는 17300 포트에서 실행됩니다 (config.json, 환경 변수, 또는 --port를 통해 설정 가능). 두 가지 전송 방식 (transports)을 모두 제공합니다:

  • 스트리밍 가능한 HTTP (권장):
    http://localhost:17300/

  • SSE 호환 엔드포인트 (SSE compatibility endpoint):
    http://localhost:17300/sse

~/Library/Application Support/Claude/claude_desktop_config.json 파일을 편집하세요:

{
"mcpServers": {
"ida-headless": {
...

편집 후 Claude Desktop을 재시작하세요.

모든 IDA MCP 도구에 대한 액세스 권한을 부여하려면 .claude/settings.json~/.claude/settings.json으로 복사하세요.

1. open_binary(path="/path/to/binary.so")
→ {"session_id": "abc123", "has_decompiler": true}
2. run_auto_analysis(session_id="abc123")
...
1. 대상에 대해 unflutter 실행: unflutter meta libapp.so
2. open_binary(path="libapp.so")
3. import_flutter(session_id="...", meta_json_path="flutter_meta.json")
...

import_flutter 도구는 unflutter로부터 구조화된 JSON 메타데이터를 읽습니다. 이 도구는 단 한 번의 패스(single pass)로 Dart 클래스 구조체(structs), 타입화된 시그니처(typed signatures)를 가진 함수 정의를 생성하며, THR/PP/문자열 참조 주석을 달아줍니다.

사용 가능한 모든 도구를 확인하려면 MCP를 통해 tools/list를 사용하세요.

명령줄 플래그 (Command line flags):

./bin/ida-mcp-server \
--port 17300 \
--max-sessions 10 \
...

환경 변수 (CLI 플래그에 의해 재정의됨):

IDA_MCP_PORT=17300
IDA_MCP_SESSION_TIMEOUT_MIN=240
IDA_MCP_MAX_SESSIONS=10
...
make build # Go 서버 빌드
make proto # protobuf 재생성
make test # 테스트 + 일관성 검사 실행
...

테스트 의존성 설치:

pip3 install -r requirements-test.txt

테스트 실행:

make test # 모든 테스트
pytest tests/ -v # Python 테스트만
go test ./... # Go 테스트만

MCP Inspector 사용:

make run # 서버 시작
make inspector # http://localhost:5173 에서 inspector 실행
ida-headless-mcp/
├── cmd/ida-mcp-server/ # Go MCP 서버 엔트리 포인트
├── internal/
...
  • proto/ida/worker/v1/ida_service.proto에 RPC 추가

  • 재생성:
    make proto

  • python/worker/ida_wrapper.py에서 구현

  • python/worker/connect_server.py에 핸들러 추가

  • internal/server/server.go에 MCP 도구 등록

  • 클라이언트가 open_binary(path) 호출

  • Go가 레지스트리에 세션 생성 (UUID)

  • Go가 Python 워커(worker) 서브프로세스를 생성

  • 워커가 /tmp/ida-worker-{id}.sock에 Unix 소켓 생성

  • 워커가 idalib으로 IDA 데이터베이스를 엶

  • Go가 소켓을 통해 Connect RPC 클라이언트를 생성

  • 이후의 도구 호출은 Connect를 통해 워커로 프록시(proxy)됨

  • Watchdog이 유휴 시간(idle time)을 모니터링함 (기본값: 4시간)

  • 타임아웃 발생 시 또는 close_binary 호출 시

: 데이터베이스 저장, 워커(worker) 종료, 정리(cleanup) - 세션 메타데이터는 서버 재시작 후 자동 복구를 위해 <database_directory>/sessions 아래에 유지됩니다.

워커(Worker) 시작 실패:

python3 -c "import idapro; print('OK')"

만약 이 명령이 실패한다면, ./scripts/setup_idalib.sh를 실행하세요.

소켓 타임아웃 (Socket timeout):
Python 워커 로그를 확인하세요. 초기화(init) 과정 중에 워커가 충돌(crash)했을 수 있습니다.

포트가 이미 사용 중임 (Port already in use):

lsof -ti:17300 | xargs kill
# 또는 다른 포트를 사용하세요
./bin/ida-mcp-server --port 17301

세션을 찾을 수 없음 (Session not found):
세션이 타임아웃되었을 수 있습니다. list_sessions를 사용하여 활성 세션을 확인하세요.

MIT

MCP Servers:

Metadata Dumpers:

  • Perfare/Il2CppDumper (import_il2cpp에서 사용)
  • zboralski/unflutter (import_flutter에서 사용)

AI 자동 생성 콘텐츠

본 콘텐츠는 GitHub AI Tools의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0