Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
AlphaGolang — Scripts IDApython pour l'analyse de binaires Golang | Kitploit
Outils/GitHubGitHub/sentinelabs/alphagolang
Analyse StatiqueRétro-ingénierieDébogueursAnalyse de MalwareAnalyse de Binaires
GitHubsentinelabs/alphagolang

AlphaGolang

Scripts IDApython pour l'analyse de binaires Golang

Voir le dépôt
672737il y a 2 ansVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

AlphaGolang

par Juan Andres Guerrero-Saade (JAG-S @ SentinelLabs)

Description :

AlphaGolang est une collection de scripts IDAPython pour aider les ingénieurs en rétro-ingénierie de malwares à maîtriser les binaires Go. L'idée est de diviser les scripts en étapes concrètes, évitant ainsi les scripts monolithiques fragiles, et imitant la méthodologie qu'un analyste pourrait suivre lorsqu'il aborde un binaire Go.

Les scripts sont publiés sous licence GPL (en hommage au GolangLoaderAssist original de Tim Strazzere que nous avons refactoré et mis à jour pour python3, un grand merci à Tim :) ). Les contributions sont les bienvenues et encouragées !

Prérequis : IDA Pro (idéalement v7.6+) et Python3 (beurk) Les deux premières étapes (recreate_pclntab et function_discovery_and_renaming) fonctionneront sur IDA v7.5- mais les scripts au-delà nécessitent IDAv7.6+. Les versions plus récentes sont la cible idéale pour les nouveaux scripts à l'avenir.

Référence originale : Présentation au Mandiant Cyber Defense Summit 2021 (Vidéo en attente)

Méthodologie d'analyse AlphaGolang

  • Étape 0 : Règle YARA pour identifier les binaires Go (PE/ELF/MachO)

    • identify_go_binaries.yara
      • Vérification simple d'en-tête + regex pour la chaîne Go build ID.
      • On pourrait probablement améliorer la plage de longueur du build ID.
  • Étape 1 : Recréer la table pcln

Télécharger l’outil
  • recreate_pclntab.py (compatible IDA v7.5-)
    • Recrée la section gopclntab à partir d'heuristiques
    • Principalement utile pour IDA v7.5-
  • Étape 2 : Découvrir les fonctions en parcourant la table pcln et ajouter des noms à toutes

    • function_renaming.py (compatible IDA v7.5-)
      • Extrait de golang loader assist
      • Découverte par force brute des fonctions manquantes basée sur la table pcln
      • Correction de certains problèmes de nettoyage des noms de fonctions lors de la transition py3
      • Refactoré pour ajouter des améliorations pour Go v1.18 basées sur Panchan d'Akamai ! Merci à Alex (CycleOfTheAbsurd).
  • Étape 3 : Exposer les fonctions générées par l'utilisateur

    • categorize_go_folders.py (Nécessite IDA v7.6+)
      • Catégorise automatiquement les fonctions dans des dossiers
      • Nécessite IDAv7.6 + l'option 'show folders' activée dans la vue des fonctions
      • MISE À JOUR 16.05.2022 : Correction d'un conflit avec le tri des dossiers d'IDA v7.7
      • Recommandation forte : annuler les métadonnées de Lumina avant d'exécuter ce plugin.
  • Étape 4 : Corriger les références de chaînes

    • fix_string_cast.py
      • Extrait de golang loader assist
      • Ajout d'une logique pour annuler la définition des blobs de chaînes existants avant de définir une nouvelle chaîne
      • De nouvelles vérifications de cohérence le rendent beaucoup plus efficace
  • Étape 5 : Extraire les informations de type (par Ivan Kwiatkowski)

    • extract_types.py
      • Commente les arguments de tous les appels à newobject, makechan, etc.
      • Applique le type C correct à ces objets et les renomme
      • Obtient le nom lisible par l'humain et l'ajoute en tant que commentaire
  • Corrections en attente et possibilités de contributions :

    • fix_string_cast.py - Nécessite encore une refactorisation + de meilleures heuristiques de chargement de chaînes - Peut provoquer un blocage dans les binaires massifs. - Certains mécanismes de chargement indirect de chaînes ne sont pas pris en compte.
    • extract_types.py
      • Fonctionne actuellement sur les fichiers PE et Mach-O en recherchant les noms de sections codés en dur .rdata ou __rodata.
      • Une vérification / implémentation appropriée pour les tailles encodées en varint est nécessaire

    Prochaines étapes :

    • Suivre les références de chaînes par les fonctions générées par l'utilisateur
    • Générer automatiquement des signatures YARA basées sur les fonctions générées par l'utilisateur
    • Générer une sortie de pseudocode hex-rays pour les fonctions générées par l'utilisateur
    • Définir automatiquement des points d'arrêt pour l'analyse dynamique des arguments
    • ???

    Remerciements à :

    • Tim Strazzere pour avoir publié le golang_loader_assist original
    • Milan Bohacek (Avast Software s.r.o.) pour son aide précieuse pour comprendre l'API idatree.
    • Joakim Kennedy (Intezer)
    • Ivan Kwiatkowski (Kaspersky GReAT) pour l'étape 5.
    • Igor Kuznetsov (Kaspersky GReAT)
    • Alex (alias CycleOfTheAbsurd) d'ESET pour la refactorisation de l'étape 2 pour la prise en charge de Go v1.18.