Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
JNISleuth-MCP — Автоматизированное восстановление RegisterNatives в Android JNI, реконструкция типов для stripped ARM64 .so, деобфускатор OLLVM BR X8 и универсальный мост LLM/MCP для Jadx, Ghidra и IDA Pro 9.0. | Kitploit
Инструменты/GitHubGitHub/nighthawkk/jnisleuth-mcp
Безопасность AndroidСтатический анализДинамический анализ (песочница)Обратная инженерияАнализ вредоносных программМобильная безопасностьАнализ Бинарных ФайловОбратная Разработка с Помощью ИИ
GitHubnighthawkk/jnisleuth-mcp

JNISleuth-MCP

Автоматизированное восстановление RegisterNatives в Android JNI, реконструкция типов для stripped ARM64 .so, деобфускатор OLLVM BR X8 и универсальный мост LLM/MCP для Jadx, Ghidra и IDA Pro 9.0.

2362 дней назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

🕵️‍♂️ JNISleuth-MCP

Преодолейте разрыв между Java и нативным кодом в реверс-инжиниринге Android.
Автоматическое восстановление RegisterNatives, реконструкция типов в очищенных ARM64 .so и единый MCP-сервер Jadx + Ghidra или IDA для анализа вредоносного ПО с помощью ИИ.

Platform Ghidra MCP Native Engine License

Быстрый старт • Как это работает • Инструменты MCP • Стелс-агент Dobby • План развития


⚡ Почему JNISleuth-MCP?

Современное Android-вредоносное ПО, банковские трояны, шпионское ПО и коммерческие упаковщики скрывают свою основную логику (шифрование C2, вывод ключей, проверки окружения и эксплойт-рутины) внутри очищенных нативных библиотек C/C++ (lib*.so).

При реверс-инжиниринге через границу JNI аналитики сталкиваются с тремя препятствиями:

  1. Разорванные перекрёстные ссылки: методы native, объявленные в classes.dex, не используют стандартные символы Java_com_pkg_Class_method. Вместо этого они динамически связываются во время выполнения внутри обфусцированного JNI_OnLoad через JNIEnv->RegisterNatives().
  2. Слепая декомпиляция: открытие очищенного .so в Ghidra или IDA показывает тысячи безымянных функций sub_XXXX, где вызовы vtable JNIEnv* выглядят как сырая арифметика указателей ((**(code **)(*param_1 + 0x538))(param_1, param_2)).
  3. Разрозненный контекст ИИ: существующие MCP-серверы Ghidra и Jadx работают изолированно — LLM не может проследить поток данных от Android BroadcastReceiver в Java прямо в ARM64-рутину шифрования в libnative-lib.so.

JNISleuth-MCP устраняет переключение контекста. Он автоматически восстанавливает статические и динамические привязки RegisterNatives, переопределяет типы очищенных ARM64-функций в Ghidra и предоставляет единый унифицированный сервер Model Context Protocol (MCP), связывающий байткод DEX с нативным ассемблером.

ВозможностьСтандартные MCP Jadx / GhidraJNISleuth-MCP
Разрешение стандартных экспортов Java_*✅✅
Статическое восстановление очищенных структурных массивов RegisterNatives (.rodata / .data.rel.ro + CFG JNI_OnLoad)❌✅
Стелс-сбор RegisterNatives на устройстве через Dobby (обходит проверки анти-Frida)❌✅
Автоматическое применение типов vtable JNIEnv* и реконструкция Call*Method / GetStringUTFChars в Ghidra❌✅
Кросс-граничный поток данных одним вызовом (Java Caller ➔ JNI Bridge ➔ Decompiled ARM64 C++)❌✅

🏗️ Архитектура и как это работает

flowchart LR
    subgraph Input["📦 Target APK / Malware"]
        DEX["classes*.dex"]
        ELF["Stripped lib/*.so (ARM64)"]
    end

    subgraph Harvester["🔍 Stage 1: JNI Bridge Harvester"]
        StaticScan["Static ELF & DEX Scanner\n(LIEF + Capstone + Heuristic Triplets)"]
        DobbyAgent["Stealth Native Agent\n(C++ / NDK / Dobby Inline Hook)"]
    end

    subgraph GhidraEngine["⚙️ Stage 2: Ghidra Headless Reconstructor"]
        Renamer["Function Renamer & Signature Applier"]
        VTable["JNIEnv* VTable & Struct Propagator"]
    end

    subgraph MCPServer["🤖 Stage 3: Unified FastMCP Server"]
        CrossGraph["Cross-Boundary Callgraph\n(Jadx Java + Ghidra C/ARM64)"]
        CallbackTrace["Upcall Tracer\n(Native -> Java Reflection)"]
    end

    DEX --> StaticScan
    ELF --> StaticScan
    ELF -. "Packed / OLLVM?" .-> DobbyAgent
    StaticScan --> Renamer
    DobbyAgent -- "register_natives.json" --> Renamer
    Renamer --> VTable
    VTable --> CrossGraph
    VTable --> CallbackTrace

🎬 Посмотрите в действии

1. Восстановление статических и динамических RegisterNatives через CLI

Запустите jnisleuth scan для APK с обфусцированными нативными библиотеками:

$ jnisleuth scan --apk samples/banker_dropper.apk --arch arm64-v8a

[*] Parsing 3 DEX files... Found 14 declared `native` methods across 4 classes.
[*] Inspecting lib/arm64-v8a/libcore-crypto.so (Stripped ELF, 0 exported Java_* symbols)
[*] Running static JNINativeMethod triplet scanner on .rodata / .data.rel.ro...
    [+] Resolved 11/14 methods via static struct table @ 0x0004d210
[!] 3 methods unresolved (constructed dynamically on stack in JNI_OnLoad).
[*] Launching headless Dobby collector on device (emulator-5554)...

┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━┓
┃ Java Class & Method                      ┃ JNI Signature        ┃ .so Offset (ARM64)  ┃ Resolution Mode  ┃
┡━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━┩
│ com.dropper.Core#initEngine              │ (Landroid/content/.. │ libcore.so+0x001a40 │ Static (.rodata) │
│ com.dropper.Core#decryptPayload          │ ([BLjava/lang/Stri.. │ libcore.so+0x0023c8 │ Static (.rodata) │
│ com.dropper.Core#signC2Beacon            │ (Ljava/lang/String.. │ libcore.so+0x003f10 │ Dynamic (Dobby)  │
│ com.dropper.net.SocketBridge#connectRaw  │ (Ljava/lang/String.. │ libcore.so+0x004890 │ Dynamic (Dobby)  │
└──────────────────────────────────────────┴──────────────────────┴─────────────────────┴──────────────────┘
[+] Synced 14 function signatures and JNIEnv* types to Ghidra project: banker_dropper.gpr

2. До и после в Ghidra

До JNISleuth-MCP (FUN_000123c8):

long FUN_000123c8(long *param_1, undefined8 param_2, undefined8 param_3, undefined8 param_4) {
  char *pcVar1;
  long lVar2;
  pcVar1 = (char *)(**(code **)(*param_1 + 0x548))(param_1, param_4, 0);
  lVar2 = (**(code **)(*param_1 + 0x5c0))(param_1, param_3, 0);
  sub_00014a00(lVar2, pcVar1);
  (**(code **)(*param_1 + 0x550))(param_1, param_4, pcVar1);
  return param_3;
}

После JNISleuth-MCP (Java_com_dropper_Core_decryptPayload):

jbyteArray Java_com_dropper_Core_decryptPayload(
    JNIEnv *env, jobject thiz, jbyteArray encryptedData, jstring rc4KeyStr) 
{
  const char *key_utf = (*env)->GetStringUTFChars(env, rc4KeyStr, NULL);
  jbyte *payload_bytes = (*env)->GetByteArrayElements(env, encryptedData, NULL);
  rc4_crypt_buffer(payload_bytes, key_utf);
  (*env)->ReleaseStringUTFChars(env, rc4KeyStr, key_utf);
  return encryptedData;
}

🤖 Универсальная поддержка LLM и MCP (работает с любой моделью)

JNISleuth-MCP на 100% не зависит от модели. Вы можете подключить его к любой облачной или локальной LLM через стандартный Model Context Protocol (stdio JSON-RPC 2.0) или экспортировать нативные схемы вызова функций OpenAI / Gemini / Ollama:

  • Облачные LLM и агенты: Google Gemini CLI, OpenAI / ChatGPT Desktop / Codex CLI, Cursor, Windsurf, Cline, Roo Code, Claude Desktop / Claude Code
  • Локальные / самостоятельно размещённые LLM: Ollama, vLLM, LM Studio, OpenWebUI, Continue.dev (DeepSeek-R1, Qwen-2.5-Coder, Llama-3.3)
  • Пользовательские Python Agent SDK: Прямой экспорт схем инструментов (jnisleuth llm-tools --format openai|gemini|mcp) для LangChain, LlamaIndex, LiteLLM, OpenAI SDK или google-genai.
Скачать инструмент