Claude-Reverser/IDA-instances-MCP
Custom build of ida-pro-mcp - stability-hardened MCP server for hosting headless IDA Pro instances
IDA-Instances-MCP – IDA Pro용 안정적인 다중 인스턴스 MCP 서버
무엇인가요
- ida-pro-mcp의 커스텀 포크로, AI 도구(Claude Code, Cursor, VS Code 확장 등)가 IDA Pro를 프로그래밍 방식으로 제어할 수 있는 Model-Context-Protocol (MCP) 서버를 실행합니다.
- "headless-instances" 계층을 추가하여 여러 IDA 워커가 병렬로 실행되며, 각각 고유한 격리된 데이터베이스를 가지며 단일 HTTP(또는 stdio) 엔드포인트 뒤에서 작동합니다.
상류 리포지토리 대비 주요 개선 사항
| 영역 | 개선 사항 |
|---|---|
| 데이터 안전성 | 다른 활성 세션에 속하는 .id0/.id1/.id2/.nam/.til 파일을 삭제하지 않습니다. |
| 저장 신뢰성 | idb_save에 10분 예산을 할당하여 실패한 저장도 변경 사항을 버리지 않습니다. |
| 동시성 | 워커 시작 또는 정리 중 전체 서버가 블록되지 않습니다. |
| 강건성 | 잘못된 JSON-RPC는 충돌 대신 적절한 오류 코드를 반환합니다. |
| 타임아웃 | 프록시 타임아웃을 15분(설정 가능)으로 상향하여 긴 디컴파일이 완료됩니다. |
| 네트워킹 | 포트 레이스 처리, 잠긴 SSE 쓰기, 캐시된 CORS 읽기. |
| 리소스 제한 | 추적 로그는 64 MiB로 제한되며, 과도한 인수/결과는 잘립니다. 실패 큐는 제한됨. |
| 인증 | 모든 HTTP 요청은 일회성 API 키(GET /key)를 제출해야 합니다. |
| 관리 엔드포인트 | /health, /sessions, /upload (바이너리 업로드, 크기 제한). |
| 비활성 제거 | IDA_MCP_IDLE_TIMEOUT 분 이상 비활성인 세션은 자동 저장 후 닫힙니다. |
| 예외적인 종료 | SIGTERM/SIGINT 수신 시 모든 열린 데이터베이스가 저장됩니다. |
| 자가 업데이트 | 시작 시 GitHub 릴리스를 확인하고 키스트로크로 자동 업데이트 가능. |
| 기본 설정 | 0.0.0.0:9999에서 리슨; GUI 플러그인도 0.0.0.0에 바인딩하고 동일한 API 키 사용. |
작동 방식
- 서브버비스(
idalib-mcp)가 경량 HTTP 서버로 실행되며, 열린 각 IDB에 대해 별도의 워커 프로세스를 생성합니다. 각 프로세스는 헤드리스 모드로 IDA의idalib를 로드합니다. - 클라이언트는 HTTP(또는 stdio)를 통해 MCP(JSON-RPC)로 통신합니다. 서브버비스는 호출을 적절한 워커로 전달하고 타임아웃을 강제하며 결과를 반환합니다.
- 시작 시 생성된 API 키가 모든 엔드포인트를 보호하며, 키는
~/.idapro/mcp/api_key에 저장되어 재시작 후에도 유지됩니다.
일반적인 워크플로우
# 1️⃣ IDA의 Python 환경 활성화 (uv는 추천 패키지 매니저)
uv run "/opt/idapro-9.x/idalib/python/py-activate-idalib.py"
# 2️⃣ 헤드리스 MCP 서버 시작 (기본적으로 0.0.0.0:9999에 바인딩)
uv run idalib-mcp
# 3️⃣ 일회성 API 키 가져오기
KEY=$(curl -s http://host:9999/key | jq -r .key)
# 4️⃣ 분석을 위한 바이너리 업로드
curl -H "Authorization: Bearer $KEY" \
--data-binary @sample.elf \
"http://host:9999/upload?filename=sample.elf"
# 5️⃣ MCP 호환 클라이언트(예: Claude Code)를 동일한 키로 서버에 연결.
인터랙티브 GUI 프록시 실행
- IDA 내부에 MCP 플러그인 설치 (
Edit → Plugins → MCP). - 터미널에서:
uv run ida-pro-mcp(stdio) 또는uv run ida-pro-mcp --transport http://127.0.0.1:9999로 GUI에서 작업하면서 동일한 HTTP API 노출.
구성 (환경 변수, 명령줄 플래그)
IDA_MCP_MAX_WORKERS– 동시 실행 가능한 IDA 인스턴스 최대 수 (기본값 4, 0은 무제한).IDA_MCP_IDLE_TIMEOUT– 세션이 자동 닫히는 비활성 시간(분, 기본값 60).IDA_MCP_PROXY_TIMEOUT– GUI 프록시에서 워커로의 호출 타임아웃 (기본값 900초).IDA_MCP_API_KEY/IDA_MCP_API_KEY_FILE– 미리 생성된 키 삽입.- 기타 다양한 설정은 오픈 시간 제한, 업로드 크기 제한, 헬스 프로브 예산 등을 제어합니다.
사용 사례
- AI 지원 리버스 엔지니어링: Claude Code, Cursor 또는 기타 LLM 기반 에이전트가 인간이 UI에 존재하지 않는 상태에서 IDA 분석(디컴파일, 심볼 이름 변경, CFG 추출)을 수행.
- 배치 분석 팜: 서버에서 수십 개의 헤드리스 IDA 워커를 시작하여 각각 별도의 바이너리를 처리하고 MCP로 조율.
- CI/CD 보안 스캔: 파이프라인에 서버를 통합하여 바이너리를 자동 업로드하고 IDA 내부에서 정적 분석 도구를 실행하며 결과를 추출.
테스트
리포지토리에는 ida-mcp-test 헬퍼가 포함되어 있으며, 샘플 ELF 바이너리에 대해 다양한 분석 카테고리로 실행하는 방법이 예시로 제공됩니다.
라이선스
- MIT (상류
ida-pro-mcp에서 상속). - 유효한 상용 IDA Pro 라이선스 필요; 무료 버전은 지원되지 않음.
이 요약은 리포지토리의 README에 기반합니다.
관련
- 프로젝트
- 프로젝트
- 프로젝트
- 프로젝트