Question:
Qu'est-ce qu'une signature FLIRT?
mrduclaw
2013-03-23 13:48:10 UTC
view on stackexchange narkive permalink

J'ai vu cela référencé dans quelques autres questions sur ce site. Mais qu'est-ce qu'une signature FLIRT dans IDA Pro? Et quand pourrais-je créer le mien pour l'utiliser?

Trois réponses:
#1
+26
Igor Skochinsky
2013-03-23 18:16:03 UTC
view on stackexchange narkive permalink

FLIRT signifie Fast Library Identification and Recognition Technology .

Peter a expliqué les bases, mais voici un livre blanc sur la façon dont il est implémenté:

https://www.hex-rays.com/products/ida/tech/flirt/in_depth.shtml

Pour résoudre ces problèmes, nous avons créé une base de données de tous les fonctions de toutes les bibliothèques que nous voulions reconnaître. IDA vérifie maintenant, à chaque octet du programme en cours de désassemblage, si cet octet peut marquer le début d'une fonction de bibliothèque standard.

Les informations requises par l'algorithme de reconnaissance sont conservées dans un fichier de signature. Chaque fonction est représentée par un motif. Les modèles sont les 32 premiers octets d'une fonction où tous les octets de variantes sont marqués.

C'est un peu vieux (depuis IDA 3.6) mais les bases s'appliquent toujours.

Pour créer votre vos propres signatures, vous aurez besoin des outils FLAIR, qui peuvent être téléchargés séparément.
(FLAIR signifie Acquisition rapide de bibliothèques pour l'identification et la reconnaissance)

Le livre IDA Pro contient un chapitre sur FLIRT et en utilisant les outils FLAIR.

Ah n'était pas au courant de ce livre blanc. Explique définitivement mieux que mon petit commentaire.
#2
+15
Peter Andersson
2013-03-23 14:22:33 UTC
view on stackexchange narkive permalink

Une signature de flirt est un modèle utilisé pour faire correspondre les en-têtes de fonctions connus. À titre d'exemple, considérons ce qui suit:

  push ebpmov ebp, espsub esp, 4Chmov [ebp + var_4], eaxpush ebxpush edi ...  

Le compilateur est libre de changer n'importe quel registre en un autre ou de déplacer n'importe quoi donc tout dépend de ce que le compilateur pense être le plus optimal. Compilé ailleurs, le compilateur peut choisir d'utiliser d'autres registres, par exemple:

  push ebpmov ebp, espsub esp, 4Chmov [ebp + var_4], eaxpush ecxpush esi ...  

Vous avez maintenant quelques options pour essayer de faire correspondre cela. Soit créer naïvement une signature à partir de la séquence d'instructions:

  push Xmov Xsub Xmov Xpush Xpush X ...  

Supposons que les cadres de pile utilisent ebp et esp, ce qui est en fait plus dangereux qu'il n'y paraît. Il est courant que les fonctions utilisent ebp comme registre à usage général:

  push ebpmov ebp, espsub esp, 4Chmov [ebp + var_4], Xpush Xpush X ...  

Les signatures de flirt IDA sont une tentative de créer ces sortes de signatures basées sur un certain nombre d'octets initiaux d'une fonction. Le problème qu'ils tentent de résoudre est d'identifier le code couramment réutilisé. Ces signatures sont générées en compilant diverses bibliothèques couramment utilisées à l'aide de divers compilateurs. Une fois que le compilateur a produit une bibliothèque, IDA dispose d'outils pour extraire les signatures de cette bibliothèque tout en la faisant correspondre à sa définition source. Après un certain temps, vous pouvez créer un grand nombre de signatures pour les bibliothèques communes, ce qui vous fera gagner beaucoup de temps sur la route.

Pour une solution plus complexe au problème connexe de l'identification des similitudes et des différences entre les programmes voir BinDiff. Il utilise des heuristiques beaucoup plus avancées.

La signature que j'ai utilisée ci-dessus comme exemple est assez inutile car elle est beaucoup trop générique et créera beaucoup de fausses correspondances positives.

#3
+2
omghai2u
2013-03-23 13:53:32 UTC
view on stackexchange narkive permalink

Depuis le site Hex-Rays:

  Un fichier de signature contient des modèles de fonctions d'exécution standard. Avec leur aide, IDA est capable de reconnaître les fonctions standard et de les nommer en conséquence.  

Dans un effort de divulgation complète, je n'en ai pas vraiment créé pour mon propre usage. Je suppose qu'un cas où la création du vôtre pourrait être utile est si vous avez beaucoup de logiciels malveillants de la même famille. En général, ils écrivent et utilisent leurs propres fonctions de bibliothèque et il serait logique qu'une signature FLIRT les aide ici.

En prime, voici un dépôt public de signatures FLIRT.

Je ne pense pas que le repo contienne quoi que ce soit :)
Eh bien, on peut espérer qu'il obtiendrait des pull requests avec de la publicité, non? ^ _ ^


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...