
un agent IA entièrement autonome pour le reverse engineering
.-. ██ ██ ██ ██████ ██ ██████
(o o) ██ ██ ██ ██ ██ ██ ██
| u | ██ ██ ██ ██████ ██ ██ ███
| | ██ ██ ██ ██ ██ ██ ██ ██ ██
'~-~' █████ ██████ ██ ██ ██ ██████
autonomous reverse-engineering agent · android · binary · frida
Jurig (sundanais : fantôme) — un agent IA autonome qui hante vos binaires. Dans la TUI, le fantôme clignote, oscille et scintille pendant qu'il travaille.
Framework de reverse-engineering entièrement autonome et agentique par IA, avec une TUI. Android-first (APK/DEX) plus les binaires natifs. Écrit en Go, sans MCP — chaque outil est un wrapper de sous-processus natif autour d'un binaire RE portable.
| Préoccupation | Choix |
|---|---|
| Langage / TUI | Go + Bubble Tea + Lipgloss + Glamour (rapports markdown) |
| Agent | Boucle propre plan→action→observation (internal/agent) — aucun verrouillage de framework |
| Outils | Wrappers de sous-processus Go natifs (internal/tools) — pas de MCP |
| LLM | Un seul format de communication (protocole Messages d'Anthropic) derrière un routeur |
| Fournisseurs | anthropic (direct), openrouter (peau Anthropic), claude-cli (abonnement) |
| Outils portables | internal/portable résout les binaires embarqués → PATH ; installe depuis un catalogue |
Deux protocoles de communication derrière un seul routeur :
anthropic — API Messages native (/v1/messages).openai — OpenAI Chat Completions (/chat/completions) avec un
traducteur interne Messages↔OpenAI (appels d'outils inclus). Couvre tout
point de terminaison compatible OpenAI.Préréglages fournis (config.json → providers) :
| Fournisseur | Type | Point de terminaison | Env de clé |
|---|---|---|---|
| mimo (par défaut) | 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 (local) | openai | localhost:11434/v1 | — (local) |
| 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 (tout compatible OpenAI) | openai | vous définissez base_url | CUSTOM_API_KEY |
| claude-cli (abonnement) | claude-cli | binaire claude | — |
Choisissez fournisseur+modèle à chaud dans la TUI avec Ctrl+O, ou définissez
JURIG_PROVIDER + JURIG_MODEL, ou modifiez active dans config.json. Ajoutez des modèles
en étendant la liste models d'un fournisseur. Pointez n'importe quel fournisseur vers une autre URL de base
(par ex. une passerelle auto-hébergée) via base_url.
Ollama : ollama serve + ollama pull qwen2.5-coder:14b, puis Ctrl+O →
choisissez ollama/…. Aucune clé nécessaire.
claude-cli (abonnement Claude Code) : Anthropic bloque l'authentification par abonnement dans
les harnais HTTP tiers (avr. 2026), donc ce chemin passe par le binaire claude.
Consultation/chat uniquement — pas d'appel d'outils natif ; utilisez un fournisseur openai/anthropic
pour la boucle d'outils autonome complète.
custom — un fournisseur générique pour TOUT point de terminaison compatible OpenAI. Jurig
ne fournit aucune passerelle codée en dur ; vous remplissez vous-même l'URL de base dans l'assistant de configuration
(/setup) ou dans config.json. Fonctionne pour :
npx 9router) ou OmniRoute,
qui exposent les comptes Cursor / Claude Code / Codex sur http://localhost:20128/v1.Définissez base_url (par ex. http://localhost:20128/v1) et, si le point de terminaison en a besoin,
api_key (ou l'env CUSTOM_API_KEY / CUSTOM_BASE_URL pour l'URL). Une
passerelle localhost est considérée comme prête sans clé. Le fournisseur custom est
marqué auto_models, donc le sélecteur (Ctrl+O) récupère le catalogue en direct depuis
le /models du point de terminaison à l'ouverture — appuyez sur r pour rafraîchir la liste de n'importe quel fournisseur. Pour un
routeur d'abonnement, les identifiants de modèle portent un préfixe de route (cu/ Cursor, cc/ Claude
Code, cx/ Codex) — la liste auto-chargée affiche les identifiants exacts.
L'utilisation d'abonnements en dehors de leurs clients officiels peut violer les CGU — votre compte, votre risque.
go build -o jurig ./cmd/jurig
Aucun drapeau nécessaire. Le premier lancement (ou lorsque le fournisseur actif n'a pas de clé) lance un
assistant de configuration interactif : choisissez le fournisseur (OpenRouter / Kimi / Qwen / Ollama /
Anthropic / Abonnement Claude) → clé → modèle → pré-installation d'outils optionnelle →
enregistré dans ~/.jurig/config.json.
./jurig # premier lancement → assistant, puis TUI
./jurig setup # relancer l'assistant à tout moment
./jurig doctor # afficher l'état du fournisseur + de la chaîne d'outils
./jurig install jadx # pré-chauffer un outil (s'installe aussi automatiquement à la demande)
./jurig -p "analyze ./app.apk" # one-shot sans interface (ignore l'assistant ; nécessite une clé définie)
./jurig -target ./work/app -p "..." # épingler un répertoire de travail par cible
| Touche | Action |
|---|---|
| Entrée | exécuter l'instruction / soumettre |
| ↑ / ↓ | historique des invites |
| PgUp / PgDn | faire défiler la transcription |
| Ctrl+F | rechercher dans la transcription (Entrée = correspondance suivante) |
| Ctrl+O | changer de fournisseur / modèle |
| F1 | superposition d'aide |
| Ctrl+C | interrompre l'exécution / quitter |
Lorsque l'agent pose une question de cadrage, un menu de réponses apparaît : ↑/↓ pour naviguer, Espace ou 1-9 pour basculer (sélection multiple), Entrée pour confirmer.
Reprise de session : la conversation + l'historique des invites persistent dans
<work_dir>/session.json et se restaurent automatiquement au prochain lancement (--fresh démarre proprement).
Cartes de code : chaque fois que l'agent lit un fichier source, la TUI affiche un petit aperçu avec coloration syntaxique — le modèle reçoit toujours le fichier complet.
Reconnaissance & triage
| Outil | Objectif |
|---|---|
manifest | analyser AndroidManifest → package, permissions, composants exportés |
url_extract | extraire + dédupliquer toutes les URLs → carte API/hôte |
secret_scan | analyse catégorisée de secrets codés en dur (AWS/GCP/JWT/clés/AES…) |
native_libs | lister lib/<abi>/*.so + ABIs (surface JNI) |
search_code | grep regex sur les sources — localiser avant de lire |
ask_user | l'agent interroge l'opérateur (menu à sélection multiple) |