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
Ponce — Gagnant du concours de plugins IDA 2016 ! L'exécution symbolique à un seul clic ! | Kitploit
Outils/GitHubGitHub/illera88/ponce
Rétro-ingénierieDébogueursAnalyse de MalwareCTFAnalyse de Binaires
GitHubillera88/ponce

Ponce

Gagnant du concours de plugins IDA 2016 ! L'exécution symbolique à un seul clic !

Voir le dépôt
1.6k85il y a 1 anVé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
Site web

Build for Windows Build for OSX Build for Linux

Ponce

Ponce (prononcé [ 'poN θe ] pon-they) est un plugin IDA Pro qui permet aux utilisateurs d'effectuer facilement et intuitivement de l'analyse de propagation (taint) et de l'exécution symbolique sur des binaires. Avec Ponce, vous êtes à un clic d'obtenir toute la puissance de l'exécution symbolique de pointe. Entièrement écrit en C/C++.

Pourquoi ?

L'exécution symbolique n'est pas un nouveau concept dans la communauté de la sécurité. Elle existe depuis de nombreuses années, mais ce n'est qu'aux alentours de 2015 que des projets open source comme Triton et Angr ont été créés pour répondre à ce besoin. Malgré la disponibilité de ces projets, les utilisateurs finaux sont souvent laissés pour implémenter eux-mêmes des cas d'utilisation spécifiques.

Nous avons répondu à ces besoins en créant Ponce, un plugin IDA qui implémente l'exécution symbolique et l'analyse de propagation dans le désassembleur/débogueur le plus utilisé par les ingénieurs en rétro-ingénierie.

Installation

Ponce fonctionne à la fois avec des binaires x86 et x64 dans n'importe quelle version d'IDA >= 7.0. Installer le plugin est aussi simple que de copier les fichiers appropriés depuis les dernières versions dans le dossier plugins\ de votre répertoire d'installation d'IDA.

Assurez-vous d'utiliser le binaire Ponce compilé pour votre version d'IDA afin d'éviter toute incompatibilité.

Support OS

Ponce fonctionne nativement sous Windows, Linux et OSX !

Cas d'utilisation

  • Développement d'exploits : Ponce peut vous aider à créer un exploit de manière bien plus efficace, car le développeur d'exploit peut facilement voir quelles parties de la mémoire et quels registres sont contrôlés, ainsi que les adresses possibles pouvant être utilisées comme gadgets ROP.
  • Analyse de malware : Une autre utilisation de Ponce concerne le code malveillant. L'analyse des commandes prises en charge par une famille particulière de malware est facilement déterminée en symbolisant une commande connue simple et en niant toutes les conditions où la commande est vérifiée.
  • Rétro-ingénierie de protocole : L'une des utilisations les plus intéressantes de Ponce est la possibilité de reconnaître les nombres magiques, les en-têtes ou même des protocoles entiers requis pour une entrée utilisateur contrôlée. Par exemple, Ponce peut vous aider à lister tous les arguments acceptés pour un binaire en ligne de commande donné ou à extraire le format de fichier requis pour un analyseur de fichier spécifique.
  • CTF : Ponce accélère le processus de rétro-ingénierie des binaires pendant les CTF. Comme Ponce est totalement intégré à IDA, vous n'avez pas à vous soucier du temps de configuration. Il est prêt à être utilisé !

Le plugin s'exécutera automatiquement, vous guidant à travers la configuration initiale la première fois qu'il est exécuté. La configuration sera sauvegardée dans un fichier de configuration, vous n'aurez donc plus à vous soucier de la fenêtre de configuration.

Modes d'utilisation

  • Moteur de propagation (taint) : Ce moteur est utilisé pour déterminer à chaque étape de l'exécution du binaire quelles parties de la mémoire et quels registres sont contrôlables par l'entrée utilisateur.
  • Moteur symbolique : Ce moteur maintient un état symbolique des registres et d'une partie de la mémoire à chaque étape du chemin d'exécution d'un binaire.

Exemples

Nier et injecter une condition

Dans le gif suivant, nous voyons l'utilisation de la propagation automatique et comment nous pouvons nier une condition et l'injecter en mémoire pendant le débogage :

  • Nous sélectionnons le moteur symbolique et définissons l'option pour symboliser argv.
  • Nous identifions la condition qui doit être satisfaite pour gagner le crackMe.
  • Nous nions et injectons la solution à chaque fois qu'un octet de notre entrée est vérifié par rapport à la clé.
  • Enfin, nous obtenons la clé elite qui a été injectée en mémoire et atteignons ainsi le code Win.

Le code source du crackme peut être trouvé ici

crackmexor_negate_and_inject

Utilisation du moteur de propagation pour suivre l'entrée contrôlée par l'utilisateur

Dans cet exemple, nous voyons l'utilisation du moteur de propagation avec cmake. Nous :

  • Passons un fichier en argument à cmake pour qu'il le parse.
  • Sélectionnons le moteur de propagation.
  • Taintons le tampon que \``fread()```` lit depuis le fichier.
  • Reprenons l'exécution sous le contrôle du débogueur pour voir où l'entrée taintée est déplacée.
  • Ponce renommera les fonctions taintées. Ce sont les fonctions sur lesquelles l'utilisateur a une influence, et non les fonctions simplement exécutées.

cmake_tainting_fread

Utilisation de Nier, Injecter & Restaurer

Dans l'exemple suivant, nous utilisons le moteur d'instantané (snapshot) :

  • Passons un fichier en argument.
  • Sélectionnons le moteur symbolique.
  • Taintons le tampon que \``fread()```` lit depuis le fichier.
  • Créons un instantané dans la fonction qui parse le tampon lu depuis le fichier.
  • Lorsqu'une condition est évaluée, nous la nions, injectons la solution en mémoire et restaurons l'instantané avec celle-ci.
  • La solution sera "valide", donc nous satisferons les conditions existantes.

fread_test_negate_restore_inject Le code source de l'exemple peut être trouvé ici

Utilisation

Dans cette section, nous listons les différentes options de Ponce ainsi que les raccourcis clavier :

  • Accéder à la configuration et aux fenêtres de propagation/symbolisation : Edit > Ponce > Show Config (Ctl+Shift+P et Ctl+Alt+T)

2016-09-15 11_39_08-configuracion

  • Activer/Désactiver le traçage Ponce (Ctl+Shift+E)

2016-09-15 11_31_34-

  • Symboliser/tainter un registre (Ctl+Shift+R)

2016-09-15 11_32_32-

  • Symboliser/tainter la mémoire. Peut être fait depuis la Vue IDA ou la Vue Hex (Ctl+Shift+M)

2016-09-15 11_32_52-ida - testproject idb testproject exe c__users_default default-pc_documents_vi2016-09-15 11_33_10-taint _ symbolize memory range

2016-09-15 12_09_11-inicio

  • Résoudre une formule (Ctl+Shift+S)

2016-09-15 11_35_11-

  • Nier & Injecter (Ctl+Shift+N)

2016-09-15 11_34_44-

  • Nier, Injecter & Restaurer l'instantané (Ctl+Shift+I)

2016-09-15 11_47_19-

  • Créer un instantané d'exécution (Ctl+Shift+C)

2016-09-15 11_37_40-

  • Restaurer l'instantané d'exécution (Ctl+Shift+S)

2016-09-15 11_38_10-

  • Supprimer l'instantané d'exécution (Ctl+Shift+D)

2016-09-15 11_38_23-

  • Exécuter en natif (Ctl+Shift+F9)

2016-09-15 12_07_10-

Triton

Ponce s'appuie sur le framework Triton pour fournir la sémantique, l'analyse de propagation et l'exécution symbolique. Triton est un superbe projet Open Source sponsorisé par Quarkslab et maintenu principalement par Jonathan Salwan avec une bibliothèque riche. Nous tenons à remercier et à approuver le travail de Jonathan avec Triton. Vous déchirez ! :)

Construction

Depuis Ponce v0.3, nous avons migré le processus de compilation pour utiliser CMake. Cela unifie la façon dont la configuration et la construction se déroulent sous Linux, Windows et OSX. Nous supportons désormais l'affichage de commentaires dans le pseudo-code concernant les instructions symboliques ou taintées. Pour que cette fonctionnalité fonctionne, vous devez ajouter hexrays.hpp à votre dossier d'inclusion IDA SDK. hexrays.hpp se trouve dans plugins/hexrays_sdk/ de votre chemin d'installation d'IDA. Si vous n'avez pas acheté le décompilateur hex-rays, vous pouvez toujours construire Ponce en utilisant -DBUILD_HEXRAYS_SUPPORT=OFF. Nous utilisons Github Actions comme environnement CI. Consultez les fichiers d'action si vous voulez comprendre comment se déroule le processus de construction.

FAQ

Pourquoi le nom Ponce ?

Juan Ponce de León (1474 – juillet 1521) était un explorateur et conquistador espagnol. Il a découvert la Floride aux États-Unis. Le plugin IDA vous aidera à découvrir, explorer et, espérons-le, conquérir les différents chemins dans un binaire.

Ponce peut-il être utilisé pour analyser des binaires Windows, OS X et Linux ?

Oui, vous pouvez utiliser Ponce nativement dans IDA pour Windows ou vous attacher à distance à une machine Linux ou OS X et l'utiliser. Dans la prochaine version de Ponce, nous supporterons nativement Ponce pour les versions Linux et OS X d'IDA.

Combien d'instructions par seconde Ponce peut-il traiter ?

Dans nos tests, nous atteignons 3000 instructions par seconde. Nous prévoyons d'utiliser le tracer PIN qu'IDA propose pour augmenter la vitesse.

Quelque chose ne fonctionne pas !

Ouvrez un issue, nous le résoudrons ASAP ;)

J'adore votre projet ! Puis-je collaborer ?

Bien sûr ! N'hésitez pas à faire des pull requests et à travailler sur les issues ouvertes. Nous vous paierons en bières pour votre aide ;)

Limitations

L'exécution concolique et Ponce présentent quelques problèmes :

  • Chargement/écriture mémoire symbolique : lorsque l'indice utilisé pour lire une valeur mémoire est symbolique, comme dans x = tableau[index_symbolique], certains problèmes peuvent survenir, pouvant entraîner la perte de trace de l'entrée utilisateur taintée/symbolisée.

  • Triton ne fonctionne pas très bien avec les instructions à virgule flottante.

  • L'exécution concolique n'analyse que les instructions exécutées. Cela signifie que le suivi symbolique est perdu dans des cas comme le suivant :

    root@kitploit:~
    int check(char myinput)  // Input is symbolic/tainted
    {
    int flag = 0;
    if (myinput == 'A')  //This condition is symbolic/tainted
      flag = 1
    else
      flag =- 1;
    return flag; // flag is not symbolic/tainted!
    }
    

Auteurs

  • Alberto Garcia Illera (@algillera) [email protected]
  • Francisco Oca (@francisco_oca) [email protected]
Télécharger l’outil