Security Java ★ 124

13bm/GhidraMCP

Ghidra'yı AI asistanlarıyla entegre etmek için MCP sunucusu. Bu plugin, Model Context Protocol aracılığıyla binary analizi, function incelemesi, decompilation, memory keşfi ve import/export analizi için araçlar sunarak ikili dosya analizini etkinleştirir.

Claude Desktop config.json'a ekle

{
  "mcpServers": {
    "13bm-ghidramcp": {
      "command": "node",
      "args": [
        "~/.mcp/GhidraMCP/index.js"
      ]
    }
  }
}

GhidraMCP

Build License

Ghidra'yı Model Context Protocol (MCP) aracılığıyla 70 adet ters-mühendislik aracını AI asistanlarına sunan bir Ghidra uzantısı. Bir binary dosyasını Ghidra'da açın, eklentiyi etkinleştirin ve Claude'u (veya herhangi bir MCP istemcisini) fonksiyonları decompile etme, sembolleri yeniden adlandırma, kodu açıklama ekleme, güvenlik açıklarını arama ve daha fazlasını yapmasına izin verin.

Mimari

 AI Client (Claude Desktop / CLI)
        |  stdio + MCP JSON-RPC
        v
   Go MCP Bridge  (mcp_bridge)
        |  TCP, length-prefixed JSON-RPC
        v
   Ghidra Plugin  (MCPServerPlugin)
        |
        v
   Ghidra Program API

Ghidra eklentisi (Java), Ghidra içinde bir TCP sunucusu başlatır ve Go bridge binary dosyasını otomatik olarak başlatır. Bridge, AI istemcisine MCP üzerinden JSON-RPC iletişimi kurar ve çağrıları 4 baytlık uzunluk ön ekli JSON-RPC çerçevelemesiyle yerel bir TCP soketine iletir. İsteğe bağlı API anahtarı kimlik doğrulaması TCP kanalını korur.

Özellikler

  • 70 MCP aracı -- query, mutation, analiz, malware triage, IoT/embedded güvenlik, yapı yönetimi, async decompilation ve çoklu örnek desteği kapsamında
  • Kolay kurulum -- eklenti bridge'i otomatik olarak başlatır; MCP istemcinizi yapılandırmak için MCP > Settings > Write to Claude Config kullanın
  • Platformlar arası -- Linux x86_64, Windows x86_64, macOS x86_64 ve macOS ARM64 için önceden derlenmiş bridge binary dosyaları
  • Yapılandırılabilir -- port, localhost-only binding, API-key auth, auto-start, bridge enable/disable özellikleri GhidraMCP.properties aracılığıyla
  • Çoklu örnek -- target_port kullanarak tool çağrılarını yönlendirmek için aynı anda birden fazla Ghidra penceresinde çalışın
  • Async decompilation -- büyük fonksiyonları engelleme olmadan decompile edin; sonuçları daha sonra poll'layın
  • Bağlantı yeniden deneme -- Ghidra yeniden başlarsa veya bağlantı koparsA bridge otomatik olarak yeniden bağlanır
  • Pagination -- büyük sonuç kümeleri (functions, strings, imports, ...) güvenli artımlı alma için offset/limit desteği
  • CI/CD -- otomatik derlemeler, Go + Java testleri, Ghidra entegrasyon testleri ve yeni bir Ghidra versiyonu çıktığında otomatik release

Hızlı Başlangıç

Ön Koşullar

Kurulum

  1. En son release ZIP dosyasını Releases sayfasından indirin
  2. Ghidra'da: File > Install Extensions > "+" > ZIP dosyasını seçin
  3. Ghidra'yı yeniden başlatın

Etkinleştirme

  1. Bir proje ve bir program (binary) açın
  2. File > Configure > GhidraMCP -- MCPServerPlugin'i işaretleyin
  3. Eklenti TCP sunucusunu otomatik olarak başlatır (varsayılan localhost:8765) ve bridge'i başlatır

Claude Desktop'ı yapılandırmak için MCP > Settings açın ve Write to Claude Config'e tıklayın. Diğer MCP istemcileri için Copy to Clipboard'a tıklayın ve bunu istemci yapılandırmanıza ekleyin:

{
  "mcpServers": {
    "ghidra": {
      "command": "/path/to/mcp_bridge",
      "args": ["--host", "localhost", "--port", "8765"]
    }
  }
}

Bir API anahtarı ayarladıysanız, env bloğuna ekleyin (eklenti bunu otomatik olarak yapar):

{
  "mcpServers": {
    "ghidra": {
      "command": "/path/to/mcp_bridge",
      "args": ["--host", "localhost", "--port", "8765"],
      "env": {
        "GHIDRA_API_KEY": "your-key-here"
      }
    }
  }
}

Ayrıca Ghidra'dan snippet'i alabilirsiniz: MCP > Copy MCP Config (panoya kopyalar).

Araçlar

Parametreler, türler ve örneklerle tam başvuru: TOOLS.md

Aşağıdaki tablolar hızlı bir genel bakış sunar. Detaylı parametre dokümantasyonu için TOOLS.md dosyasına bakın.

Query (1-21)

Tool Açıklama
list_functions Giriş noktaları, boyutları, dönüş türleriyle tüm fonksiyonları listeleyin
list_classes Tüm sınıfları / namespace'leri listeleyin
list_imports İçeri aktarılan sembolleri ve harici bağımlılıkları listeleyin
list_exports Dışarı aktarılan sembolleri listeleyin
list_namespaces Tüm namespace'leri listeleyin
list_data_items Tanımlı verileri listeleyin (globals, constants, arrays, structs)
list_strings İsteğe bağlı substring filtresine sahip string'leri listeleyin
search_functions_by_name Fonksiyonları ad substring'ine göre arayın
get_function_by_address Bir adresteki fonksiyon için detaylı info
get_current_address Ghidra'da şu anda seçili adres
get_current_function Cursor konumundaki fonksiyon
decompile_function Ada göre C pseudocode'e decompile edin
decompile_function_by_address Adrese göre C pseudocode'e decompile edin
disassemble_function Bir fonksiyon için ham assembly listesi
get_xrefs_to Bir adrese GELEN cross-references
get_xrefs_from Bir adresten GIDEN cross-references
get_function_xrefs Bir fonksiyon için tüm xrefs (callers + callees)
get_program_info Program metadatası (arch, compiler, format, vb.)
get_memory_map Segment izinleriyle bellek düzeni
get_variables Bir fonksiyon için parametreler ve locals

Mutation (22-38)

Tool Açıklama
rename_function Bir fonksiyonu ada göre yeniden adlandırın
rename_function_by_address Bir fonksiyonu adrese göre yeniden adlandırın
rename_data Bir veri etiketini yeniden adlandırın
rename_variable Yerel bir değişkeni yeniden adlandırın
set_decompiler_comment Decompiler görünümü için yorum ayarlayın
set_disassembly_comment Assembly görünümü için yorum ayarlayın
set_function_prototype Tam fonksiyon prototype'ını ayarlayın
set_local_variable_type Bir değişkenin veri türünü değiştirin
set_bookmark Bir bookmark ekleyin
remove_bookmark Bir bookmark'i kaldırın
set_equate Bir scalar operand'a adlı sabit ayarlayın
create_structure Bir structure veri türü oluşturun
create_enum Bir enum veri türü oluşturun
apply_data_type Bir adrese veri türü uygulayın
set_namespace Bir fonksiyon için namespace veya class ayarlayın
set_calling_convention Bir fonksiyon için calling convention ayarlayın
set_image_base Image base adresini ayarlayın
set_memory_permissions Bellek bloku izinlerini değiştirin

Gelişmiş Analiz (39-45)

Tool Açıklama
patch_bytes Bir adresteki ham byte'ları yamayın
get_basic_blocks Bir fonksiyon için basic block'ları alın
extract_api_call_sequences Güvenlik analizi için API çağrı dizilerini çıkartın
identify_user_input_sources Kullanıcı girdisi giriş noktalarını bulun
generate_call_graph Hiyerarşik call graph oluşturun
identify_crypto_patterns Crypto implementasyonlarını algılayın
find_obfuscated_strings Obfuscate edilmiş string'leri bulun

Malware Analizi (46-53)

Tool Açıklama
search_bytes Byte pattern'leri arayın
emulate_function Bir fonksiyonu emüle edin
extract_iocs Compromise indicators'ı çıkartın
find_dynamic_api_resolution Dynamic API resolution'ını algılayın
detect_anti_analysis Anti-analysis tekniklerini algılayın
add_external_function Harici fonksiyon referansı ekleyin
get_pe_info PE header detayları
get_elf_info ELF header detayları

IoT / Embedded Güvenlik (54-59)

Tool Açıklama
create_memory_block Bir bellek bloku oluşturun
detect_security_mitigations Binary güvenlik mitigasyonlarını algılayın
find_format_string_vulns Format-string vulnerabilities'lerini bulun
find_rop_gadgets ROP gadget'larını bulun
detect_control_flow_flattening Control-flow flattening'i algılayın
mark_code_coverage Kod coverage bölgelerini işaretleyin

Utility (60-62)

Tool Açıklama
get_bookmarks Bookmark'leri listeleyin (isteğe bağlı adrese göre)
list_equates Tüm equate'leri listeleyin
ping Bağlantı sağlık kontrolü

Çoklu Örnek (63)

Tool Açıklama
list_ghidra_instances 8765-8774 portlarını çalışan Ghidra örnekleri için tarayın

Tüm araçlar, çağrıları belirli bir Ghidra örneğine yönlendirmek için isteğe bağlı target_port parametresini kabul eder. Bu, ayrı Ghidra pencerelerinde açılan birden fazla binary dosyasıyla aynı anda çalışmanıza olanak tanır.

Yapı Yönetimi (64-68)

Tool Açıklama
get_structure Bir structure'ın tüm detaylarını alın (fields, offsets, types)
list_structures Tüm tanımlı structure'ları pagination ile listeleyin
edit_structure Bir structure'a field ekleyin, değiştirin, silin, değiştirin veya temizleyin
rename_structure Mevcut bir structure'ı yeniden adlandırın
delete_structure Bir structure veri türünü silin

Async Decompilation (69-70)

Tool Açıklama
decompile_function_async Büyük bir fonksiyonun async decompilation'ını başlatın (task ID döndürür)
get_decompile_result Task ID'sine göre async decompilation sonucunu poll'layın

Async decompilation, decompile etmesi 30+ saniye alabilen büyük fonksiyonlar için faydalıdır. İstemci decompilation'ı başlatabilir, diğer işleri devam ettirebilir ve sonucu daha sonra poll'layabilir.

Yapılandırma

Eklenti ayarlarını Ghidra'nın kullanıcı ayarları dizininde GhidraMCP.properties dosyasında depolar:

Özellik Varsayılan Açıklama
port 8765 Java sunucusu için TCP portu
localhost_only true Yalnızca localhost'a bağlanın
api_key (boş) Bridge kimlik doğrulaması için paylaşılan gizli
auto_start true Eklenti yüklendiğinde sunucuyu başlatın
bridge_enabled true Go bridge binary dosyasını otomatik olarak başlatın

Ayarlar İletişim Kutusu

Tüm özellikleri GUI aracılığıyla yapılandırmak için Ghidra menüsünde MCP > Settings açın. İletişim kutusu şunları içerir:

  • Port, localhost binding, API anahtarı, auto-start ve bridge enabled için düzenlenebilir alanlar
  • Kriptografik olarak rastgele 32 karakterli bir API anahtarı oluşturmak için Generate düğmesi
  • GhidraMCP'yi Claude Desktop'ın claude_desktop_config.json dosyasına birleştirmek için Write to Claude Config düğmesi
  • Manuel kurulum için MCP config JSON snippet'ini panoya kopyalamak üzere Copy to Clipboard düğmesi
  • API anahtarı olmadan uzaktan erişimi etkinleştirirseniz güvenlik uyarısı
  • Sunucu çalışırken kaydetmek istiyorsanız otomatik yeniden başlatma istemi

Değişiklikler OK'a tıkladığınızda diske kaydedilir. Ayrıca özellikleri dosyasını iletişim kutusunda gösterilen yolda doğrudan düzenleyebilirsiniz.

auto_start false ise, sunucuyu Ghidra menüsünden MCP > Toggle Server seçerek el ile başlatın.

Not: bridge_enabled ayarı, bridge binary dosyasında hata ayıklayan veya TCP'ye doğrudan konuşan özel bir MCP istemcisi olan geliştiriciler için ileri seviyelerde kullanılır. Çoğu kullanıcı bunu etkin tutmalıdır.

Güvenlik

Varsayılan olarak TCP sunucusu yalnızca localhost'a bağlanır ve API anahtarı yoktur, bu da yerel tek kullanıcılı kullanım için uygundur. Daha sıkı kurulumlar için:

API Anahtarı Kimlik Doğrulaması

  1. MCP > Settings açın ve rastgele bir anahtar oluşturmak için Generate'ye tıklayın (veya kendi anahtarınızı yazın)
  2. Kaydetmek için OK'a tıklayın -- bridge, sonraki başlamada anahtarı otomatik olarak alır
  3. Bağlantıda, bridge diğer çağrılardan önce anahtarla bir authenticate isteği gönderir
  4. Sunucu kimlik doğrulama başarılı olana kadar tüm auth dışı istekleri reddeder
  5. 3 başarısız denemeden sonra sunucu bağlantıyı sonlandırır

API anahtarı bridge'e GHIDRA_API_KEY ortam değişkeni aracılığıyla iletilir (CLI flag'i olarak değil) ve işlem argüman listesinde sızıntıyı önlemek için. Bridge'i el ile çalıştırırken ortam değişkenini ayarlayın:

# Linux/macOS
export GHIDRA_API_KEY="your-key-here"
./mcp_bridge --host localhost --port 8765

# Windows (PowerShell)
$env:GHIDRA_API_KEY = "your-key-here"
.\mcp_bridge.exe --host localhost --port 8765

Bir API anahtarı ayarlandığında, Ayarlar iletişim kutusundaki Write to Claude Config ve Copy to Clipboard düğmeleri otomatik olarak anahtarı env bloğuna ekler.

Localhost Binding

localhost_only=true (varsayılan) ile sunucu yalnızca 127.0.0.1'den bağlantıları kabul eder. Uzaktan erişime ihtiyacınız varsa false olarak ayarlayın (örn. headless sunucu üzerinde Ghidra), ancak localhost'un ötesine port açarken her zaman bir API anahtarı kullanın.

Uzaktan / Headless Kurulum

GhidraMCP, başka bir makinede çalışan AI istemcilerine hizmet verebilir. Bu, Ghidra bir headless analiz sunucusunda çalışırken AI istemcisi başka bir yerde çalışıyorsa faydalıdır.

  1. MCP > Settings açın
  2. Uzaktan bağlantıları kabul etmek için Localhost Only'nin işaretini kaldırın
  3. Bir API anahtarı oluşturmak için Generate'ye tıklayın (uzaktan erişim için her zaman birini kullanın)
  4. OK'a tıklayın ve sunucuyu yeniden başlatın

Uzak makinede, MCP istemcisini Ghidra host'una işaret edecek şekilde yapılandırın:

{
  "mcpServers": {
    "ghidra": {
      "command": "/path/to/mcp_bridge",
      "args": ["--host", "ghidra-server.local", "--port", "8765"],
      "env": {
        "GHIDRA_API_KEY": "your-key-here"
      }
    }
  }
}

Uyarı: Sunucuyu localhost'un ötesine açarken her zaman bir API anahtarı kullanın. Kimlik doğrulama olmadan, porta ulaşabilen herkesA Ghidra API'sine tam erişime sahiptir.

Kaynaktan Derleme

git clone https://github.com/13bm/GhidraMCP.git
cd GhidraMCP

Go bridge'i derleyin

cd mcp-bridge
go build -o mcp_bridge .
cd ..

Ghidra uzantısını derleyin

export GHIDRA_INSTALL_DIR=/path/to/ghidra
gradle buildExtension

Uzantı ZIP dosyası dist/ dizininde olacaktır.

Testleri çalıştırın

# Go testleri
cd mcp-bridge && go test ./... -v && cd ..

# Java unit + integration testleri (headless Linux'ta Xvfb gereklidir)
xvfb-run gradle test -PGHIDRA_INSTALL_DIR=$GHIDRA_INSTALL_DIR

CI/CD

Proje, otomatik derlemeler ve release'ler için GitHub Actions'ı kullanır:

  • build.yml -- master branch'e push/PR ve tag'ler üzerinde tetiklenir. Go testlerini çalıştırır, bridge'i 4 platform için çapraz derler, Xvfb altında Java unit + Ghidra entegrasyon testlerini çalıştırır, uzantı ZIP'ini derler ve v* tag'lerinde GitHub Releases oluşturur.
  • check-ghidra-release.yml -- Günlük çalışır. Yeni Ghidra release'lerini algılar, bir version-bump PR açar, GitHub App aracılığıyla otomatik olarak onaylar ve tüm testler geçerse otomatik olarak birleştirir.

Katkıda Bulunma

Katkılar hoş karşılanır! Lütfen issue açın veya pull request gönderin.

  1. Repository'yi fork'layın
  2. Bir feature branch oluşturun: git checkout -b feature/my-feature
  3. Değişikliklerinizi commit'leyin
  4. Push'layın ve Pull Request açın

Lisans

Apache License 2.0

Teşekkürler


GhidraMCP, NSA veya Ghidra projesiyle bağlantılı değildir ve onaylanmamıştır.

Benzer MCP sunucuları

mrexodia/ida-pro-mcp Security

IDA Pro için MCP sunucusu, AI asistanları ile binary analiz yapmanızı sağlar. Plugin decompilation, disassembly işlemlerini gerçekleştirir ve malware analiz raporlarını otomatik olarak oluşturmanıza imkan tanır.

mrexodia/ida-pro-mcp ★ 9,564
LaurieWired/GhidraMCP Security

Ghidra için bir Model Context Protocol sunucusu olup LLM'lerin uygulamaları özerk şekilde ters mühendislik yapmasını sağlar. Binary dosyaları derlemesini açma, metod ve veri adlandırma, metod/sınıf/import/export listeleme araçlarını sunar.

LaurieWired/GhidraMCP ★ 9,310
zinja-coder/jadx-ai-mcp Security

JADX-AI-MCP, JADX decompiler için bir plugin ve MCP Server olup Model Context Protocol (MCP) ile entegre edilerek Claude gibi LLM'lerle canlı reverse engineering desteği sağlar.

zinja-coder/jadx-ai-mcp ★ 2,350
beelzebub-labs/beelzebub Security

Beelzebub, MCP kullanarak honeypot araçları oluşturmanızı sağlayan bir framework'tür. Prompt injection ve kötü niyetli agent davranışlarını tespit etmek için tasarlanmıştır. Temel konsept, agente normal çalışmasında asla kullanmayacağı araçlar sunarak tehditli aktiviteleri yakalamaktır.

beelzebub-labs/beelzebub ★ 2,054
safedep/vet Security

vet-mcp, yapay zeka kodlama araçları tarafından önerilen npm ve PyPI paketleri gibi açık kaynak paketleri güvenlik açıkları ve kötü amaçlı kodlar açısından kontrol eder. Docker üzerinde veya bağımsız bir binary olarak yerel olarak çalışarak hızlı ve otomatik doğrulama sağlar.

safedep/vet ★ 1,080
semgrep/mcp Security

AI ajanlarının Semgrep kullanarak kodda güvenlik açıklarını taramasına izin verir.

semgrep/mcp ★ 672
Daha fazla: Security →