Saturday, June 4, 2011

Script idapython du Samedi

Dans IDA, je cherche souvent comment arriver a une fonction depuis d'autres fonctions que j'ai analyse. Halvar dirait que BinNavi est fait pour ca, mais personnellement, vu que je suis vieux et refractaire au progres, j'utilise generalement la fonctionnalite de graphe de IDA (View -> Graph -> User xref chart...), qui utilise toujours en 2011 le tres laid wingraph.exe.

Tout va bien lorsque votre fonction est appelee 2 fois par des fonctions elles-meme appelees 2 fois, etc. On retrouve facilement ce que l'on cherche. Par contre, lorsque votre fonction est appelee 42 fois par des fonctions elles-meme appelees 42 fois, ca devient bordelique.

Lorsque j'audite, je renomme toutes les fonctions que j'analyse avec un prefixe particulier ('imm').Je me suis donc decide a ecrire un script idapython recherchant les recursivement les references en applicant une expression reguliere ('^imm') sur le nom des fonctions. Le resultat est un graphe epure ne contenant que les chemins que je cherchais (provenant d'une fonction analysee vers la fonction ciblee). Au final ca a pris 15 minutes et ca l'air de marcher.


Ce premier graphe correspond a une profondeur maximale de 2, sans expression reguliere appliquee, vers la fonction ciblee: c'est le bordel.

Ce second graphe correspond a une profondeur maxiumale de 8, avec expression reguliere '^imm', vers le meme fonction ciblee: c'est deja moins le bordel, et tous les blocs initiaux respectent effectivement mon expression reguliere.

J'aimerais bien remplacer le menu actuel Xref de IDA par quelque chose utilisant une version plus developpee de ce code, histoire d'avoir les Drefs/Crefs To et From avec application d'expressions regulieres. Ca me semble representer plus de travail que je ne desire y consacrer (surtout que je n'ai jamais essaye de creer un dialogue), mais si quelqu'un a du temps, amusez vous.

Et voici le code (de merde):


Edit: desole je suis infoutu de formater le code proprement.

No comments: