Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
binary-ninja-headless-mcp — Headless Binary Ninja MCP 서버 — AI 에이전트에게 180개의 도구를 통해 심층 리버스 엔지니어링 기능을 제공합니다. | Kitploit
도구/GitHubGitHub/mrphrazer/binary-ninja-headless-mcp
Reverse EngineeringScripting & AutomationDebuggersFuzzingUtilities & FrameworksBinary AnalysisLearning & EducationAI-Assisted Reversing

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유
GitHub
mrphrazer/binary-ninja-headless-mcp

binary-ninja-headless-mcp

Headless Binary Ninja MCP 서버 — AI 에이전트에게 180개의 도구를 통해 심층 리버스 엔지니어링 기능을 제공합니다.

저장소 보기
2351943개월 전Kitploit 검토 완료

Binary Ninja 헤드리스 MCP

헤드리스 Binary Ninja 서버로, MCP(Model Context Protocol)를 사용하여 AI 에이전트에 GUI 없이 디스어셈블리, IL, 패치, 타입, 크로스 레퍼런스 등 심층 리버스 엔지니어링 워크플로에 대한 전체 액세스를 제공합니다.

에이전트 런타임과 동일한 Docker 컨테이너에서 실행되도록 설계되었습니다. 사이드카나 추가 서비스가 필요 없습니다.

이 전체 프로젝트(코드, 테스트, 문서)는 100% 바이브 코딩되었습니다.

왜 필요한가

기존 Binary Ninja MCP 서버는 GUI에 종속되거나 제한된 도구 표면을 노출합니다. 이 서버는 헤드리스 전용이며 샌드박스 VM/컨테이너 환경에서 에이전트 기반 워크플로를 위해 설계되었습니다. 에이전트가 분석 시스템을 완전히 제어하여 리버스 엔지니어링의 많은 부분을 자동화하고, 사용자는 대화형으로 프로세스를 논의하고 조정할 수 있습니다.

목표는 에이전트가 시간이 지남에 따라 분석을 검사, 개선 및 확장할 수 있는 인터페이스입니다. 즉, 타입, 심볼 및 메타데이터 업데이트, 분석 데이터베이스를 점진적으로 개선, 실행 취소/다시 실행으로 안전하게 패치 적용 및 반복, 그리고 특정 워크플로가 필요한 경우 사용자 정의 스크립트를 실행할 수 있습니다.

기능

  • 36개 기능 그룹에 걸쳐 181개의 도구: 분석, 디스어셈블리, IL, 패치, 실행 취소/다시 실행, 타입, 워크플로, 메모리, 검색, 크로스 레퍼런스, 스크립팅 등.
  • 기본적으로 읽기 전용이며 안전한 변경 워크플로(실행 취소/다시 실행, 트랜잭션)를 제공합니다.
  • 스크립팅 액세스: binja.eval 및 binja.call을 통해 도구 카탈로그가 포함하지 않는 모든 기능 사용 가능.
  • Stdio 및 TCP 전송.
  • Binary Ninja 자체 외에는 런타임 종속성이 없음.
  • 가짜 백엔드 모드: CI 및 개발 환경에서 Binary Ninja 라이선스 없이 사용 가능.

사전 요구 사항

  • Python 3.11+
  • Binary Ninja 설치(헤드리스 가능 라이선스 및 binaryninja Python 모듈을 실행 환경에서 가져올 수 있어야 함, 실제 분석용)
  • Binary Ninja 없이 CI/개발하려면 가짜 백엔드 모드 사용

설치

root@kitploit:~
git clone https://github.com/mrphrazer/binary-ninja-headless-mcp.git
cd binary-ninja-headless-mcp
pip install .

또는 복제 없이 리포지토리 루트에서 직접 설치:

root@kitploit:~
pip install git+https://github.com/mrphrazer/binary-ninja-headless-mcp.git

빠른 시작

Stdio 전송(기본값):

root@kitploit:~
python3 binary_ninja_headless_mcp.py

TCP 전송:

root@kitploit:~
python3 binary_ninja_headless_mcp.py --transport tcp --host 127.0.0.1 --port 8765

가짜 백엔드 모드(Binary Ninja 필요 없음):

root@kitploit:~
python3 binary_ninja_headless_mcp.py --fake-backend

AI 에이전트와 함께 사용

이 서버는 표준 MCP를 stdio(기본값) 또는 tcp를 통해 사용하므로, MCP를 지원하는 모든 에이전트 호스트에서 사용할 수 있습니다.

Claude Code

root@kitploit:~
claude mcp add binary_ninja_headless_mcp -- python3 /path/to/binary-ninja-headless-mcp/binary_ninja_headless_mcp.py

또는 프로젝트의 .mcp.json에 추가:

root@kitploit:~
{
  "mcpServers": {
    "binary_ninja_headless_mcp": {
      "command": "python3",
      "args": ["binary_ninja_headless_mcp.py"],
      "cwd": "/path/to/binary-ninja-headless-mcp"
    }
  }
}

Codex

root@kitploit:~
codex mcp add binary_ninja_headless_mcp -- python3 binary_ninja_headless_mcp.py

일반 MCP 호스트

  • binary_ninja_headless_mcp라는 이름의 서버를 등록합니다.
  • cwd가 리포지토리 루트인 경우 명령어 python3에 인수 ["binary_ninja_headless_mcp.py"]를 사용하거나 args에 절대 스크립트 경로를 사용합니다.
  • samples/ls와 같은 상대 경로가 올바르게 확인되도록 cwd를 리포지토리 경로로 설정합니다.
  • 호스트가 TCP를 요구하지 않는 한 stdio 전송을 사용합니다.
  • 가짜 모드(Binary Ninja가 설치되지 않은 경우)의 경우 --fake-backend를 추가합니다.
  • health.ping을 호출한 다음 session.open을 호출하여 연결을 확인합니다.

Docker 공동 배치 패턴

권장 배포 모델: 에이전트 프로세스와 이 MCP 서버를 동일한 컨테이너 이미지에서 실행합니다.

기본 예:

root@kitploit:~
FROM python:3.11-slim
WORKDIR /app
COPY . /app
RUN python -m pip install --upgrade pip && pip install ruff pytest
CMD ["python3", "binary_ninja_headless_mcp.py"]

컨테이너 내에서 실제 Binary Ninja 분석이 필요한 경우, 이 이미지에 Binary Ninja 런타임 및 라이선스 설정을 추가하고 이 MCP 서버가 구성된 에이전트를 시작합니다.

MCP 메서드

  • initialize
  • ping
  • tools/list
  • tools/call
  • shutdown

tools/list 동작:

  • 명시적 페이지 매김 매개변수 없이 호출되면 전체 도구 카탈로그를 반환합니다.
  • offset 또는 limit이 제공되면 페이지 매김 출력을 사용합니다(페이지 모드에서 기본값 offset=0, limit=50).
  • 필터링 지원:
    • prefix(예: binary.)
    • query(도구 이름/설명에 대한 부분 문자열 일치)
  • 페이지 매김 메타데이터 반환: offset, limit, total, has_more.
  • 페이지가 잘린 경우(has_more=true) next_offset 및 notice 힌트를 포함합니다.

도구 호출 응답 동작:

  • structuredContent가 정식 전체 페이로드입니다.
  • content[0].text는 간결한 요약 문자열입니다(전체 JSON 중복이 아닙니다).
  • 이 분할은 전체 기계 판독 가능 데이터를 노출하면서도 컨텍스트 사용량을 줄이기 위해 의도적으로 이루어졌습니다.

품질 및 테스트

이 리포지토리는 잘 테스트되었으며 품질 게이트가 적용됩니다.

  • 테스트 스위트: pytest --collect-only -q를 실행하여 현재 수집된 테스트 수를 확인합니다.
  • CI 워크플로우는 다음을 적용합니다:
    • ruff format --check .
    • ruff check .
    • pytest
  • CI는 BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1을 사용하므로 Binary Ninja 설치 없이 검사가 실행됩니다.
  • 추가 구조 테스트를 통해 도구 레지스트리 일관성과 백엔드 접근 가능성을 확인합니다.

컨텍스트 제어

  • 읽기 전용 모드가 열린 세션의 기본값입니다(read_only=true).
  • binary.basic_blocks_at 및 function.basic_blocks는 페이지가 매겨집니다(offset/limit).
  • memory.read는 하드 응답 제한이 있습니다: length <= 65536.

제한 사항

  • Enterprise API는 현재 다루지 않습니다.
  • 디버거 API는 현재 다루지 않습니다.

보안 모델

  • MCP 통신(stdio/tcp)은 기본적으로 인증되지 않습니다.
  • 서버는 binja.eval을 통해 임의 스크립팅을 노출하고 binja.call을 통해 광범위한 API 액세스를 노출합니다.
  • 이는 신뢰할 수 있는 컨테이너화된 에이전트 환경을 위해 의도적으로 설계되었습니다.
  • 이 서버를 신뢰할 수 없는 사용자나 네트워크에 직접 노출하지 마십시오.

로컬 개발 워크플로

root@kitploit:~
ruff format --check .
ruff check .
BINARY_NINJA_HEADLESS_MCP_FAKE_BACKEND=1 pytest -q

기능 퍼저

내장 MCP 기능 퍼저를 사용하여 samples/ls에 대해 광범위한 도구 표면을 테스트합니다.

실제 Binary Ninja 백엔드:

root@kitploit:~
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --iterations 120 --seed 1337

가짜 백엔드 스모크 실행:

root@kitploit:~
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --fake-backend --iterations 20

JSON 커버리지 보고서 작성:

root@kitploit:~
python3 -m binary_ninja_headless_mcp.fuzzer --binary samples/ls --report-json /tmp/mcp-fuzzer-report.json

유용한 플래그:

  • --min-success-tools N: 성공한 도구가 N개 미만이면 종료 코드 0이 아닌 값으로 종료합니다.
  • --verbose: 퍼징하는 동안 각 도구 호출을 출력합니다.
  • --update-analysis: update_analysis=true로 시드 세션을 엽니다.

기능 카탈로그

서버는 현재 36개의 기능 그룹에 걸쳐 181개의 도구를 노출합니다.

analysis

  • analysis.status: 분석 상태 조회.
  • analysis.progress: 분석 진행 스냅샷 조회.
  • analysis.update: 비동기 분석 업데이트 트리거.
  • analysis.update_and_wait: 분석 업데이트 실행 후 완료 대기.
  • analysis.abort: 분석 중단.
  • analysis.set_hold: 분석 큐 보류/해제.

annotation

  • annotation.rename_function: 함수 이름 변경.
  • annotation.rename_symbol: 주소에 있는 심볼 이름 변경.
  • annotation.undefine_symbol: 주소에 있는 사용자 심볼 해제.
  • annotation.define_symbol: 주소에 심볼 정의.
  • annotation.rename_data_var: 데이터 변수 이름 변경.
  • annotation.define_data_var: 데이터 변수 정의.
  • annotation.undefine_data_var: 데이터 변수 해제.
  • annotation.set_comment: 주소에 주석 설정.
  • annotation.get_comment: 주소에 있는 주석 조회.
  • annotation.add_tag: 주소에 사용자 데이터 태그 추가.
  • annotation.get_tags: 주소에 있는 태그 조회.

arch

  • arch.info: 아키텍처 및 플랫폼 메타데이터 조회.
  • arch.disasm_bytes: 선택한 아키텍처로 바이트 디스어셈블.
  • arch.assemble: 선택한 아키텍처로 명령어 텍스트 어셈블.

baseaddr

  • baseaddr.detect: 기준 주소 탐지 실행.
  • baseaddr.reasons: 기준 주소 탐지 이유 조회.
  • baseaddr.abort: 기준 주소 탐지 중단.

binary

  • binary.summary: 바이너리/세션 요약 조회.
  • binary.save: 현재 바이너리 뷰를 파일 경로에 저장.
  • binary.functions: 페이지 매김으로 함수 목록 조회.
  • binary.strings: 페이지 매김으로 발견된 문자열 목록 조회.
  • binary.search_text: 세션에서 원시 텍스트/바이트 검색.
  • binary.sections: 페이지 매김으로 섹션 목록 조회.
  • binary.segments: 페이지 매김으로 세그먼트 목록 조회.
  • binary.symbols: 페이지 매김으로 심볼 목록 조회.
  • binary.data_vars: 페이지 매김으로 데이터 변수 목록 조회.
  • binary.get_function_at: 주소로 함수 찾기.
  • binary.get_function_disassembly_at: 주소를 포함하는 함수의 전체 디스어셈블리 조회.
  • binary.get_function_il_at: 주소를 포함하는 함수의 전체 IL 조회.

binja

  • binja.info: Binary Ninja 버전/설치 정보 반환.
  • binja.call: 일반 API 브리지: bn.* 또는 bv.* 대상 경로 호출.
  • binja.eval: bn, sessions, 선택적 bv로 Python 코드 평가.

data

  • data.typed_at: 주소에 있는 타입이 지정된 데이터 변수 조회.

database

  • database.create_bndb: 세션에서 .bndb 생성.
  • database.save_auto_snapshot: 자동 스냅샷 저장.
  • database.info: 세션의 데이터베이스 상태 조회.
  • database.snapshots: 데이터베이스 스냅샷 목록 조회.
  • database.read_global: 데이터베이스 전역 문자열 키 읽기.
  • database.write_global: 데이터베이스 전역 문자열 키 쓰기.

debug

  • debug.parsers: 이 뷰에 유효한 디버그 정보 파서 목록 조회.
  • debug.parse_and_apply: 디버그 정보를 파싱하여 뷰에 적용.

disasm

  • disasm.linear: 선형 디스어셈블리 라인 조회.
  • disasm.function: 주소를 포함하는 함수의 전체 디스어셈블리 조회.
  • disasm.range: 주소 범위 디스어셈블리 라인.

external

  • external.library_add: 외부 라이브러리 추가.
  • external.library_list: 외부 라이브러리 목록 조회.
  • external.library_remove: 외부 라이브러리 제거.
  • external.location_add: 외부 위치 매핑 추가.
  • external.location_get: 외부 위치 매핑 조회.
  • external.location_remove: 외부 위치 매핑 제거.

function

  • function.basic_blocks: 페이지 매김으로 함수 내 기본 블록 목록 조회.
  • function.callers: 함수의 호출자.
  • function.callees: 함수의 피호출자.
  • function.variables: 함수 변수 목록 조회.
  • function.var_refs: MLIL/HLIL에서 변수 참조 목록 조회.
  • function.var_refs_from: 주소에서 시작하는 변수 참조 목록 조회.
  • function.ssa_var_def_use: SSA 변수 정의 및 사용 조회.
  • function.ssa_memory_def_use: 메모리 버전별 SSA 메모리 정의 및 사용 조회.
  • function.metadata_store: 키로 함수 메타데이터 저장.
  • function.metadata_query: 키로 함수 메타데이터 조회.
  • function.metadata_remove: 키로 함수 메타데이터 제거.

health

  • health.ping: 상태 확인.

il

  • il.function: IL 함수 목록.
  • il.instruction_by_addr: 소스 주소로 IL 명령어 조회.
  • il.address_to_index: 주소를 IL 인덱스(들)로 매핑.
  • il.index_to_address: IL 인덱스를 소스 주소로 매핑.
  • il.rewrite.capabilities: 하나의 함수 및 IL 수준에 대한 IL 재작성 지원 목록 조회.
  • il.rewrite.noop_replace: 널 연산 IL 표현식 대체 수행.
  • il.rewrite.translate_identity: 동일 매핑 콜백으로 IL 변환.

loader

  • loader.rebase: BinaryView 재배치.
  • loader.load_settings_types: 로더 설정 타입 이름 목록 조회.
  • loader.load_settings_get: 로더 설정 값 조회.
  • loader.load_settings_set: 하나의 로더 설정 값 설정.

memory

  • memory.read: 뷰에서 바이트 읽기(length <= 65536).
  • memory.write: 바이트(16진수)를 뷰에 쓰기.
  • memory.insert: 바이트(16진수)를 뷰에 삽입.
  • memory.remove: 뷰에서 바이트 제거.
  • memory.reader_read: BinaryReader를 통해 정수 값 읽기.
  • memory.writer_write: BinaryWriter를 통해 정수 값 쓰기.

mcp

  • mcp.response_format: 도구 결과 필드 설명(structuredContent 전체 페이로드, content[0].text 요약).

metadata

  • metadata.store: 키로 메타데이터 저장.
  • metadata.query: 키로 메타데이터 조회.
  • metadata.remove: 키로 메타데이터 제거.

patch

  • patch.assemble: 주소에서 명령어 바이트 어셈블 및 패치.
  • patch.status: 주소에서 패치 가능 여부 검사.
  • patch.convert_to_nop: 지원되는 경우 명령어를 NOP으로 패치.
  • patch.always_branch: 지원되는 경우 조건부 분기를 항상 분기로 패치.
  • patch.never_branch: 지원되는 경우 조건부 분기를 절대 분기하지 않음으로 패치.
  • patch.invert_branch: 지원되는 경우 조건부 분기를 반전시켜 패치.
  • patch.skip_and_return_value: 지원되는 경우 명령어를 건너뛰고 값을 반환하도록 패치.

plugin

  • plugin.valid_commands: 컨텍스트에 유효한 플러그인 명령어 목록 조회.
  • plugin.execute: 컨텍스트에 유효한 플러그인 명령어 실행.

plugin_repo

  • plugin_repo.status: 플러그인 리포지토리 및 플러그인 상태 목록 조회.
  • plugin_repo.check_updates: 플러그인 리포지토리 업데이트 확인.
  • plugin_repo.plugin_action: 리포지토리 플러그인에 설치/제거/활성화/비활성화 작업 실행.

project

  • project.create: 프로젝트 생성.
  • project.open: 프로젝트 열기.
  • project.close: 추적 중인 프로젝트 닫기.
  • project.list: 프로젝트 폴더/파일 목록 조회.
  • project.create_folder: 프로젝트 폴더 생성.
  • project.create_file: base64 데이터에서 프로젝트 파일 생성.
  • project.metadata_store: 프로젝트 메타데이터 저장.
  • project.metadata_query: 프로젝트 메타데이터 조회.
  • project.metadata_remove: 프로젝트 메타데이터 제거.

search

  • search.data: 원시 바이트 패턴(16진수 문자열) 검색.
  • search.next_text: 다음 텍스트 일치 항목 찾기.
  • search.all_text: 범위 내 모든 텍스트 일치 항목 찾기(정규식 선택 사항).
  • search.next_data: 다음 데이터/바이트 패턴 일치 항목 찾기.
  • search.all_data: 범위 내 모든 데이터/바이트 패턴 일치 항목 찾기.
  • search.next_constant: 다음 상수 발생 찾기.
  • search.all_constant: 범위 내 모든 상수 발생 찾기.

section

  • section.add_user: 사용자 섹션 추가.
  • section.remove_user: 사용자 섹션 제거.

segment

  • segment.add_user: 사용자 세그먼트 추가.
  • segment.remove_user: 사용자 세그먼트 제거.

session

  • session.open: 바이너리를 열고 세션 생성.
  • session.open_bytes: base64로 인코딩된 바이트로 바이너리 세션 열기.
  • session.open_existing: 기존 세션의 파일에서 다른 세션 열기.
  • session.close: 열려 있는 세션 하나 닫기.
  • session.list: 열려 있는 세션 목록 조회.
  • session.mode: 세션 안전/결정론 모드 조회.
  • session.set_mode: 세션 안전/결정론 모드 업데이트.

task

  • task.analysis_update: 비동기 분석 업데이트 작업 시작.
  • task.search_text: 비동기 검색 작업 시작.
  • task.status: 작업 상태 조회.
  • task.result: 작업 결과 조회.
  • task.cancel: 작업 취소(최선 노력).

transform

  • transform.inspect: 변환 추출 파이프라인 검사/처리.

type

  • type.parse_string: 단일 타입 문자열 파싱.
  • type.parse_declarations: C 선언문에서 타입/변수/함수 파싱.
  • type.define_user: 타입 소스에서 사용자 타입 정의.
  • type.rename: 타입 이름 변경.
  • type.undefine_user: 사용자 타입 해제.
  • type.import_library_type: 타입 라이브러리에서 타입 가져오기.
  • type.import_library_object: 타입 라이브러리에서 객체 타입 가져오기.
  • type.export_to_library: 타입을 타입 라이브러리로 내보내기.

type_archive

  • type_archive.create: 타입 아카이브 생성 및 선택적으로 연결.
  • type_archive.open: 타입 아카이브 열기 및 선택적으로 연결.
  • type_archive.list: 연결된 타입 아카이브 목록 조회.
  • type_archive.get: 추적 중인 하나의 타입 아카이브 조회.
  • type_archive.pull: 타입 아카이브에서 타입 가져오기.
  • type_archive.push: 타입 아카이브로 타입 내보내기.
  • type_archive.references: 하나의 타입에 대한 아카이브의 내부/외부 참조 조회.

type_library

  • type_library.create: 타입 라이브러리 생성 및 선택적으로 연결.
  • type_library.load: 타입 라이브러리 로드 및 선택적으로 연결.
  • type_library.list: 뷰에 연결된 타입 라이브러리 목록 조회.
  • type_library.get: 추적 중인 하나의 타입 라이브러리 조회.

uidf

  • uidf.parse_possible_value: 사용자 정보 가능 값 집합 문자열 파싱.
  • uidf.set_user_var_value: 함수 사용자 변수 값 설정.
  • uidf.clear_user_var_value: 함수 사용자 변수 값 지우기.
  • uidf.list_user_var_values: 함수에 대한 모든 사용자 변수 값 목록 조회.

undo

  • undo.begin: 실행 취소 트랜잭션 시작.
  • undo.commit: 실행 취소 트랜잭션 커밋.
  • undo.revert: 실행 취소 트랜잭션 되돌리기.
  • undo.undo: 실행 취소 수행.
  • undo.redo: 다시 실행 수행.

value

  • value.reg: 주소 이후/에서 레지스터 값 조회.
  • value.stack: 주소 이후/에서 스택 내용 조회.
  • value.possible: 주소에서 IL 가능 값 집합 조회.
  • value.flags_at: 주소에서 리프트된 IL 플래그 읽기/쓰기 상태 조회.

workflow

  • workflow.list: 등록된 워크플로 목록 조회.
  • workflow.describe: 워크플로 토폴로지 및 설정 설명.
  • workflow.clone: 워크플로 복제.
  • workflow.insert: 활동 앞에 활동 삽입.
  • workflow.insert_after: 활동 뒤에 활동 삽입.
  • workflow.remove: 워크플로 활동 제거.
  • workflow.graph: 워크플로 그래프 요약.
  • workflow.machine.status: 워크플로 머신 상태 조회.
  • workflow.machine.control: 워크플로 머신 런타임 제어.

xref

  • xref.code_refs_to: 주소에 대한 코드 참조.
  • xref.code_refs_from: 주소로부터의 코드 참조.
  • xref.data_refs_to: 주소에 대한 데이터 참조.
  • xref.data_refs_from: 주소로부터의 데이터 참조.

연락처

더 많은 정보를 원하시면 Tim Blazytko(@mr_phrazer)에게 문의하십시오.

도구 다운로드
  • binary.functions_at: 주소에 있는 함수 목록 조회.
  • binary.basic_blocks_at: 페이지 매김으로 주소에 있는 기본 블록 목록 조회.