Saturday, June 11, 2011

idapython 1.5.2

La nouvelle version d'idapython semble fixer le probleme du script de graph d'xrefs lorsque je l'ai passe en plugin ("crash" lors du double-clique sur un node et fermeture de l'IDB). Telechargez la si vous aviez un probleme avec xrefgraf.py:

http://code.google.com/p/idapython/downloads/list

Je rajouterai les fonctionalites manquantes dans la semaine. Peut-etre.

Wednesday, June 8, 2011

XrefGraf.py

Bon j'ai rajoute les quelques lignes necessaires afin de transformer le script en un plugin. Copiez le fichier dans le repertoire de plugin de IDA (n'oubliez pas d'installer la derniere version de idapython), et ALT-F8 vous presentera le dialogue. J'ai aussi corrige un probleme de logique. Alors maintenant un autre bug est apparu: dans le plugin, double-cliquer sur un noeud provoque un crash d'IDA - j'ai essaye de trouve pourquoi ca marche en script et pas en plugin, sans succes. Si quelqu'un sait et peut me dire pourquoi ca serait sympa :)


Monday, June 6, 2011

Script idapython du Dimanche soir

Apres une dure victoire des Miami Heat 88 a 86 contre les Dallas Mavericks pour le 3e match des finales des playoffs de la NBA (2-1!), je me suis decide a essaye de terminer le script d'hier. Apres avoir joue avec les Forms dans l'apres-midi, il se trouve qu'un dialogue se fait plus aisement que prevu. Donc je me suis efforce de faire quelque chose qui ressemblait au menu courant, toujours avec cette notion de filtre par expression reguliere sur les xrefs qui me tenait a coeur


J'ai inclus du code pour les xrefs to et les xrefs from. C'est moche mais ca a l'air de marcher. Comprenez bien qu'a 11:30PM un dimanche soir, ma batterie de test a consiste a tester 3 fonctions et a juger du resultat au nez. Mais comme Google, je vais faire confiance aux utilisateurs finaux pour tester, trouver des bugs, me les envoyer, et me traiter de tous les noms pour avoir pondu du code pourri.

Et comme je ne maitrise toujours pas le web 3.0 et que je n'arrive pas a coller du code proprement formate dans ce blog, je vais faire confiance a pastebin pour cela. Le code complet du script se trouve a l'adresse suivante:

http://pastebin.com/nidWa9U7



Enjoy!

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.