- Reverse engineering à l’aide de grands modèles de langage
1. Présentation de LLM4Decompile et de Decompile-Eval
- Notre objectif est de créer et publier le premier LLM open source dédié à la décompilation, et de construire le premier benchmark de décompilation axé sur la recompilabilité et la réexécutabilité afin d’en évaluer les capacités.
- Un million d’échantillons de code C collectés à partir d’AnghaBench ont été compilés en code assembleur à l’aide de GCC, ce qui a permis de constituer un jeu de données de 4 milliards de tokens composé de paires assembleur-source.
- À partir de ce jeu de données, le modèle de code LLM de référence DeepSeek-Coder a été affiné, et Decompile-Eval, un benchmark d’évaluation fondé sur des questions HumanEval et des échantillons de test, a été construit.
- L’évaluation se fait selon deux perspectives : la capacité du code décompilé à être recompilé avec succès, et sa capacité à faire passer toutes les assertions des cas de test.
2. Résultats de l’évaluation
Métriques
- La recompilabilité et la réexécutabilité sont des indicateurs clés pour vérifier l’efficacité du processus de décompilation.
- Si le code décompilé peut être recompilé, cela constitue une preuve solide de son intégrité syntaxique.
- Comme la seule syntaxe ne garantit pas une équivalence sémantique avec le programme d’origine, la réexécutabilité est un critère important pour évaluer la précision sémantique.
- La recompilabilité et la réexécutabilité reflètent la récupération de la syntaxe et la préservation de la sémantique, deux éléments essentiels pour une décompilation utilisable et robuste.
3. Comment utiliser le modèle
- LLM4Decompile comprend des modèles allant de 1,3 à 33 milliards de paramètres, disponibles sur Hugging Face.
- Exemples de modèles : llm4decompile-1.3b, llm4decompile-6.7b, llm4decompile-33b, llm4decompile-6.7b-nsp, llm4decompile-6.7b-uo
- Le modèle NSP a été entraîné sur du code assembleur, avec une réexécutabilité moyenne d’environ 0,17.
- Le modèle UO a été entraîné sans connaissance préalable du niveau d’optimisation (O0~O3), avec une réexécutabilité moyenne d’environ 0,21.
- Exemple d’utilisation : compiler du code C en binaire, désassembler le binaire en instructions assembleur, puis utiliser LLM4Decompile pour traduire ces instructions assembleur en C.
4. Comment utiliser Decompile-Eval
- Les données sont stockées au format liste JSON dans
llm4decompile/decompile-eval/decompile-eval.json.
- Des méthodes sont fournies pour exécuter l’évaluation sur un seul GPU et un seul processus, ainsi qu’avec TGI (vitesse 10x plus rapide, prise en charge multi-GPU et multiprocessus).
5. En cours
- LLM4Binary : il est prévu d’inclure un jeu de données plus vaste pour le pré-entraînement du modèle sur du code assembleur et du code C.
- Decompiler-ALL : projet d’extension pour prendre en charge davantage de langages, de plateformes et de configurations (par ex. décompilation de plusieurs fonctions).
6. Licence
Avis de GN⁺
- LLM4Decompile propose une approche innovante par rapport aux méthodes traditionnelles de décompilation binaire, en permettant une décompilation plus précise et plus efficace grâce à l’utilisation de grands modèles de langage.
- Cette technologie peut être très utile dans le domaine de la sécurité logicielle, notamment pour l’analyse de malwares ou la maintenance de systèmes legacy.
- Le fait que la réexécutabilité du code décompilé ne soit pas parfaite suggère que cette technologie peut encore être améliorée. Des recherches supplémentaires sont nécessaires pour accroître sa précision et son efficacité en conditions réelles.
- Parmi les outils existants offrant des fonctions similaires, on trouve des décompilateurs commerciaux et open source comme Ghidra ou IDA Pro, mais LLM4Decompile apporte une nouvelle approche fondée sur le machine learning.
- Lors de l’adoption de cette technologie, il faut prendre en compte la qualité et l’étendue des données d’entraînement, la précision du modèle, la vitesse d’exécution, etc. Ses avantages sont une précision élevée et une grande flexibilité, tandis que la complexité des grands modèles et leurs besoins en ressources de calcul peuvent constituer des inconvénients.
1 commentaires
Commentaires sur Hacker News
Avis sur les résultats de la « réexécutabilité » :
Question sur la fiabilité du résultat décompilé :
Excellent cas d’usage pour le fine-tuning de LLM :
Intérêt pour l’entraînement de modules de décompilation à partir de la production d’un développeur :
Intérêt pour le cas d’usage idéal d’un décompilateur et pour la création de jeux de données :
Présentation d’un projet personnel de décompilateur basé sur un LLM :
Inquiétude concernant un benchmark sans comparaison avec des approches basées hors IA :
Intérêt pour le grand écart entre les scores de recompilabilité et de réexécutabilité :
Curiosité concernant la comparaison avec des décompilateurs non LLM :
Curiosité sur le fait que le modèle 6b surpasse le modèle 33b :