Skip to main content
Glama

GhidraLens

AI 클라이언트 안에서 렌더링되는 Ghidra. 심볼을 클릭해 이름을 바꾸고, 호출을 클릭해 따라가세요.

MCP Apps Ghidra 11.3+ Local models MIT

디컴파일러 뷰

지금까지의 모든 Ghidra MCP 서버는 텍스트만 반환합니다. 모델은 읽을 수 있지만, 사용자는 탐색할 수 없습니다. GhidraLens는 동일한 분석을 대화형 뷰로 반환합니다 — MCP Apps (io.modelcontextprotocol/ui) 기반, 서버가 실제 HTML을 대화에 실어 보낼 수 있게 해주는 확장 기능입니다.

사용자와 모델은 동일한 라이브 프로그램을 보고 있습니다. 변수를 클릭해 이름을 바꾸면 모델의 다음 디컴파일에 새 이름이 반영됩니다.

실제 스크린샷입니다: where.exe를 Ghidra로 디컴파일한 것으로, 모든 식별자가 출처 주소를 담고 있습니다.


제공 기능

기능

디컴파일러

Ghidra의 C 출력을 라이브 토큰 스트림으로 제공 — 모든 식별자가 주소와 종류를 담고 있습니다. 지역 변수를 클릭해 이름을 바꾸고, 호출을 클릭해 따라가세요. 호출자, 피호출자, 변수가 사이드바에 표시됩니다.

함수 브라우저

바이너리의 모든 함수를 주소, 이름, 크기 또는 호출자 수로 필터링하고 정렬할 수 있습니다. 행을 클릭하면 디컴파일합니다.

호출 그래프

왼쪽에 호출자, 오른쪽에 피호출자, 가운데에 요청한 함수가 표시됩니다. 노드를 클릭하면 다시 중앙에 배치됩니다.

함수 브라우저

함수 브라우저

호출 그래프

호출 그래프

총 10개의 도구가 있습니다. 세 개는 뷰를 열고, 나머지는 조회 및 쓰기 작업입니다. 그중 두 개는 모델이 볼 수 없습니다 — 뷰에서의 클릭이 실행할 수 있도록만 존재합니다.

Related MCP server: GhidraMCP

구성 방식

  MCP client  ──stdio──▶  server/  ──HTTP──▶  bridge/  ──JPype──▶  Ghidra (JVM)
  (Claude,                 TypeScript         PyGhidra            program stays
   Cursor, …)              MCP server         session             resident
       ▲
       │  ui:// HTML in a sandboxed iframe
       └──  ui/  three self-contained views

브리지는 의도적으로 별도의 장기 실행 프로세스입니다. Ghidra의 자동 분석이 가장 비용이 큰 단계이며, 한 번만 수행됩니다. 64KB Windows 시스템 유틸리티(198개 함수) 기준 측정값:

최초 열기 (분석 포함)

25 s

동일 바이너리 다시 열기

0.3 s

2KB 함수 하나 디컴파일

0.4 s

87노드 호출 그래프

< 0.1 s

MCP 서버나 클라이언트를 재시작해도 분석된 프로그램은 그대로 유지됩니다.

설정

사전 요구 사항: Ghidra 11.3+, JDK 21+, Python 3.9–3.13 (3.14 제외 — JPype에 아직 휠이 없습니다), Node 20+. bridge/setup.py.md를 참조하세요 — Python 쪽이 까다로우며 해당 파일에 잘못될 수 있는 모든 경우가 정리되어 있습니다. JAVA_HOME이 설정되지 않은 경우 GhidraLens가 JDK를 자동으로 찾아줍니다. 이는 흔한 "Java는 설치했지만 셸을 재시작하지 않은" 상황을 해결합니다.

git clone https://github.com/hellosverre/ghidralens
cd ghidralens
npm install
npm run build

그런 다음 살펴보려는 바이너리에서 브리지를 시작합니다:

python bridge/serve.py --binary /path/to/target.exe

토큰을 출력합니다. 해당 토큰과 빌드된 서버의 경로를 MCP 클라이언트 설정에 입력하세요:

{
  "mcpServers": {
    "ghidralens": {
      "command": "node",
      "args": ["/absolute/path/to/ghidralens/server/dist/index.js"],
      "env": {
        "GHIDRALENS_BRIDGE_URL": "http://127.0.0.1:8799",
        "GHIDRALENS_TOKEN": "paste-the-printed-token-here"
      }
    }
  }
}

그런 다음 클라이언트에 요청하세요: "라이선스 검증을 처리하는 함수를 디컴파일해 줘".

도구

도구

표시 대상

렌더링

open_binary

모델

program_info

모델

decompile

모델 + 뷰

디컴파일러

list_functions

모델 + 뷰

함수 브라우저

call_graph

모델 + 뷰

호출 그래프

find_strings

모델

xrefs_to

모델 + 뷰

rename_symbol

모델 + 뷰

add_comment

뷰 전용

save_program

모델

add_comment는 의도적으로 모델에게 숨겨져 있습니다. 표시 여부는 MCP Apps가 "에이전트가 할 수 있는 일"과 "클릭이 할 수 있는 일"을 구분하는 방식입니다. 쓰기 도구를 모델의 목록에서 제외하면 목록이 짧게 유지되고 모델이 임의로 이름을 바꾸는 것을 방지할 수 있습니다.

이름 변경과 주석은 save_program이 Ghidra 프로젝트에 기록할 때까지 메모리에 유지됩니다 — 이후에는 다른 편집과 마찬가지로 Ghidra GUI에 표시됩니다.

Ghidra 없이 뷰 개발하기

npm run dev:ui
# open http://localhost:5173/dev/harness.html

ui/dev/harness.ts실제 MCP Apps 호스트입니다 — SDK의 AppBridge를 iframe 안의 뷰에 대해 실행하므로 ui/initialize 핸드셰이크, 시작 시의 ui/notifications/tool-result, 그리고 클릭이 발생시키는 모든 tools/call이 실제 postMessage JSON-RPC를 통해 전달됩니다. 오른쪽에 메시지 추적이 있고 호스트 테마 전환 기능도 있습니다. 뷰가 두 테마 모두에서 올바르게 보여야 하기 때문입니다.

툴바에서 전환할 수 있는 두 가지 데이터 소스:

  • fixtures — Ghidra 불필요, 설치할 것 없음

  • live bridge — 실행 중인 브리지에 프록시하므로 실제 분석된 프로그램을 대상으로 개발할 수 있습니다.

무엇이든 신뢰하기 전에 live를 사용하세요. Fixtures는 깔끔합니다. 실제 출력은 지역 변수 56개를 가진 400줄짜리 함수와 87노드 호출 그래프이며, 레이아웃이 실제로 깨지는 지점이 바로 여기입니다.

로컬 모델에서 실행하기

리버스 엔지니어링은 사람들이 호스팅 모델에 보내고 싶지 않아 하는 작업이므로, agent/ollama-agent.mjs는 GhidraLens를 Ollama 뒤에 배치하는 소규모 MCP 호스트입니다. API 키가 필요 없고, 어떤 것도 머신 밖으로 나가지 않습니다.

OLLAMA_MODEL=qwen3:14b node agent/ollama-agent.mjs "what does this binary do?"

_meta.ui.visibility를 존중하므로 앱 전용 도구는 모델에게 숨겨진 상태로 유지됩니다 — 그래픽 클라이언트가 강제하는 것과 동일한 분리입니다. ~9B 모델은 find_stringslist_functions로 방향을 잡기에 충분하고, 14B 모델은 디컴파일된 C를 읽는 데 눈에 띄게 더 뛰어납니다.

테스트

스위트

Ghidra 필요

범위

node server/smoke.mjs

아니요

MCP 표면: 도구, ui:// 리소스, 도구 표시 여부, 브리지 없는 경우의 정상 실패

python bridge/test_serve.py

아니요

브리지 인증, CSRF 거부, 라우팅, 입력 검증

python bridge/test_session.py

모든 Ghidra 호출: 분석, 캐싱, 디컴파일러 토큰, 임포트, 이름 변경, 쓰기

node server/live.mjs

(브리지 실행 중)

전체 체인, 그리고 모든 페이로드가 뷰가 인덱싱하는 형태와 일치하는지 확인

처음 두 개는 CI에서 실행할 수 있는 것들입니다. test_session.pybridge/session.py를 수정한 후 가장 중요한 테스트입니다 — Ghidra API 호출이 올바른지 증명하는 유일한 테스트이며, 작성된 날 실제 버그 3개를 잡아냈습니다.

보안

브리지는 127.0.0.1에만 바인딩하고, X-GhidraLens-Token에 실행별 토큰을 요구하며, Origin 또는 Referer 헤더가 있는 모든 요청을 거부합니다 — 따라서 브라우저에 열린 페이지는 디컴파일러에 접근할 수 없습니다. 멀티유저 모델이 없으며 외부에 노출되도록 설계되지 않았습니다. --host는 루프백 외의 모든 것을 거부합니다.

바이너리를 분석하는 것은 실행을 의미하지 않지만, Ghidra는 맬웨어도 기꺼이 열어줍니다. 다른 RE 작업과 동일한 격리 조치를 사용하세요.

라이선스

MIT.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
2Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to autonomously reverse engineer binaries using Ghidra's capabilities including decompilation, function analysis, automatic renaming, and BSim integration for function similarity matching.
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Bridges Ghidra's reverse engineering capabilities with AI tools through 179 specialized tools for automated binary analysis and documentation. It supports full read/write access for function decompilation, renaming, and cross-binary documentation transfer in both GUI and headless modes.
    Apache 2.0

View all related MCP servers

Related MCP Connectors

  • Renders interactive Chart.js charts and dashboards inline in AI conversations.

  • Live browser debugging for AI assistants — DOM, console, network via MCP.

  • AI Agent with Architectural Memory. Impact analysis (free), tests and code from the graph (pro).

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/hellosverre/ghidralens'

If you have feedback or need assistance with the MCP directory API, please join our Discord server