
ein vollständig autonomer KI-Agent für Reverse Engineering
.-. ██ ██ ██ ██████ ██ ██████
(o o) ██ ██ ██ ██ ██ ██ ██
| u | ██ ██ ██ ██████ ██ ██ ███
| | ██ ██ ██ ██ ██ ██ ██ ██ ██
'~-~' █████ ██████ ██ ██ ██ ██████
autonomous reverse-engineering agent · android · binary · frida
Jurig (sundanesisch: Geist) — ein autonomer KI-Agent, der deine Binaries heimsucht. In der TUI blinkt, wippt und schimmert der Geist, während er arbeitet.
Vollständig autonomes, KI-agentisches Reverse-Engineering-Framework mit einer TUI. Android-first (APK/DEX) plus native Binaries. In Go geschrieben, kein MCP — jedes Tool ist ein nativer Subprozess-Wrapper um eine portable RE-Binary.
| Belang | Wahl |
|---|---|
| Sprache / TUI | Go + Bubble Tea + Lipgloss + Glamour (Markdown-Berichte) |
| Agent | Eigene Plan→Act→Observe-Schleife (internal/agent) — kein Framework-Lock-in |
| Tools | Native Go-Subprozess-Wrapper (internal/tools) — kein MCP |
| LLM | Ein Wire-Format (Anthropic Messages-Protokoll) hinter einem Router |
| Provider | anthropic (direkt), openrouter (Anthropic-„Skin"), claude-cli (Abo) |
| Portable Tools | internal/portable löst gebündelte Binaries → PATH auf; installiert aus einem Katalog |
Zwei Wire-Protokolle hinter einem Router:
anthropic-Kind — native Messages-API (/v1/messages).openai-Kind — OpenAI Chat Completions (/chat/completions) mit einem
internen Messages↔OpenAI-Übersetzer (inkl. Tool-Calls). Deckt jeden
OpenAI-kompatiblen Endpunkt ab.Mitgelieferte Presets (config.json → providers):
| Provider | Kind | Endpunkt | Key-Env |
|---|---|---|---|
| mimo (Standard) | openai | token-plan-sgp.xiaomimimo.com/v1 | MIMO_API_KEY |
| anthropic | anthropic | api.anthropic.com | ANTHROPIC_API_KEY |
| openrouter | openai | openrouter.ai/api/v1 | OPENROUTER_API_KEY |
| ollama (lokal) | openai | localhost:11434/v1 | — (lokal) |
| kimi | openai | api.kimi.com/coding/v1 | KIMI_API_KEY |
| moonshot | openai | api.moonshot.ai/v1 | MOONSHOT_API_KEY |
| dashscope / Qwen (Alibaba) | openai | dashscope-intl…/compatible-mode/v1 | DASHSCOPE_API_KEY |
| custom (beliebig OpenAI-kompatibel) | openai | du setzt base_url | CUSTOM_API_KEY |
| claude-cli (Abo) | claude-cli | claude-Binary | — |
Wähle Provider+Modell live in der TUI mit Ctrl+O, oder setze
JURIG_PROVIDER + JURIG_MODEL, oder bearbeite active in config.json. Füge Modelle
hinzu, indem du die models-Liste eines Providers erweiterst. Richte jeden Provider auf eine andere Base-
URL (z. B. ein selbstgehostetes Gateway) über base_url aus.
Ollama: ollama serve + ollama pull qwen2.5-coder:14b, dann Ctrl+O →
ollama/… wählen. Kein Key nötig.
claude-cli (Claude Code-Abo): Anthropic blockiert Abo-Auth in
Drittanbieter-HTTP-Harnessen (Apr 2026), daher ruft dieser Pfad das claude-
Binary auf. Nur Advisory/Chat — kein natives Tool-Calling; nutze einen openai/anthropic-
Provider für die vollständige autonome Tool-Schleife.
custom — ein generischer Provider für JEDEN OpenAI-kompatiblen Endpunkt. Jurig
liefert kein fest verdrahtetes Gateway; du füllst die Base-URL selbst im Setup-Wizard
(/setup) oder in config.json aus. Funktioniert für:
npx 9router) oder OmniRoute,
die Cursor / Claude Code / Codex-Konten auf http://localhost:20128/v1 fronten.Setze base_url (z. B. http://localhost:20128/v1) und, falls der Endpunkt einen braucht,
api_key (oder die CUSTOM_API_KEY-Env / CUSTOM_BASE_URL für die URL). Ein
localhost-Gateway gilt ohne Key als bereit. Der custom-Provider ist
mit auto_models markiert, sodass der Picker (Ctrl+O) beim Öffnen den Live-Katalog vom
/models-Endpunkt abruft — drücke r, um die Liste jedes Providers zu aktualisieren. Bei einem
Abo-Router tragen Modell-IDs ein Route-Präfix (cu/ Cursor, cc/ Claude
Code, cx/ Codex) — die automatisch geladene Liste zeigt die exakten IDs.
Die Nutzung von Abos außerhalb ihrer offiziellen Clients kann gegen die ToS verstoßen — dein Konto, dein Risiko.
go build -o jurig ./cmd/jurig
Keine Flags nötig. Der erste Lauf (oder wenn der aktive Provider keinen Key hat) startet einen
interaktiven Setup-Wizard: Provider wählen (OpenRouter / Kimi / Qwen / Ollama /
Anthropic / Claude-Abo) → Key → Modell → optionales Tool-Pre-Install →
gespeichert in ~/.jurig/config.json.
./jurig # erster Lauf → Wizard, dann TUI
./jurig setup # Wizard jederzeit erneut ausführen
./jurig doctor # Provider- + Toolchain-Status anzeigen
./jurig install jadx # ein Tool vorwärmen (installiert auch bei Bedarf automatisch)
./jurig -p "analyze ./app.apk" # headless One-Shot (überspringt Wizard; benötigt gesetzten Key)
./jurig -target ./work/app -p "..." # ein per-Target-Arbeitsverzeichnis festlegen
| Taste | Aktion |
|---|---|
| Enter | Anweisung ausführen / absenden |
| ↑ / ↓ | Prompt-Verlauf |
| PgUp / PgDn | Transkript scrollen |
| Ctrl+F | Transkript durchsuchen (Enter = nächster Treffer) |
| Ctrl+O | Provider / Modell wechseln |
| F1 | Hilfe-Overlay |
| Ctrl+C | Lauf abbrechen / beenden |
Wenn der Agent eine Scoping-Frage stellt, erscheint ein Antwortmenü: ↑/↓ bewegen, Leertaste oder 1-9 umschalten (Mehrfachauswahl), Enter bestätigen.
Session-Resume: Die Konversation + der Prompt-Verlauf werden in
<work_dir>/session.json persistiert und beim nächsten Start automatisch wiederhergestellt (--fresh startet sauber).
Code-Karten: Immer wenn der Agent eine Quelldatei liest, zeigt die TUI eine kleine syntaxhervorgehobene Vorschau — das Modell erhält weiterhin die vollständige Datei.
Recon & Triage
| Tool | Zweck |
|---|---|
manifest | AndroidManifest parsen → Paket, Berechtigungen, exportierte Komponenten |
url_extract | alle URLs extrahieren + deduplizieren → API/Host-Map |
secret_scan | kategorisierter Scan auf hardcodierte Secrets (AWS/GCP/JWT/Keys/AES…) |
native_libs | lib/<abi>/*.so + ABIs auflisten (JNI-Oberfläche) |
search_code | Regex-Grep über Quellen — lokalisieren vor dem Lesen |
ask_user | Agent fragt den Operator (Mehrfachauswahl-Menü) |
Statisch
| Tool | Zweck |
|---|---|
jadx | APK/DEX/XAPK → Java (extrahiert Bundles automatisch, reichhaltige Zusammenfassung) |
apktool | APK → Smali + dekodiertes Manifest |
radare2 / ghidra | native Binary-Disasm / Headless-Decompile |
elf_info / pe_info | ELF/PE-Header, Symbole, Imports parsen (nativ) |
hexdump / strings | Rohbytes / druckbare Strings |
unzip | native zip/apk/xapk/apks-Extraktion (keine Shell) |
Dynamisch & Netzwerk
| Tool | Zweck |
|---|---|
adb | Gerätesteuerung |
frida_ps | Geräte-Apps/Prozesse auflisten |
frida | ein benutzerdefiniertes Frida-JS-Skript ausführen |
frida_preset | eingebaut: ssl_unpin, list_classes, dump_class, hook, trace_http |
proxy | nativer Go-MITM-Proxy (goproxy) — Live-HTTPS-Traffic erfassen |
http_request | entdeckte API-Endpunkte replayen/testen |
download | eine URL ins Arbeitsverzeichnis laden |