Interaction avec l'API Ollama Script Ghidra pour la rétro-ingénierie assistée par LLM.
Qu'est-ce que c'est?
Ce script interagit avec l'API d'Ollama pour interagir avec les grands modèles linguistiques (LLM). Il utilise l'API Ollama pour effectuer diverses tâches d'ingénierie inverse sans quitter Ghidra. Il prend en charge les instances locales et distantes d'Ollama. Ce script est inspiré de GptHidra.
Modèles pris en charge
Ce script prend en charge n'importe quel modèle pris en charge par Ollama
Ollama a également récemment ajouté la prise en charge de tous les modèles disponibles sur HuggingFace au format GGUF, par exemple :
ollama run hf.co/arcee-ai/SuperNova-Medius-GGUF
Conditions préalables
- Ghidra
- Ollama
- N'importe lequel des modèles Ollama
Configuration Ollama
N'hésitez pas à remplacer llama3.1:8b
par l'un des modèles compatibles Ollama
curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b
Maintenant, vous devriez être prêt à partir, localhost:11434
devrait être prêt à traiter les demandes
Remarque : Ce script prend également en charge les instances distantes, définissez l'adresse IP et le port lors de la première configuration.
Que peut-il faire ?
- Expliquez la fonction qui se trouve actuellement dans la fenêtre du décompilateur
- Suggérer un nom pour la fonction actuelle, nommera automatiquement la fonction si cela a été activé
- Réécrire la fonction actuelle avec les commentaires recommandés
- Réécrivez complètement la fonction actuelle, en essayant d'améliorer les noms de fonction/paramètre/variable et en ajoutant également des commentaires
- L'utilisateur peut poser une question sur une fonction
- Rechercher des bugs/suggérer des vulnérabilités potentielles dans la fonction actuelle (plus simplement pour vous assurer que vous avez tout couvert, certaines suggestions sont stupides car elles n'ont pas de contexte)
- Utilisez une version modifiée de ce script LeafBlowerLeafFunctions.py Ghidra pour automatiser l'analyse des fonctions potentielles de « feuille » telles que strcpy , memcpy , strlen , etc. dans les binaires avec des symboles supprimés, renommer automatiquement si cela est activé
- Expliquer l'instruction d'assemblage unique actuellement sélectionnée dans la fenêtre de liste
- Expliquer plusieurs instructions d'assemblage actuellement sélectionnées dans la fenêtre de liste
- Entrée d'invite générale pour poser des questions (plutôt que d'avoir recours à Google, bon pour des choses simples)
Options de configuration
Les options de configuration suivantes sont disponibles et peuvent être configurées lors de la première exécution :
- IP du serveur : si vous utilisez une instance distante, définissez-la sur l'adresse IP de l'instance distante, sinon entrez
localhost
- Port : Si votre instance se trouve sur un autre port, modifiez-le ici - la valeur par défaut est
11434
- Schéma : Sélectionnez
http
ou https
en fonction de la configuration de votre instance - Modèle : Sélectionnez le modèle que vous souhaitez utiliser pour l'analyse, vous pouvez le modifier à tout moment.
- Invite spécifique au projet : utilisée pour donner un contexte supplémentaire au modèle si cela est nécessaire
- Commentaires de réponse : Certaines options stockent les réponses sous forme de commentaire en haut de la fonction, cela peut être activé/désactivé ici
- Renommer automatiquement : certaines options tentent de renommer automatiquement les fonctions en fonction des réponses, cela peut être activé/désactivé ici
Les options 11 et 12 peuvent être utilisées pour ajuster les paramètres après la première exécution.
Usage
- Placez le script GhidrOllama.py et le répertoire ghidrollama_utils dans votre répertoire de script Ghidra (généralement
~/ghidra_scripts
). - Trouvez une fonction/instruction que vous souhaitez transmettre au LLM
- Exécutez le script à partir de la fenêtre Script Manager
- Si c'est la première fois que vous exécutez le script, terminez la configuration initiale (cela peut être modifié ultérieurement)
- Sélectionnez la manière dont vous souhaitez que la fonction/l'instruction soit analysée
- Attendez que la sortie soit imprimée sur la console (le temps d'attente varie en fonction du modèle et des spécifications de l'hôte)
Façons de courir
Entrer dans la fenêtre de script pour exécuter ce script à chaque fois n'est pas pratique, le script peut facilement être exécuté des manières suivantes :
- Liaison de touches : La liaison de touches par défaut pour ce script est Q
- Barre d'outils : Une petite icône sur la barre d'outils peut être cliquée pour exécuter le script
Reliure aux touches
Pour l'activer, une fois que vous avez ajouté votre script dans la liste des répertoires de scripts Ghidra, localisez le script dans la liste. Faites un clic droit sur le résultat et sélectionnez "Attribuer une liaison de clé". S'il vous demande une clé, entrez q .
Barre d'outils
Pour activer l'icône de la barre d'outils, localisez le script dans le gestionnaire de scripts et cochez la case dans la première colonne (la colonne Dans la barre d'outils ). L'icône GhidrOllama devrait apparaître dans la barre d'outils.
Remarques
- Il est à noter que l'analyse ne sera aussi bonne que le modèle, ce script ne fait que relier les modèles et Ghidra.
- Plus le modèle est performant (plus de paramètres, plus lent), plus l'analyse sera complète et correcte (la plupart du temps !)
- Si vous voulez un aperçu rapide d'une fonction, lama3.1:8b est rapide et donne une analyse décente
- Soyez prudent avec les grandes fonctions et les modèles à faible contexte, si la fonction est trop grande pour la fenêtre contextuelle, le modèle répondra avec un charabia complet (s'il répond pas du tout)
Exemples d'analyse de fonction
Vous trouverez ci-dessous une implémentation de strchr() comme on le voit dans la fenêtre de décompilation de Ghidra avec des symboles supprimés :