
MCP 서버가 Ghidra의 리버스 엔지니어링과 AI 도구를 연결합니다: 디컴파일, P-코드 에뮬레이션, 실시간 디버깅, 데이터 흐름 분석, 배치 작업, 규칙 적용을 위한 256개의 도구를 헤드리스 및 GUI 모드에서 제공합니다.
이 도구가 유용하다면, ⭐ 스타(star)를 눌러주세요. 다른 사람들이 발견하는 데 도움이 됩니다!
Ghidra MCP가 시간을 절약해 준다면, 프로젝트 후원을 고려해 주세요. 일회성 및 정기 후원 모두 호환성 업데이트, 프로덕션 안정성 강화, 문서, 새로운 도구 제작에 도움이 됩니다.
Ghidra의 강력한 리버스 엔지니어링 기능과 현대 AI 도구 및 자동화 프레임워크를 연결하는 프로덕션 환경에 적합한 Model Context Protocol (MCP) 서버입니다. 271개의 MCP 도구, 실전 검증된 AI 워크플로우, 그리고 가장 포괄적인 Ghidra-MCP 통합을 제공합니다. 이제 P-code 에뮬레이션, 라이브 디버거 통합, PCode 그래프 데이터 흐름 분석이 포함됩니다.
대부분의 Ghidra MCP 구현체는 소수의 읽기 전용 도구만 제공하고 그걸로 끝입니다. 이 프로젝트는 다릅니다. 데모용이 아니라 실제 바이너리를 매일 분석하는 리버스 엔지니어에 의해 만들어졌습니다.
경험해 보셨을 겁니다: 프로젝트를 시작한 지 6개월이 지나면 같은 코드베이스에서 ProcessItem, process_items, handleItem, ItemProc를 발견하게 됩니다. 네 개의 함수가 동일한 작업을 수행하지만, 네 번의 다른 세션이나 엔지니어가 공유된 규칙 없이 이름을 지은 것입니다. 수정하는 데 예상보다 오래 걸리며, 문제는 다시 발생할 것입니다.
v5.0은 규칙을 "기억해야 할 사항"에서 실제로 적용될 수 있는 도구 계층으로 이동합니다.
AI 에이전트의 경우, 이는 모든 세션, 모든 모델, 모든 실행에서 스타일 가이드를 매 프롬프트에 붙여넣지 않아도 일관된 출력을 의미합니다. 도구가 규칙을 알고 있으며, 모델은 결정만 내리면 됩니다.
팀의 경우, "그건 우리 명명 규칙이 아니야"라는 유형의 코드 리뷰 코멘트가 완전히 사라집니다. 규칙 중재는 코드 리뷰가 아닌 도구에서 이루어집니다.
대규모 단독 작업의 경우, analyze_function_completeness는 정직하게 측정하는 0–100% 점수를 제공합니다. 구조적 공제(수정 불가능한 컴파일러 아티팩트)는 유효 점수에서 용서되며, 로그 스케일링은 하나의 나쁜 카테고리가 모든 것을 묻지 못하게 하고, 계층화된 플레이트 주석 품질은 무엇이 누락되었고 그 이유를 정확히 알려줍니다.
호환성 참고: MCP 도구 이름은 GitHub Copilot CLI 및 CAPI 검증을 위해 정규화됩니다. 노출되는 도구 이름은 소문자, 숫자, 밑줄, 하이픈만 사용합니다.
/debugger/status와 같은 중첩 HTTP 경로는 정적 브리지 도구와의 충돌을 피하기 위해 필요 시debugger_status_2와 같은 이름으로 광고됩니다.
EmulatorHelper를 통해 격리된 상태로 모든 함수 실행; 수 밀리초 내에 API 해시 무차별 대입 해결공유 Ghidra 서버 사용자: Ghidra 12.1.2 클라이언트는 Ghidra 서버 12.1, 12.0.5 또는 최신 호환 버전이 필요합니다. 12.1 클라이언트에서 이 플러그인을 사용하기 전에 서버를 업그레이드하세요.
Ghidra 12.1.2는 Jython을 선택적 확장 기능으로 제공합니다. Java 스크립트는 기본적으로 작동하지만,
ghidra_scripts/디렉토리의.py스크립트는 파일 > 확장 기능 설치에서 Jython 확장 기능을 설치하고 Ghidra를 다시 시작해야 합니다.
모든 플랫폼에서 권장:
python -m tools.setup을 직접 사용하세요.
ensure-prereqs는 런타임 Python 요구 사항과 로컬 Maven 저장소에 필요한 Ghidra JAR을 설치합니다.deploy는 빌드 출력물을 복사하고, 사용자 프로필 확장 프로그램을 설치하며, Ghidra 사용자 구성을 패치합니다.
deploy는 이미 실행 중인 일치하는 Ghidra 인스턴스를 필요 시
저장/닫고, 확장 프로그램을 설치하며, Ghidra를 시작하고, MCP 상태를
기다린 후 스키마 스모크 테스트를 실행합니다.
지원되는 빌드 경로: python -m tools.setup build는 내부적으로 Maven을 사용하며, 리포지토리 작업과 문서에서 사용되는 표준 워크플로입니다. ```bash
mvn clean package assembly:single -DskipTests
입력: ```bash
# Secondary/manual Gradle build path only (not used by tools.setup or VS Code tasks)
GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension
Debian/Kali/Ubuntu 23.04+ 참고 (PEP 668): 이 배포판들은 시스템 Python을 외부 관리로 표시하므로 일반적인
pip install은error: externally-managed-environment오류와 함께 실패합니다.--break-system-packages로 해결하지 마세요. apt로 관리되는 도구를 손상시킬 수 있습니다. 대신 uv를 사용하세요 (권장 — 자동으로 프로젝트 로컬.venv를 생성 및 관리하며, 이 저장소의 명령어가 사용하는 방식입니다):
curl -LsSf https://astral.sh/uv/install.sh | sh
uv run bridge-mcp-ghidra # resolves deps into .venv and starts the bridge
또는 클래식 가상 환경:
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra
이렇게 하면 다음과 같은 작업이 수행됩니다:
~/.m2/repository에 설치합니다.GhidraMCP-<version>.zip을 빌드합니다.~/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/에 추출합니다.LastExtensionImportDirectory로 preferences를 업데이트합니다.Linux 경로: 확장 프로그램은
$HOME/.config/ghidra/ghidra_<version>_PUBLIC/Extensions/GhidraMCP/에 설치됩니다. Ghidra 설정 파일은$HOME/.config/ghidra/ghidra_<version>_PUBLIC/에 있습니다.
확장 프로그램은 ~/Library/ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/에 설치됩니다.
참고: Homebrew 경로를 사용할 때는
--ghidra-version이 필요합니다. 경로에 버전 문자열이 포함되어 있지 않기 때문입니다.
기본 프로젝트 창에서: Tools > GhidraMCP > Start MCP Server
~/.cursor/mcp.json): ```json
{
"mcpServers": {
"ghidra": {
"command": "uv",
"args": ["run", "--directory", "/path/to/ghidra-mcp", "bridge-mcp-ghidra"]
}
}
}
@Pandoriaantje님이 커뮤니티 AUR 패키지를 관리합니다:
ghidra-mcp-git — main 브랜치를 추적ghidra-mcp — 릴리즈 태그를 추적원하는 AUR 헬퍼를 사용하여 설치하세요. 예:```bash yay -S ghidra-mcp # or ghidra-mcp-git
### 기본 사용법
#### 옵션 1: Stdio 전송 (AI 도구에 권장)```bash
uv run bridge-mcp-ghidra # or: python -m bridge_mcp_ghidra
클론 체크아웃에서 Autohand Code에 브리지를 추가하려면:```bash autohand mcp add ghidra uv run --directory /path/to/ghidra-mcp bridge-mcp-ghidra
Add `--scope project` before `ghidra` to save the server in the current project's `.autohand` configuration instead of your user configuration.
#### Option 2: Streamable HTTP Transport (Recommended for web/HTTP clients)```bash
uv run bridge-mcp-ghidra --transport streamable-http --mcp-host 127.0.0.1 --mcp-port 8081
HTTP 전송을 위한 MCP 클라이언트 구성 (클라이언트의 MCP 구성 파일에 추가):```json { "mcpServers": { "ghidra-mcp-http": { "url": "http://127.0.0.1:8081/mcp" } } }
브라우저 기반 클라이언트(예: [MCP Inspector](https://github.com/modelcontextprotocol/inspector))는 즉시 사용 가능합니다. HTTP 전송은 CORS 사전 요청(`OPTIONS`)에 응답하고 `mcp-session-id` / `mcp-protocol-version` 헤더를 스크립트에 노출합니다. 허용된 출처는 Host-헤더 정책을 따릅니다. 모든 포트의 루프백은 항상 허용되며, 바인드 호스트와 `GHIDRA_MCP_ALLOWED_HOSTS`에 나열된 모든 호스트도 허용됩니다.
#### 옵션 3: SSE 전송 (사용 중단됨 — 대신 streamable-http 사용)```bash
uv run bridge-mcp-ghidra --transport sse --mcp-host 127.0.0.1 --mcp-port 8081
GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1를 설정하면 브리지가 프로그램 선택자를 생략하는 모든 프로그램 범위 호출을 거부하고, 호출이 서버의 공유 "현재 프로그램"(switch_program과 활성 GUI 탭이 이동하는 대상)을 사용하지 못하도록 대신 명확한 오류를 반환합니다.```bash
export GHIDRA_MCP_REQUIRE_PROGRAM_SELECTORS=1
uv run bridge-mcp-ghidra
이것이 없으면, `program=`을 생략한 호출은 현재 활성화된 프로그램을 대상으로 실행됩니다. 단일 프로그램 워크플로우에서는 문제가 없지만 여러 프로그램이 열려 있을 때는 위험합니다. 해당 호출이 오류 없이 잘못된 바이너리를 읽거나 편집할 수 있기 때문입니다. 여러 클라이언트가 서버를 공유할 때는 위험이 더 커집니다. 각 클라이언트가 현재 프로그램 전역 변수를 서로의 동의 없이 변경하기 때문입니다.
엄격 모드가 켜져 있으면 모든 프로그램 범위의 호출은 대상을 지정해야 합니다. 이는 열려 있는 프로그램을 선택하는 모든 선택자를 포함합니다: 단순 `program=`, 교차 프로그램 도구의 `source_program`/`target_program` 또는 `program_a`/`program_b` (필수로 선언되었지만, 값이 비어 있으면 서버는 여전히 현재 프로그램으로 대체됩니다). 선택자를 잊어버리면 잘못된 바이너리에 조용히 쓰는 대신 첫 번째 잘못된 호출에서 큰 오류가 발생합니다. 프로그램 선택자가 없는 도구(`open_program` 및 `close_program`은 `path`/`name`을 사용함)는 영향을 받지 않습니다. 기본적으로 꺼져 있습니다: 변수가 설정되지 않으면 브리지는 호출을 변경하지 않고 보냅니다.
#### 도구 컨텍스트 오버헤드 줄이기
브리지는 큰 카탈로그를 제공합니다. 모델의 도구 표면을 작게 유지하려면 `--lazy` 옵션으로 실행하고 (연결 시 `listing,function,program`만 로드) 모델이 모든 것을 등록하는 대신 필요에 따라 나머지를 **발견**하도록 합니다:
- `search_tools("rename function")` — 그룹이 로드되지 않은 도구를 포함하여 **전체** 카탈로그를 키워드 검색합니다. 각 결과는 현재 호출 가능한지 여부와, 그렇지 않은 경우 활성화하기 위한 정확한 `load_tool_group(...)` 호출을 알려줍니다.
- `list_tool_groups()` — 모든 카테고리와 로드 상태를 나열합니다.
- `load_tool_group("datatype")` / `unload_tool_group("datatype")` — 런타임에 카테고리를 로드하거나 제거합니다.
- `check_tools("rename_or_label,batch_set_comments")` — 특정 도구가 현재 호출 가능한지 확인합니다.
`search_tools`는 즉시 모드와 `--lazy` 모드 모두에서 작동하므로, `tools/list_changed`를 따르는 에이전트는 초기 컨텍스트 비용 없이 전체 검색을 수행할 수 있습니다.
#### 선택 사항: 독립형 디버거 서버 시작```bash
uv sync --group debugger
uv run python -m debugger
The debugger server listens on http://127.0.0.1:8099/ by default and is
required for the debugger_* proxy tools exposed by the MCP bridge.
Debugger server flags:
기본 포트나 호스트를 변경한 경우 브리지가 찾을 수 있도록 .env 파일에서 GHIDRA_DEBUGGER_URL을 설정하세요.
http://127.0.0.1:8089/에서 실행됩니다.curl http://127.0.0.1:8089/check_connection
curl http://127.0.0.1:8089/get_version
## 이 프로젝트 지원하기
Ghidra MCP가 엔지니어링 또는 리버스 엔지니어링 시간을 절약해 준다면, [프로젝트 후원](https://github.com/sponsors/bethington)을 고려해 주세요.
- 일회성 후원은 버그 수정, 호환성 업데이트, 릴리스 작업 자금 지원에 도움이 됩니다.
- 정기 후원은 유지보수, 문서, 프로덕션 강화 작업이 계속 진행되도록 합니다.
- 기업 후원은 브리지, 헤드리스 서버, 디버거 통합 및 워크플로 도구의 장기적인 안정성에 우선순위를 두는 데 도움이 됩니다.
## 🔒 보안
GhidraMCP는 **로컬호스트 전용 개발**을 위해 설계되었습니다. 기본 설정(`127.0.0.1`에 바인딩된 HTTP 서버, 인증 없음)은 신뢰할 수 있는 단일 사용자 워크스테이션에서 안전하며 v5.4.1 이전 동작과 일치합니다.
**루프백을 넘어 서버를 노출하려면 먼저 이 세 가지 환경 변수를 구성하세요.** 서버는 토큰 없이 루프백이 아닌 바인드에서 시작을 거부합니다.
| 환경 변수 | 효과 |
|---|---|
| `GHIDRA_MCP_AUTH_TOKEN` | 설정된 경우 모든 HTTP 요청은 `Authorization: Bearer <token>`을 포함해야 합니다. 타이밍 안전 비교. `/mcp/health`, `/health`, `/check_connection`은 면제됩니다. |
| `GHIDRA_MCP_ALLOW_SCRIPTS` | `/run_script_inline` 및 `/run_ghidra_script`를 활성화하려면 `1`, `true` 또는 `yes`로 설정하세요. **v5.4.1부터 기본적으로 꺼져 있음** — 이 엔드포인트는 Ghidra 프로세스에 대해 임의의 Java를 실행합니다. 헤드리스 모드에서는 서버 시작 시 OSGi `BundleHost` 초기화도 트리거합니다(Felix 프레임워크, ~수백 ms). 스크립트 실행이 필요하지 않으면 꺼두세요. |
| `GHIDRA_MCP_FILE_ROOT` | 디렉터리 경로로 설정된 경우, 파일 시스템 경로 엔드포인트(`/load_program`, `/import_file`, `/open_project`, `/delete_file` 등)는 입력을 정규화하고 이 루트 아래에 있어야 합니다. 경로 탐색을 방지합니다. |
이름 품질 강화는 보안과 별개입니다. 기본적으로 `rename_function_by_address` 및 전역 쓰기 엔드포인트는 내장 품질 게이트를 통과하지 못하는 이름을 거부하며, 구조체 필드 쓰기는 내장 필드 접두사 규칙을 적용합니다. **Edit > Tool Options > GhidraMCP HTTP Server > Strict Naming Enforcement**에서 내장 규칙 레이어를 비활성화할 수 있습니다. 동일한 Tool Options 체크박스는 `rename_data`, `rename_global_variable`, `set_global`, `apply_data_type` 접두사/타입 가드, 그리고 `create_struct`, `add_struct_field`, `modify_struct_field`의 구조체 필드 헝가리안 접두사 자동 수정을 다룹니다. 이 설정은 MCP 서버가 시작되거나 다시 시작될 때 읽힙니다. 강화가 비활성화되어도 함수/전역 규칙 경고는 여전히 반환됩니다.
### 예: 인증으로 사설 LAN에 노출```bash
export GHIDRA_MCP_AUTH_TOKEN=$(openssl rand -hex 32)
export GHIDRA_MCP_ALLOW_SCRIPTS=1 # only if your workflow needs it
export GHIDRA_MCP_FILE_ROOT=/srv/ghidra/inputs
java -jar GhidraMCPHeadless.jar --bind 0.0.0.0 --port 8089
공유 Ghidra 서버에 연결할 때 GhidraMCP가 자동으로 비밀번호 대화상자를 표시하지 않도록 할 수 있습니다. 다음 순서대로 자격 증명을 확인합니다(처음으로 비어 있지 않은 값이 사용됨):
호환성 참고: Ghidra 12.1.2 클라이언트는 Ghidra Server 12.1.2, 12.0.5 또는 더 새로운 호환 서버가 필요합니다. 이전 공유 서버는 12.1 클라이언트 업그레이드의 안전한 대상이 아닙니다.
GHIDRA_SERVER_PASSWORD 환경 변수 (또는 Ghidra 설치 디렉터리나 ~의 .env 파일)~/.ghidra-cred — 홈 디렉터리의 한 줄 비밀번호 파일<ghidra-install-dir>/.ghidra-cred사용자 이름도 유사하게 확인됩니다: GHIDRA_SERVER_USER 환경 변수 → user.name 시스템 속성.
비밀번호가 없으면 Ghidra가 일반 GUI 프롬프트를 표시합니다. 무음 인증을 활성화하려면 .env에서 설정하십시오(전체 블록은 .env.template 참조).
/run_script_inline 또는 /run_ghidra_script에 의존했다면 GHIDRA_MCP_ALLOW_SCRIPTS=1을 내보내십시오. 이는 의도된 호환성 변경입니다; 이전 기본값은 안전하지 않았습니다.원인: 플러그인이 활성화되지 않았거나 잘못 설치되었습니다.
해결 방법:
원인: 서버가 시작되지 않았거나 잘못된 포트입니다.
해결 방법:
pip install가 error: externally-managed-environment로 실패하는 경우원인: PEP 668. Debian 계열 배포판(Debian 12+, Kali, Ubuntu 23.04+)
시스템 Python을 외부 관리로 표시하므로, 전역 pip install이
apt로 관리되는 패키지를 보호하기 위해 차단됩니다.
해결 방법: 가상 환경을 사용하세요 — --break-system-packages는 절대 사용하지 마세요.
권장 경로는 uv이며, 프로젝트-로컬 .venv를 자동으로 관리합니다:```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
cd ghidra-mcp
uv run bridge-mcp-ghidra
또는 클래식한 venv:```bash
python3 -m venv .venv && source .venv/bin/activate
pip install -e .
bridge-mcp-ghidra
python -m debugger가 pybag 또는 comtypes에 대해 ModuleNotFoundError로 실패합니다.원인: 독립 실행형 디버거 서버는 기본적으로 설치되지 않는 선택적 Windows 전용 Python 종속성을 사용합니다.
해결 방법:```text uv sync --group debugger uv run python -m debugger
전역 Python과 프로젝트 venv가 모두 있는 경우, 동일한 인터프리터에 설치하고 실행해야 합니다.
### 500 내부 서버 오류
**원인:** 서버 측 예외로, 주로 누락된 프로그램 데이터로 인해 발생합니다.
**해결 방법:**
1. CodeBrowser에 바이너리가 로드되었는지 확인하세요.
2. 먼저 자동 분석 실행: **Analysis > Auto Analyze**
3. Ghidra 콘솔(**Window > Console**)에서 Java 예외 확인
4. 일부 작업은 완전히 분석된 바이너리가 필요합니다.
### 404 찾을 수 없음 오류
**원인:** 엔드포인트가 존재하지 않거나 URL이 잘못되었습니다.
**해결 방법:**
1. 엔드포인트 존재 확인: `curl http://127.0.0.1:8089/get_version`
2. 엔드포인트 이름의 오타 확인
3. 올바른 HTTP 메서드(GET 대 POST)를 사용하고 있는지 확인
### Python Ghidra 스크립트가 "No script provider found" 오류로 실패
**원인:** Ghidra 12.1.2에서는 Jython 지원이 기본적으로 활성화되지 않습니다. `.py` 스크립트는 번들된 Jython 확장이 필요합니다. Python 3 스크립트는 Ghidra Script Manager 대신 PyGhidra를 사용해야 합니다.
**해결 방법:**
1. Ghidra Front End에서 **File > Install Extensions**를 엽니다.
2. **Jython**을 체크하고 Ghidra를 재시작한 후 Script Manager를 새로고침합니다.
3. 새로운 자동화의 경우 Java Ghidra 스크립트 또는 PyGhidra를 선호하세요.
### Install Extensions에 확장이 나타나지 않음
**원인:** JAR 파일이 잘못된 위치에 있습니다.
**해결 방법:**
1. 수동 설치 위치: `~/.ghidra/ghidra_12.1.2_PUBLIC/Extensions/GhidraMCP/lib/GhidraMCP.jar`
2. 또는 **File > Install Extensions > Add**를 사용하여 ZIP 파일을 선택하세요.
3. JAR/ZIP이 사용 중인 Ghidra 버전용으로 빌드되었는지 확인하세요.
### "Ghidra dependencies not found" 오류로 빌드 실패
**원인:** Ghidra JAR이 로컬 Maven 저장소에 설치되지 않았습니다.
**해결 방법:**```text
# Windows (recommended)
python -m tools.setup install-ghidra-deps --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
271개의 MCP 도구가 HTTP 엔드포인트로 제공되며, 카탈로그 카테고리별로 그룹화되었습니다. python -m tools.gen_readme_api_reference --write에 의해 tests/endpoints.json에서 생성되었습니다. 런타임 시 /mcp/schema의 라이브 스키마가 권위를 갖습니다. 사용 패턴: docs/prompts/TOOL_USAGE_GUIDE.md.
analysis_status - 열려 있는 프로그램의 자동 분석 상태 가져오기close_program - 프로젝트 경로 또는 이름으로 열려 있는 프로그램 닫기create_property_map - 주소로 키가 지정된 타입 값 저장을 위한 사용자 속성 맵 생성delete_property_map - 사용자 속성 맵과 그 안의 모든 값 삭제exit_ghidra - 저장 후 Ghidra 종료get_address_spaces - 프로그램의 모든 물리적 및 오버레이 주소 공간 나열 (오버레이는 is_overlay 플래그와 overlayed_space 이름 포함)get_current_program_info - 현재 프로그램 정보 가져오기get_language_metadata - 프로그램의 언어 설명 덤프: 주소 공간, 레지스터, 기본 심볼, 엔디언, 포인터 크기 (이슈 #192)get_program_options - 프로그램 옵션 그룹의 모든 옵션을 타입, 현재 값, 기본값, 설명과 함께 읽기get_property - 속성 맵의 주소에 저장된 값 읽기import_file - 디스크에서 현재 Ghidra 프로젝트로 바이너리 파일 가져오기 및 열기list_open_programs - 열려 있는 프로그램 나열create_folder - 프로젝트에 폴더 생성delete_file - 프로젝트에서 파일 삭제delete_project - Ghidra 프로젝트 삭제list_projects - 사용 가능한 Ghidra 프로젝트 나열move_file - 파일을 다른 프로젝트 폴더로 이동move_folder - 폴더를 다른 위치로 이동project_info - 실행 중인 도구 및 열린 프로그램을 포함한 상세 프로젝트 정보 가져오기독립형 헤드리스 서버(GhidraMCPHeadlessServer)에서 사용 가능합니다.
archive_project - 현재 열려 있는 프로젝트를 Ghidra 네이티브 .gar 파일로 아카이브checkin_program - 열려 있는 프로그램을 새 버전으로 공유 Ghidra 서버에 체크인close_project - 현재 열려 있는 프로젝트 닫기create_project - 새 Ghidra 프로젝트 생성export_program - 열려 있거나 프로젝트에 있는 프로그램을 Ghidra Zip 파일(.gzf)로 내보내기get_project_info - 현재 열려 있는 프로젝트에 대한 정보 가져오기import_program - Ghidra Zip 파일(.gzf)을 현재 열려 있는 프로젝트에 target_folder(기본값 '/') 아래 새 DomainFile로 가져오기load_program - 분석을 위해 헤드리스 서버에 바이너리 파일 로드load_program_from_project - Ghidra 프로젝트에서 프로그램 로드 (헤드리스)open_project - 기존 Ghidra 프로젝트(.gpr 파일 또는 디렉터리) 열기restore_project - Ghidra .gar 아카이브를 parent_dir/project_name의 새 디스크 프로젝트로 복원list_bookmarks - 북마크 나열list_calling_conventions - 사용 가능한 호출 규약 나열list_classes - 네임스페이스/클래스 이름 나열list_data_items - 정의된 데이터 나열list_data_items_by_xrefs - 교차 참조 수로 정렬된 데이터 나열list_exports - 내보낸 심볼 나열list_external_locations - 외부 위치 나열list_functions - 주소와 함께 함수 나열list_functions_enhanced - 메타데이터와 함께 함수 나열list_globals - 전역 변수 나열list_imports - 가져온 심볼 나열list_methods - 페이지네이션과 함께 모든 함수 이름 나열list_namespaces - 모든 네임스페이스 나열get_current_address - 커서 주소 가져오기 (GUI 전용)get_current_function - 커서 위치의 함수 가져오기 (GUI 전용)get_current_selection - CodeBrowser 리스팅에서 강조 표시된 주소 범위 가져오기 (GUI 전용)get_entry_points - 프로그램 진입점 가져오기get_enum_values - 열거형 값 가져오기get_external_location - 외부 위치 세부 정보 가져오기get_full_call_graph - 전체 호출 그래프 가져오기get_function_by_address - 주소의 함수 가져오기get_function_call_graph - 호출 그래프 가져오기get_function_callees - 호출된 함수 가져오기get_function_callers - 호출하는 함수 가져오기get_function_count - 로드된 프로그램의 함수 수 반환find_similar_functions - 유사한 함수 찾기search_byte_patterns - 바이트 패턴 검색search_data_types - 데이터 타입 검색search_functions - 이름으로 함수 검색search_functions_enhanced - 고급 함수 검색search_strings - 정규식/부분 문자열 패턴으로 정의된 문자열 검색decompile_function - 함수 디컴파일disassemble_bytes - 바이트 범위 디스어셈블disassemble_function - 함수 디스어셈블force_decompile - 새로고침 디컴파일 강제 실행add_function_tag - 함수에 하나 이상의 태그 첨부batch_add_function_tags - 한 트랜잭션으로 여러 함수에 태그 첨부batch_remove_function_tags - 한 트랜잭션으로 여러 함수에서 태그 분리clear_flow_and_repair - 시드 범위에서 Ghidra의 GUI 'Clear Flow and Repair' 작업 실행: 시드에서 도달 가능한 명령어 흐름을 지운 후 함수 본문을 수리하고 유지된 흐름을 재디스어셈블 (ClearFlowAndRepairCmd, clear_data=false, clear_labels=false, repair=true)create_function_tag - 선택적 주석과 함께 프로그램 전체 함수 태그 정의 생성delete_function_tag - 프로그램 전체 함수 태그 정의 삭제get_function_tags - 특정 함수에 할당된 모든 태그 나열list_class_members - C++ 클래스의 멤버 함수 나열list_function_tags - 사용 횟수와 함께 모든 프로그램 전체 함수 태그 정의 나열remove_function_tag - 함수에서 하나 이상의 태그 분리search_functions_by_tag - 지정된 태그가 첨부된 모든 함수 나열add_memory_reference - 자동 분석기가 추론할 수 없는 두 메모리 주소 간 사용자 정의 교차 참조 생성 (런타임에 채워지는 포인터 테이블, vtable, 늦게 바인딩된 함수 포인터, 누락된 점프/스위치 테이블)get_bulk_xrefs - 여러 주소에 대한 교차 참조 가져오기get_function_xrefs - 함수 교차 참조 가져오기get_xrefs_from - 주소에서 나가는 참조 가져오기get_xrefs_to - 주소로 들어오는 참조 가져오기remove_reference - 한 주소에서 다른 주소로의 메모리 교차 참조 제거 — add_memory_reference의 역연산add_struct_field - 구조체 필드 추가analyze_global_completeness - 예산 제약하에 0-100 척도로 전역 변수의 문서 완전성 점수 매기기 — analyze_function_completeness의 데이터 주소 유사체apply_data_type - 데이터 타입 적용audit_global - 전역 변수의 문서 상태 감사audit_globals_in_function - 한 번의 호출로 함수 내에서 참조된 모든 전역 변수 감사batch_set_variable_types - 여러 변수 타입 설정clone_data_type - 데이터 타입 복제create_array_type - 배열 타입 생성create_data_type_category - 데이터 타입 카테고리 생성create_enum - 열거형 생성create_function_signature - 함수 시그니처 타입 생성create_pointer_type - 포인터 타입 생성batch_create_labels - 여러 레이블 생성batch_delete_labels - 여러 레이블 삭제batch_rename_function_components - 함수 구성 요소 배치 이름 변경create_label - 레이블 생성delete_label - 주소의 레이블 삭제rename_data - 데이터 심볼 이름 변경rename_external_location - 외부 위치 이름 변경rename_function - 이름으로 함수 이름 변경rename_function_by_address - 주소로 함수 이름 변경rename_global_variable - 전역 변수 이름 변경rename_label - 레이블 이름 변경rename_or_label - 레이블 이름 변경 또는 생성rename_variable - 함수 내 변수 이름 변경batch_set_comments - 여러 주석 설정clear_function_comments - 함수의 모든 주석 지우기delete_bookmark - 북마크 삭제get_comment - 모든 주소(데이터 주소 포함)에서 리스팅 주석(plate/pre/eol/post/repeatable) 가져오기 (get_plate_comment는 함수가 필요함)get_plate_comment - 플레이트 주석 가져오기set_bookmark - 북마크 설정set_comment - 모든 주소(데이터 주소 포함)에 지정된 종류(plate/pre/eol/post/repeatable)의 리스팅 주석 설정set_decompiler_comment - PRE_COMMENT 설정set_disassembly_comment - EOL_COMMENT 설정set_plate_comment - 플레이트 주석 설정analyze_api_call_chains - API 호출 체인 분석analyze_call_graph - 함수 호출 그래프 패턴 분석analyze_control_flow - 제어 흐름 분석analyze_data_region - 데이터 영역 분석analyze_dataflow - 함수를 통한 값 전파 추적 (PCode 그래프, 순방향/역방향)analyze_for_documentation - 복합 RE 문서 분석 (디컴파일 + 분류 + 변수 + 완전성)analyze_function_complete - 포괄적인 단일 호출 함수 분석analyze_function_completeness - 문서 완전성 분석analyze_struct_field_usage - 구조체 필드 사용 분석apply_data_classification - 데이터 분류 적용batch_analyze_completeness - 여러 함수의 완전성 배치 분석batch_apply_documentation - 한 번의 호출로 함수에 모든 문서 적용archive_ingest_function - 단일 함수의 문서를 교차 버전 아카이브(bsim Postgres의 re_kb.functions)에 수집archive_ingest_program - 프로그램의 모든 함수를 교차 버전 문서 아카이브에 대량 수집batch_string_anchor_report - 소스 파일 문자열과 해당 FUN_* 함수의 보고서bulk_fuzzy_match - 대량 교차 바이너리 함수 매칭find_similar_functions_fuzzy - 교차 바이너리 퍼지 함수 매칭merge_program_documentation - 대량 병합: 모든 RE 문서(함수 이름, 시그니처, 플레이트 주석, EOL/PRE/POST 명령어 주석, 기본값이 아닌 레이블 및 전역 심볼)를 일치하는 주소에서 한 프로그램에서 다른 프로그램으로 복사apply_function_documentation - 함수 문서 적용check_connection - 상태 확인 엔드포인트compare_programs_documentation - 프로그램 간 문서 비교convert_number - 숫자 간 변환diff_functions - 두 함수 차이 비교find_undocumented_by_string - 문자열을 참조하는 미문서 함수 찾기get_bulk_function_hashes - 대량 함수 해시 가져오기get_function_documentation - 함수 문서 내보내기get_function_hash - 함수 해시 가져오기get_function_signature - 함수 특징 시그니처 가져오기get_metadata - 프로그램 메타데이터 가져오기get_version - 플러그인 버전 가져오기emulate_function - 제어된 레지스터/메모리 입력으로 단일 함수 에뮬레이션emulate_hash_batch - API 해시 해결을 위한 무차별 대입run_ghidra_script - 출력 캡처와 함께 스크립트 실행run_script_inline - 인라인 스크립트 코드 실행server_admin_set_permissions - 리포지토리에 사용자 권한 설정server_admin_terminate_all_checkouts - 폴더 내 모든 체크아웃을 재귀적으로 종료server_admin_terminate_checkout - 단일 파일의 모든 체크아웃 종료server_admin_users - 서버의 모든 사용자 나열server_authenticate - 프로그래매틱 인증을 위한 서버 자격 증명 등록server_checkouts - 폴더 내 체크아웃된 모든 파일 나열, 서버 측 체크아웃 포함server_connect - Ghidra 서버에 연결server_disconnect - Ghidra 서버 연결 해제server_repositories - 연결된 서버의 리포지토리 나열server_repository_create - 서버에 새 리포지토리 생성server_repository_file - 서버 리포지토리에서 파일 정보 가져오기server_repository_files - 서버 리포지토리 폴더의 파일 나열브리지의 WinDbg 디버거 프록시가 활성화된 Windows 호스트(GHIDRA_DEBUGGER_URL)에서는 충돌하는 이름에 _2 접미사가 붙습니다 (예: debugger_status_2).
debugger_dynamic_to_static - 현재 트레이스의 런타임 동적 주소를 정적 Ghidra 프로그램 주소로 변환debugger_interrupt - 실행 중인 대상 중단 (브레이크 인)debugger_launch - Ghidra의 Trace RMI 디버거 실행기를 통해 실행 파일 실행debugger_launch_offers - 현재 프로그램에 사용 가능한 디버거 실행/연결 옵션 나열debugger_list_breakpoints - 현재 트레이스의 모든 중단점 나열debugger_modules - 디버그된 프로세스에 로드된 모듈(DLL/EXE) 나열debugger_read_memory - 디버그된 프로세스에서 메모리 읽기debugger_registers - 현재 디버그 트레이스 스냅샷에서 CPU 레지스터 읽기debugger_remove_breakpoint - 주소의 중단점 제거debugger_resume - 디버그된 프로세스 실행 재개debugger_set_breakpoint - 트레이스의 주소에 소프트웨어 실행 중단점 설정debugger_stack_trace - 현재 스레드의 호출 스택 역추적 가져오기prompt_policy - 범위가 지정된 자동화 프롬프트 처리를 일시적으로 활성화, 비활성화 또는 쿼리debugger_* WinDbg tools when GHIDRA_DEBUGGER_URL points at the standalone debugger server.check_tools - 현재 등록되어 호출 가능한 도구를 보고합니다.connect_instance - 브릿지를 특정 Ghidra 인스턴스에 연결합니다.import_file - 디스크에서 현재 프로젝트로 바이너리를 가져와 엽니다.list_instances - 실행 중인 Ghidra MCP 인스턴스를 검색합니다 (UDS + TCP 포트 스캔).list_tool_groups - 도구 그룹과 해당 로드 상태를 나열합니다.load_tool_group - 도구 그룹의 동적 도구를 MCP 클라이언트에 등록합니다.search_tools - 전체 도구 카탈로그를 키워드로 검색합니다.unload_tool_group - 도구 그룹의 동적 도구 등록을 해제합니다.CHANGELOG.md에서 버전 기록을 확인하세요.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ AI/Automation │◄──►│ MCP Bridge │◄──►│ Ghidra Plugin │ │ Tools │ │ (bridge_mcp_ │ │ (GhidraMCP.jar) │ │ (Claude, etc.) │ │ ghidra/) │ │ │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ │ MCP Protocol HTTP REST Ghidra API (stdio/streamable-http) (localhost:8089) (Program, Listing)
### 구성 요소
- **python/bridge_mcp_ghidra/** — MCP 프로토콜을 HTTP 호출(225개 카탈로그 항목)로 변환하는 Python MCP 서버 패키지 (`ghidra-mcp-bridge` 휠로 제공, `bridge-mcp-ghidra` 콘솔 스크립트)
- **GhidraMCP.jar** — HTTP(175개 GUI 엔드포인트)를 통해 분석 기능을 제공하는 Ghidra 플러그인
- **GhidraMCPHeadlessServer** — 독립형 헤드리스 서버 — 183개 엔드포인트, GUI 불필요
- **ghidra_scripts/** — 일반적인 작업을 위한 자동화 스크립트 모음
## 🔧 개발
### 소스에서 빌드하기```bash
# Recommended: direct Python-first workflow
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup build
python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
# Version bump (updates all maintained version references atomically)
python -m tools.setup bump-version --new X.Y.Z
현재 공식 빌드 시스템은 Maven입니다. tools.setup, VS Code 작업, 문서화된 배포 흐름은 모두 pom.xml을 통해 빌드하고 아티팩트를 target/에 기록합니다. build.gradle은 직접 Ghidra/Gradle 사용자를 위한 수동 대체 수단으로 저장소에 남아 있지만, 기본 경로는 아닙니다.
대부분의 명령어에서 사용하는 공통 플래그:
배포 테스트 계층은 옵트인 방식입니다. 벤치마크 계층이 활성 Ghidra 프로젝트에서 Benchmark.dll과 BenchmarkDebug.exe를 가져오거나 초기화할 수 있기 때문입니다. 릴리스를 준비하기 전에 --test release를 사용하거나, 기기에서 모든 배포 시 라이브 벤치마크 회귀 테스트를 실행하려면 로컬 .env에 GHIDRA_MCP_DEPLOY_TESTS=release를 설정하세요. Testing and Release Regression을 참조하세요.```text
python -m tools.setup ensure-prereqs --ghidra-path "C:\ghidra_12.1.2_PUBLIC" python -m tools.setup build python -m tools.setup deploy --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup preflight --strict --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
python -m tools.setup bump-version --new X.Y.Z --tag
python -m tools.setup run-tests
python -m tools.setup --help
### 프로젝트 구조```
ghidra-mcp/
├── pyproject.toml # uv project (ghidra-mcp-bridge wheel + dependency groups)
├── python/bridge_mcp_ghidra/ # MCP server package (Python, 225 catalog entries)
├── src/main/java/ # Ghidra plugin + headless server (Java)
│ └── com/xebyte/
│ ├── GhidraMCPPlugin.java # GUI plugin (196 endpoints)
│ ├── headless/ # Headless server (183 endpoints)
│ └── core/ # Shared service layer (12 services)
├── debugger/ # Optional standalone debugger server (port 8099)
├── ghidra_scripts/ # Automation scripts for batch workflows
├── tests/ # Python unit tests + endpoint catalog
│ ├── unit/ # Catalog consistency, schema, tool function tests
│ └── endpoints.json # Endpoint specification (225 entries)
├── docs/ # Documentation
│ ├── prompts/ # AI workflow prompts (V5 documentation workflows)
│ ├── releases/ # Version release notes
│ └── project-management/ # Contributor planning docs (Gradle migration, etc.)
├── tools/setup/ # Build and deployment CLI (python -m tools.setup)
├── fun-doc/ # Internal RE curation tool — not part of the MCP plugin
│ # Priority-queue worker, LLM scoring, web dashboard.
│ # See fun-doc/README.md for details.
└── .github/workflows/ # CI/CD pipelines
Ghidra JAR은 컴파일 전에 로컬 Maven 저장소(~/.m2/repository)에 설치되어야 합니다.
이것은 기기당 한 번 설정이며, Ghidra 버전이 변경될 때 다시 해야 합니다.
-Deploy는 이제 기본적으로 이를 자동으로 설치합니다.
이 도구는 다음 사이의 버전 일관성을 강제합니다:
pom.xml (ghidra.version)--ghidra-path 버전 세그먼트 (예: ghidra_12.1.2_PUBLIC)이들이 일치하지 않으면 배포가 명확한 오류와 함께 즉시 실패합니다.
버전 불일치 오류가 발생하면 두 값을 일치시키십시오:
pom.xml → ghidra.version--ghidra-path 버전 세그먼트 (ghidra_X.Y.Z_PUBLIC)그런 다음 다시 실행하세요:```text python -m tools.setup preflight --ghidra-path "C:\ghidra_12.1.2_PUBLIC"
No Markdown content provided for translation.```text
# Windows
python -m tools.setup install-ghidra-deps --ghidra-path "C:\path\to\ghidra_12.1.2_PUBLIC"
Required Libraries (14 JARs, ~37MB):
Note: Libraries are NOT included in the repository (see
.gitignore). You must install them from your Ghidra installation before building.
Automation entry point:
python -m tools.setupis the supported setup/build/deploy/versioning interface- use
ensure-prereqs,build,deploy,preflight,clean-all, andbump-versiondirectly- these commands currently use Maven as the canonical Java build backend
GhidraMCP includes a headless server mode for automated analysis without the Ghidra GUI.
docker-compose up -d ghidra-mcp
curl http://localhost:8089/check_connection
### 헤드리스 API 워크플로우```bash
# 1. Load a binary
curl -X POST -d "file=/data/program.exe" http://localhost:8089/load_program
# 2. Run auto-analysis (identifies functions, strings, data types)
curl -X POST http://localhost:8089/run_analysis
# 3. List discovered functions
curl "http://localhost:8089/list_functions?limit=20"
# 4. Decompile a function
curl "http://localhost:8089/decompile_function?address=0x401000"
# 5. Get metadata
curl http://localhost:8089/get_metadata
Docker 환경 변수:
GHIDRA_MCP_PORT - 서버 포트 (기본값: 8089)GHIDRA_MCP_BIND_ADDRESS - 바인드 주소 (Docker 기본값: 0.0.0.0)JAVA_OPTS - JVM 옵션 (기본값: -Xmx4g -XX:+UseG1GC)자세한 기여 가이드라인은 CONTRIBUTING.md를 참조하세요.
git checkout -b feature/amazing-feature)mvn clean package assembly:single -DskipTests 또는 GHIDRA_INSTALL_DIR=/path/to/ghidra gradle buildExtension)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)이 프로젝트는 Apache License 2.0에 따라 라이선스가 부여됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
버전 기록 및 릴리스 노트는 CHANGELOG.md를 참조하세요.
이 프로젝트는 2025년 8월 LaurieWired/GhidraMCP에서 파생되었으며, 이후 상당 부분 재작성 및 확장되었습니다. 시작점이 된 LaurieWired의 원본 작업에 감사드립니다. 라이선스 표시는 NOTICE를 참조하세요.
이 프로젝트는 헌신적인 기여자들의 작업 덕분에 발전했습니다:
@heeen — 주요 기여 사항:
save_program, exit_ghidra, delete_function, create_memory_block, run_script_inline (#11)@huehuehuehueing — 주요 기여 사항:
주소 공간 접두사 지원 — 전체 엔드포인트 표면의 주소 파싱에 <space>:<hex> 구문(예: mem:1000, code:ff00) 추가, 임베디드 펌웨어와 같은 다중 공간 대상 지원 (#84, #65 종료)
선택적 program 매개변수 + 필수 매개변수 스키마 수정 — 모든 엔드포인트에서 program을 합리적인 currentProgram 폴백으로 선택적 처리, 카탈로그가 상속한 여러 필수-선택 스키마 버그 수정 (#92)
#44 시드 (데이터 타입 / 열거형 도구) — v5.0 열거형 + 구조체 강제 레이어의 동기가 된 이슈
Ghidra 팀 - 놀라운 리버스 엔지니어링 플랫폼을 제공해 주셔서 감사합니다
Model Context Protocol - 표준화된 AI 통합 프레임워크를 제공해 주셔서 감사합니다
기여자 - 테스트, 피드백 및 개선에 감사드립니다
엔터프라이즈급 안정성과 포괄적인 바이너리 분석 기능을 갖춘 프로덕션 배포 준비 완료.
| 단계 | 동작 | 예시 |
|---|
| 자동 수정 | 자동으로 적용됨 | count 필드가 uint32인 경우 → 저장 시 자동 접두사 dwCount가 추가됨 |
| 경고 | 변경은 허용되나 경고 반환 | processData → "이름은 PascalCase와 동사를 사용해야 합니다: ProcessData" |
| 거부 | 설명과 함께 변경 차단 | undefined → undefined 타입 변경 → "변경 사항 없음, 거부됨" |
| 플래그 | 기본값 | 설명 |
|---|
--transport | stdio | stdio (AI 도구), streamable-http (웹 클라이언트), sse (더 이상 사용되지 않음) |
--mcp-host | 127.0.0.1 | HTTP 전송을 위한 바인드 호스트 |
--mcp-port | — | HTTP 전송을 위한 포트 |
--lazy | off | 연결 시 기본 도구 그룹만 로드합니다. 시작 속도가 빠르지만 tools/list_changed를 지원하지 않는 MCP 클라이언트는 불완전한 도구 목록을 보게 됩니다. Claude Code에는 권장되지 않습니다. |
--no-lazy | (기본값) | 연결 시 모든 도구 그룹을 즉시 로드합니다. 대부분의 AI 클라이언트에 필요합니다. |
--default-groups | listing,function,program | 쉼표로 구분된 그룹으로, --lazy가 설정된 경우 연결 시 로드됩니다. |
| Flag | Default | Description |
|---|
--port | 8099 | HTTP 서버 포트 |
--host | 127.0.0.1 | 바인딩 주소 (0.0.0.0은 LAN에 노출) |
--exports-dir | — | 서수-이름 매핑을 위한 dll_exports/ 디렉터리 경로 |
--log-level | INFO | DEBUG, INFO, WARNING 또는 ERROR |
list_option_groups - 프로그램 옵션 그룹 나열 (예:list_project_files - 프로젝트 파일 나열list_properties - 속성 맵에 저장된 (주소, 값) 항목을 페이지네이션과 함께 나열list_property_maps - 사용자 정의 속성 맵 나열 — 주소별 타입 키→값 저장소open_program - 프로젝트에서 프로그램 열기reanalyze - 프로그램에 전체 자동 분석 트리거remove_program_option - 프로그램 옵션 그룹에서 옵션 제거remove_property - 속성 맵의 단일 주소에 저장된 값 제거save_all_programs - 열려 있는 모든 프로그램 저장save_program - 현재 프로그램 저장set_image_base - 프로그램의 베이스 주소 설정 (모든 주소 재베이스)set_program_option - 타입 프로그램 옵션 설정set_property - 속성 맵의 주소에 값 설정switch_program - 현재 프로그램 전환server_status - 헤드리스 서버 연결 상태 확인list_scripts - 사용 가능한 Ghidra 스크립트 나열list_segments - 메모리 세그먼트 나열list_strings - 정의된 문자열 나열get_function_jump_targets - 점프 대상 가져오기get_function_labels - 함수 내 레이블 가져오기get_function_variables - 함수의 모든 변수 나열get_struct_layout - 구조체 레이아웃 가져오기get_valid_data_types - 유효한 데이터 타입 이름 가져오기set_decompiler_variable_typeset_function_no_return - no-return 속성 설정set_function_tag_comment - 기존 프로그램 전체 함수 태그의 주석/설명 업데이트set_function_this_type - 암시적 'this' 포인터의 디컴파일러/데이터베이스 타입 설정 (x86 __thiscall/__fastcall의 ECX)set_variables - 여러 변수의 타입과 이름을 원자적으로 설정create_struct - 구조체 생성create_typedef - typedef 생성create_union - 공용체 생성delete_data_type - 데이터 타입 삭제embed_struct_field - 구조체 필드를 값으로 포함된 구조체 타입으로 교체 (예:get_data_type_size - 데이터 타입 크기(바이트) 가져오기get_type_size - 데이터 타입 크기 및 정보 가져오기import_data_types - GDT에서 데이터 타입 가져오기list_data_type_categories - 데이터 타입 카테고리 나열list_data_types - 데이터 타입 나열modify_struct_field - 구조체 필드 수정modify_struct_field_type - 이름 또는 오프셋(offset:N)으로 구조체 필드의 타입 설정move_data_type_to_category - 데이터 타입을 카테고리로 이동recreate_struct - 한 단계로 구조체 교체: 선택적으로 기존 동일 이름의 타입 제거 후 create_struct와 동일한 형태의 fields JSON으로 생성remove_struct_field - 구조체 필드 제거resize_struct - 전체 바이트 크기로 기존 구조체 확장 또는 축소resolve_duplicate_type - 단순 이름으로 중복 데이터 타입 찾기; 더 큰 정규 타입이 존재할 때 사용되지 않는 /Demangler 크기-1 스텁 삭제set_function_prototype - 함수 프로토타입 설정 (반환 타입, 매개변수 타입, 호출 규약)set_global - 전역 변수에 이름 + 타입 + 플레이트 주석 + 배열 길이를 원자적으로 적용set_local_variable_type - 변수 타입 설정set_parameter_type - 매개변수 타입 설정set_variable_storage - 변수 저장소 설정validate_data_type - 데이터 타입 구문 검증validate_data_type_exists - 데이터 타입 존재 여부 확인validate_function_prototype - 함수 프로토타입 검증rename_variables - 변수 배치 이름 변경batch_decompile - 여러 함수를 한 번에 디컴파일can_rename_at_address - 주소의 이름 변경 가능 여부 확인clear_instruction_flow_override - 흐름 오버라이드 지우기configure_analyzer - 분석 플러그인 구성create_function - 주소에 함수 생성create_memory_block - 메모리 블록 생성delete_function - 주소의 함수 삭제detect_array_bounds - 배열 경계 감지detect_crypto_constants - 암호화 상수 감지detect_malware_behaviors - 악성코드 행위 감지extract_iocs_with_context - 컨텍스트와 함께 IOC 추출find_anti_analysis_techniques - 안티 분석 기법 찾기find_code_gaps - 실행 가능 메모리에서 함수 사이의 정의되지 않은 바이트 간격 찾기find_dead_code - 죽은 코드 찾기find_next_undefined_function - 다음 정의되지 않은 함수 찾기get_assembly_context - 어셈블리 컨텍스트 가져오기get_field_access_context - 필드 액세스 컨텍스트 가져오기get_function_pcode - 함수의 원시 P-코드 덤프 (이슈 #192)inspect_memory_content - 메모리 바이트 검사list_analyzers - 사용 가능한 분석 플러그인 나열read_memory - 원시 메모리 읽기run_analysis - 현재 프로그램에서 자동 분석 실행search_instructions - 니모닉 및/또는 피연산자 부분 문자열로 명령어 검색suggest_field_names - 필드 이름 제안healthmcp_health - HTTP 서버 상태: 풀 통계, 가동 시간, 메모리, 활성 요청 수mcp_schema - 엔드포인트 메타데이터가 포함된 기계 판독 가능 API 스키마tool_goto_address - CodeBrowser 리스팅 및 디컴파일러를 특정 주소로 탐색tool_launch_codebrowser - CodeBrowser에서 파일 열기, 필요시 새 파일 실행tool_running_tools - 실행 중인 모든 Ghidra 도구 창 나열server_version_control_add - 파일을 버전 관리에 추가server_version_control_checkin - 버전 관리된 파일 체크인server_version_control_checkout - 버전 관리된 파일 체크아웃server_version_control_undo_checkout - 파일 체크아웃 취소server_version_history - 파일의 버전 기록 가져오기debugger_static_to_dynamic - 정적 Ghidra 프로그램 주소를 현재 트레이스의 런타임 동적 주소로 변환debugger_status - 디버거 상태 가져오기: 활성 트레이스, 스레드, 실행 상태, 모듈 수debugger_step_into - 다음 명령어로 단일 단계 들어가기 (호출 따름)debugger_step_out - 현재 함수 밖으로 단계 나가기 (반환까지 실행)debugger_step_over - 다음 명령어를 단계 넘기기 (호출을 따르지 않음)debugger_traces - 열려 있는 모든 디버그 트레이스 나열| 명령어 | 설명 |
|---|
ensure-prereqs | Python 종속성과 Ghidra Maven JAR을 한 번에 설치합니다. 새 기기에서는 여기서 시작하세요. |
preflight | 변경 없이 Python, 빌드 도구, Ghidra 경로 및 JAR 가용성을 검증합니다. --strict를 추가하면 네트워크 연결 가능성도 확인합니다. |
build | Maven을 통해 플러그인 JAR 및 확장 ZIP을 빌드합니다 (TOOLS_SETUP_BACKEND=gradle일 때는 Gradle 사용). |
deploy | 빌드된 확장을 Ghidra 프로필에 복사하고 자동 활성화를 위해 FrontEndTool.xml을 패치합니다. |
start-ghidra | 구성된 Ghidra 설치를 실행합니다. |
clean | Maven/Gradle 빌드 출력물(target/, build/)을 제거합니다. |
clean-all | 빌드 출력물과 로컬 캐시 아티팩트(.m2 Ghidra JAR 등)를 제거합니다. |
install-ghidra-deps | Ghidra JAR만 ~/.m2에 설치합니다. 빌드 환경이 변경될 때 유용합니다. |
install-python-deps | uv sync를 통해 Python 종속성 그룹을 설치합니다. |
run-tests | Java 오프라인 테스트 스위트를 실행합니다 (실행 중인 Ghidra 필요 없음). |
verify-version | pom.xml, CHANGELOG.md, README.md에서 버전 문자열이 일관된지 확인합니다. |
bump-version --new X.Y.Z | 모든 버전 참조를 원자적으로 업데이트합니다. --tag를 전달하면 git 태그를 생성합니다. |
| 플래그 | 설명 |
|---|
--ghidra-path PATH | Ghidra 설치 디렉터리. 기본값은 .env의 GHIDRA_PATH입니다. |
--dry-run | 실행하지 않고 작업을 출력합니다. |
--force | 이미 존재해도 Ghidra JAR을 다시 설치합니다 (install-ghidra-deps, ensure-prereqs). |
--with-debugger | 디버거 Python 요구 사항을 강제 설치합니다 (Windows 전용). |
--use-debugger-toggle | .env에서 INSTALL_DEBUGGER_DEPS를 읽어 디버거 종속성을 설치할지 결정합니다. |
--test TIER | (deploy 전용) release 또는 debugger-live와 같은 라이브 배포 회귀 테스트 계층을 선택합니다. |
--strict | (preflight 전용) Maven Central 및 PyPI의 네트워크 연결 가능성도 확인합니다. |
| Library | Source Path | Purpose |
|---|
| Base.jar | Features/Base/lib/ | Core Ghidra functionality |
| Decompiler.jar | Features/Decompiler/lib/ | Decompilation engine |
| PDB.jar | Features/PDB/lib/ | Microsoft PDB symbol support |
| FunctionID.jar | Features/FunctionID/lib/ | Function identification |
| SoftwareModeling.jar | Framework/SoftwareModeling/lib/ | Program model API |
| Project.jar | Framework/Project/lib/ | Project management |
| Docking.jar | Framework/Docking/lib/ | UI docking framework |
| Generic.jar | Framework/Generic/lib/ | Generic utilities |
| Utility.jar | Framework/Utility/lib/ | Core utilities |
| Gui.jar | Framework/Gui/lib/ | GUI components |
| FileSystem.jar | Framework/FileSystem/lib/ | File system support |
| Graph.jar | Framework/Graph/lib/ | Graph/call graph analysis |
| DB.jar | Framework/DB/lib/ | Database operations |
| Emulation.jar | Framework/Emulation/lib/ | P-code emulation |
| 엔드포인트 | 메소드 | 설명 |
|---|
/load_program | POST | 분석할 바이너리 파일 로드 |
/run_analysis | POST | Ghidra 자동 분석 실행 |
/list_functions | GET | 발견된 모든 함수 목록 |
/list_exports | GET | 내보낸 심볼 목록 |
/list_imports | GET | 가져온 심볼 목록 |
/decompile_function | GET | 함수를 C 코드로 디컴파일 |
/create_function | POST | 주소에 함수 생성 |
/get_metadata | GET | 프로그램 메타데이터 가져오기 |
/create_project | POST | Ghidra 프로젝트 생성 |
/list_analyzers | GET | 사용 가능한 분석기 목록 |
/server/status | GET | Ghidra 서버 연결 확인 |
| 메트릭 | 값 |
|---|
| 버전 | 5.17.0 |
| MCP 도구 | 249개 완전 구현 |
| GUI 엔드포인트 | 196 (GhidraMCPPlugin) |
| 헤드리스 엔드포인트 | 195 (GhidraMCPHeadlessServer) |
| 컴파일 | ✅ 100% 성공 |
| 배치 효율성 | 93% API 호출 감소 |
| AI 워크플로우 | 7개의 검증된 문서 워크플로우 |
| Ghidra 스크립트 | 자동화 스크립트 포함 |
| 문서 | AI 프롬프트 포함 종합 문서 |