Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
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
FindFunc — Plugin IDA Pro pour filtrer les fonctions par motifs d'assemblage, séquences d'octets, références de chaînes/noms et contraintes de taille, avec recherche basée sur des règles et copie binaire avancée. | Kitploit
Outils/GitHubGitHub/felixber/findfunc
Analyse StatiqueAnalyse de CodeRétro-ingénierieDébogueursAnalyse de Binaires
GitHubfelixber/findfunc

FindFunc

Plugin IDA Pro pour filtrer les fonctions par motifs d'assemblage, séquences d'octets, références de chaînes/noms et contraintes de taille, avec recherche basée sur des règles et copie binaire avancée.

Voir le dépôt
3623617il y a 10 moisVé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

FindFunc : Filtrage/Recherche avancé de fonctions dans IDA Pro

FindFunc est un plugin IDA Pro pour trouver des fonctions de code qui contiennent un certain motif assembleur ou d'octets, référencent un certain nom ou une chaîne, ou sont conformes à diverses autres contraintes.

FindFunc a remporté la troisième place au Concours de plugins IDA Pro HexRays 2022 !

ffmain

Filtrage avec des règles

La fonctionnalité principale de FindFunc est de permettre à l'utilisateur de spécifier un ensemble de « Règles » ou contraintes qu'une fonction de code dans IDA Pro doit satisfaire. FF trouvera et listera alors toutes les fonctions qui satisfont TOUTES les règles (donc actuellement toutes les règles sont en conjonction ET). Exception : les règles peuvent être « inversées » pour être des correspondances négatives. De telles règles respectent donc « ET NON ».

FF planifiera les règles dans un ordre intelligent pour minimiser le temps de traitement. Aperçu des fonctionnalités :

  • 6 règles disponibles actuellement, voir ci-dessous
  • Conscient des chunks de fonctions
  • Planification intelligente des règles pour la performance
  • Sauvegarde/Chargement des règles depuis/vers un fichier au format ASCII simple
  • Plusieurs onglets indépendants pour l'expérimentation
  • Copie des règles entre les onglets via le presse-papiers (même format que le format de fichier)
  • Sauvegarde de la session entière (tous les onglets) dans un fichier
  • Copie avancée des octets d'instructions (tout, opcodes seulement, tout sauf les immédiats, ...)
  • Cloner des onglets pour des expériences rapides avec le raffinement des résultats
  • La correspondance de code respecte le préfixe de taille d'adresse et le préfixe de taille d'opérande

Le bouton « Find Functions » efface les résultats existants et lance une nouvelle recherche, « Refine Results » ne considère que les résultats de la recherche précédente.

Copie binaire avancée

Une fonctionnalité secondaire de FF est l'option de copier la représentation binaire des instructions avec les options suivantes :

  • tout copier -> copie tous les octets dans le presse-papiers
  • copier sans immédiats -> masque (AA ?? BB) toutes les valeurs immédiates dans les octets de l'instruction
  • opcode seulement -> masquera tout sauf le(s) opcode(s) réel(s) de l'instruction (et les préfixes)
  • ...

Voir la section « copie avancée » ci-dessous pour les détails. Cette fonctionnalité complète bien la règle de motif d'octets !

Construction et Installation

FindFunc est un plugin Python IDA Pro sans dépendances de paquets externes. Il peut être installé en téléchargeant le dépôt et en copiant le fichier 'findfuncmain.py' et le dossier 'findfunc' dans votre répertoire de plugins IDA Pro. Pour IDA 9.0+, le dépôt peut également être cloné directement dans le répertoire des plugins. Dans les deux cas, aucune compilation n'est requise.

Prérequis : IDA Pro 8.x (8.3+) avec environnement python3. FindFunc est conçu uniquement pour l'architecture x86/x64. Il a été testé avec IDA 8.3 - 9.2, Python 3.11 sur Windows 10 + 11

Règles disponibles

Actuellement, les six règles suivantes sont disponibles. Elles sont triées ici de lourde à légère en ce qui concerne l'impact sur les performances. Avec de grandes bases de données, il est conseillé de réduire d'abord les fonctions candidates avec une règle peu coûteuse, avant d'effectuer une correspondance lourde via, par exemple, les règles de code. FF planifiera automatiquement les règles de manière intelligente.

Motif de code

Règle pour filtrer les fonctions en fonction de la présence d'un extrait de code assembleur donné. Ce n'est PAS une recherche textuelle de la représentation de désassemblage textuelle d'IDA, mais plutôt une correspondance avancée de l'instruction sous-jacente. L'extrait peut contenir plusieurs instructions consécutives, une par ligne. Les chunks de fonctions sont pris en charge. Prend en charge la correspondance avec des caractères génériques spéciaux, en plus de l'assembleur littéral :

  • « pass » -> correspond à toute instruction avec n'importe quels opérandes
  • « mov* any,any » -> correspond aux instructions avec le mnémonique « mov* » (par exemple mov, movzx, ...) et deux arguments quelconques.
  • « mov eax, r32 » -> correspond à toute instruction avec le mnémonique « mov », premier opérande registre eax et second opérande tout registre 32 bits.
    • Analogue : r pour tout registre, r8/r16/r32/r64 pour un registre de largeur spécifique, « imm » pour tout immédiat
  • « mov r64, imm » -> correspond à tout déplacement d'une constante vers un registre 64 bits
  • « any r64,r64 » -> correspond à toute opération entre deux registres 64 bits
  • mov -> correspond à toute instruction du mnémonique mov

plus d'exemples :

mov r64, [r32 * 8 + 0x100]
mov r, [r * 8 - 0x100]
mov r64, [r32 * 8 + imm]
pass
mov r, word [eax + r32 * 8 - 0x100]
any r64, r64
push imm
push any

Pièges : Soyez prudent lorsque vous copiez de l'assembleur depuis IDA. IDA mélange les noms de variables locales et d'autres informations dans l'instruction, ce qui entraîne un échec de la correspondance. De plus, les labels ne sont pas pris en charge (« call sub_123456 »).

Notez que les motifs de code sont la règle la plus coûteuse, et si seules les règles de code sont présentes, FF n'a d'autre choix que de désassembler l'intégralité de la base de données. Cela peut prendre jusqu'à plusieurs minutes pour de très gros binaires. Voir les notes sur les performances ci-dessous.

Valeur immédiate (Constante)

La fonction doit contenir la valeur immédiate donnée au moins une fois dans n'importe quelle position. Une valeur immédiate est une valeur fixée dans la représentation binaire de l'instruction. Exemples d'instructions correspondant à la valeur immédiate 0x100 :

mov eax, 0x100
mov eax, [0x100]
and al, [eax + ebx*8 + 0x100]
push 0x100

Les immédiats peuvent être collés directement depuis le presse-papiers dans la liste des règles. Remarque : IDA effectue une correspondance étendue de toute taille et de toute position de l'immédiat. Si vous savez qu'il s'agit d'une largeur spécifique de 4 ou 8 octets, un motif d'octets peut être plus rapide (mais peut produire des faux positifs).

Motif d'octets

La fonction doit contenir le motif d'octets donné au moins une fois. Le motif est du même format que la recherche binaire d'IDA et prend donc en charge les caractères génériques - la correspondance parfaite pour la fonction de copie avancée !

Exemples :

11 22 33 44 aa bb cc
11 22 33 ?? ?? bb cc -> ?? peut être n'importe quel octet

Les motifs d'octets peuvent être collés directement depuis le presse-papiers dans la liste des règles. Remarque : La correspondance de motifs est assez rapide et un bon candidat pour réduire rapidement les correspondances !

Référence de chaîne

La fonction doit référencer la chaîne donnée au moins une fois. La chaîne est mise en correspondance selon le module 'fnmatch' de Python, et prend donc en charge une correspondance de type caractère générique. La correspondance est effectuée sans tenir compte de la casse. Les chaînes des formats suivants sont considérées : [idaapi.STRTYPE_C, idaapi.STRTYPE_C_16] (cela peut être modifié dans la classe Config).

Exemples :

  • « TestString » -> la fonction doit référencer la chaîne exacte (casse ignorée) au moins une fois
  • « TestStr* » -> la fonction doit référencer une chaîne commençant par 'TestStr' (par exemple TestString, TestStrong) au moins une fois (casse ignorée)

Remarque : La correspondance de chaînes est rapide et un bon choix pour réduire rapidement les candidats !

Référence de nom

Télécharger l’outil