Étude des menaces

Avast propose en open-source son décompilateur !

Threat Intelligence Team, 20 décembre 2017

Après sept années de développement, Avast rend open-source son système de décompilateur de langage machine pour une analyse indépendante des plates-formes de fichiers exécutables.

Avast a publié son outil analytique, RetDec, pour aider la communauté de la cybersécurité à lutter contre les logiciels malveillants. L'outil permet à quiconque d'étudier le code des applications pour voir ce que les applications font, sans les exécuter. Combattons les cybercriminels ensemble !

Comme nous l'avions annoncé lors de notre présentation du Botconf 2017, au début du mois de décembre (diapositives ), RetDec, notre décompilateur de code machine, est maintenant ouvert, ce qui signifie que tout le monde peut l'utiliser librement, étudier son code source, le modifier et le redistribuer.

Le but de l'open source RetDec est de fournir un outil générique pour transformer le code spécifique à la plate-forme, tel que les fichiers exécutables x86 / PE, en une forme de représentation plus élevée, telle que le code source C. Par générique, nous voulons dire que l'outil ne devrait pas être limité à une seule plate-forme, mais plutôt prendre en charge une variété de plates-formes, y compris différentes architectures, formats de fichiers et compilateurs. Chez Avast, RetDec est activement utilisé pour l'analyse d'échantillons malveillants pour diverses plates-formes, telles que x86 / PE et ARM / ELF.

Le code source du décompilateur et d'autres outils connexes sont maintenant disponibles sur GitHub sous la licence MIT. Grâce à cet open-sourcing, nous voulons développer son utilisation et inviter d'autres personnes à coopérer avec nous sur son développement.

Qu'est-ce qu'un décompilateur ?

Avant de nous plonger dans le fonctionnement de RetDec, expliquons brièvement comment fonctionnent les décompilateurs en général.

Un décompilateur est un programme qui prend en entrée un fichier exécutable et tente de le transformer en une représentation de haut niveau tout en préservant ses fonctionnalités. Par exemple, le fichier d'entrée peut être application.exe, et la sortie peut être du code source dans un langage de programmation de niveau supérieur, tel que C.

Un décompilateur est donc exactement l'opposé d'un compilateur qui compile les fichiers sources en fichiers exécutables, c'est pourquoi les décompilateurs sont parfois aussi appelés compilateurs inverses.

En préservant la fonctionnalité d'un programme, nous voulons que le code source reflète aussi précisément que possible ce que le programme d'entrée fait, autrement, nous risquons de supposer que le programme fait une chose, alors qu'il en fait peut-être une autre.

Généralement, les décompilateurs sont incapables de reconstruire parfaitement le code source original, en raison du fait que beaucoup d'informations sont perdues pendant le processus de compilation. De plus, les auteurs de malwares utilisent souvent divers trucs d'obfuscation et d'anti-décompilation pour rendre la décompilation de leur logiciel aussi difficile que possible.

RetDec résout les problèmes mentionnés ci-dessus en utilisant un grand nombre d'architectures et de formats de fichiers supportés, ainsi que des heuristiques et des algorithmes internes pour décoder et reconstruire des applications. RetDec est également le seul décompilateur de sa taille utilisant une infrastructure LLVM éprouvée et fourni gratuitement, sous licence MIT.

Les décompilateurs peuvent être utilisés dans diverses situations. La plus évidente est l'ingénierie inverse lors de la recherche de bogues, de vulnérabilités ou de l'analyse de logiciels malveillants. La décompilation peut également être utilisée pour récupérer le code source perdu lors de la comparaison de deux exécutables, ou pour vérifier qu'un programme compilé fait exactement ce qui est écrit dans son code source.

Vous avez peut-être déjà entendu parler des désassembleurs et pouvez penser qu'un décompilateur est fondamentalement la même chose. Faux. Il existe plusieurs différences importantes entre un décompilateur et un désassembleur. Le premier essaie de reconstruire un fichier exécutable en un code source de haut niveau indépendant de la plate-forme, tandis que le second vous donne des instructions d'assemblage de bas niveau et spécifiques à la plate-forme. La sortie de l'ensemble est non portable, sujette aux erreurs lorsqu'elle est modifiée et nécessite des connaissances spécifiques sur le jeu d'instructions du processeur cible. 

Un autre aspect positif des décompilateurs est le code source de haut niveau qu'ils produisent, comme le code source C, qui peut être lu par des personnes qui ne connaissent rien au langage d'assemblage du processeur particulier analysé.

Nous aimerions noter qu'il existe de nombreux types de décompilateurs différents. RetDec est un décompilateur de langage machine, ce qui signifie qu'il ne supporte que la décompilation des programmes exécutant le code natif du processeur (par exemple pour Intel x86). Un décompilateur de langage machine n'est donc pas capable de décompiler le bytecode (par exemple .NET, Python, Java).

Présentation de RetDec : le décompilateur de langage machine d'Avast

RetDec est un décompilateur de langage machine qui est en développement depuis 2011. Il a été créé à l'origine en tant que projet commun par la Faculté des Technologies de l'Information de l'Université de Technologie de Brno en République Tchèque et par AVG Technologies. Depuis l'acquisition d'AVG Technologies par Avast en 2016, Avast a continué à développer le décompilateur.

Avast_blog_retargetable_decompiler-1.jpg

Le nom RetDec signifie reciblable Decompiler. Nous avons déjà expliqué ce qu'est un décompilateur, mais qu'est-ce qu'un décompilateur retargetable ? Nous avons décidé d'attribuer ce nom au décompilateur car il ne se limite pas à une seule architecture cible, système d'exploitation ou format de fichier exécutable.

Pour vous donner une idée de ce que le décompilateur peut faire, regardons un aperçu de ses fonctionnalités :

  • Formats de fichier pris en charge : ELF, PE, Mach-O, COFF, AR (archive), Intel HEX et le langage machine brut.
  • Architectures supportées (32b uniquement) : Intel x86, ARM, MIPS, PIC32 et PowerPC.
  • Analyse statique des fichiers exécutables avec des informations détaillées.
  • Détection du compilateur et de l'emballeur.
  • Chargement et décodage d'instructions.
  • Suppression basée sur la signature du code de bibliothèque lié statiquement.
  • Extraction et utilisation des informations de débogage (DWARF, PDB).
  • Reconstruction des idiomes d'instruction.
  • Détection et reconstruction de hiérarchies de classes C ++ (RTTI, vtables).
  • Démembrement des symboles des binaires C ++ (GCC, MSVC, Borland).
  • Reconstruction de fonctions, de types et de constructions de haut niveau.
  • Désassembleur intégré.
  • Sortie dans deux langages de haut niveau : C et un langage de type Python.
  • Génération de graphiques d'appel, de graphiques de flux de contrôle et de diverses statistiques.
  • Plugin IDA qui permet la décompilation des fichiers directement depuis le désassembleur IDA.

Génial, n'est-ce-pas ?! Où puis-je l'essayer ?

La façon la plus simple d'essayer le décompilateur est via notre service Web. Depuis votre navigateur web préféré, il vous suffit de télécharger le fichier exécutable que vous souhaitez décompiler et d'appuyer sur le bouton de décompilation. Une fois la décompilation terminée, vous pouvez afficher les résultats :

retargeting_decompiler_1.png

Si vous avez un désassembleur IDA installé, vous pouvez utiliser notre plugin IDA pour effectuer des décompilations directement dans IDA :

retargeting_decompiler_2.png

Si vous voulez un accès plus programmatique, vous pouvez utiliser notre API REST, qui permet à quiconque d'écrire des applications qui interagissent avec RetDec en envoyant des requêtes HTTP. La façon la plus simple (et recommandée) d'utiliser le décompilateur via l'API est d'utiliser retdec-python :

retargeting_decompiler_3.png

Enfin, puisque le code source du décompilateur est disponible sur GitHub, vous pouvez construire, installer et utiliser notre décompilateur directement sur votre PC. Actuellement, RetDec prend en charge les systèmes d'exploitation Linux et Microsoft Windows.

Nous espérons que vous trouverez notre décompilateur utile. Si vous avez des questions ou souhaitez nous faire part de vos commentaires, n'hésitez pas à nous contacter.

Pour plus d'informations, nous vous encourageons à visiter la page d'accueil de RetDec. Plus de projets open-source d'Avast peuvent également être trouvés sur notre page Github !

Merci d’utiliser Avast Antivirus et de nous recommander à vos amis et votre famille. Pour toutes les dernières actualités, suivez-nous sur Facebook, Twitter, et Google+ !