[UPDATE: 14/03/2011]: - Mise en place d’un GIT - Ajout d’explications pour l’installation

Salut les gens!

Mon dernier article commence déjà à remonter :).

Introduction

Aujourd’hui j’ai le plaisir de vous présenter un tool de ma conception. Il est encore extremement buggué, pas pour rien que je considère ça comme une alpha ^^. C’est un tool de ropping tout ce qu’il y a de plus classique.

So let’s ROPit!

Ce tool va juste construire une liste de gadgets à partir d’un exécutable PE ou d’un fichier raw (assemblé directement avec nasm par exemple).

Il génère un peu plus de gadgets que pvefindaddr, à voir si c’est utile.

La génération des gadgets se déroule en plusieurs étapes:

  • recherches de toutes les instructions “utiles” avec un algorithme itératif de backtracking de 32 instructions en arrière maximum
  • construction des gadgets avec les instructions trouvées

Les gadgets sont limités à 8 instructions volontairement.

J’ai codé ce tool pour la simple raison que je trouvais les tools disponibles assez lents vu que codés en python (ROPme, pvefindaddr et DEPlib). Et puis c’est assez marrant à coder :).

Par ailleurs, si quelqu’un a une bibliothèque de SAT/SMT solver, ça pourrait être utile ;).

Installation

Pour compiler et installer le tool vous aurez besoin des dépendances suivantes:

1
sudo apt-get install libdisasm-dev libpcre3-dev libtool

A partir du repository GIT:

La première fois:

1
2
3
4
5
git clone https://github.com/m101/ropit
cd ropit
git submodule init
git submodule update --recursive
make

Les fois suivantes:

1
2
3
4
cd ropit
git pull
git submodule update --recursive
make

Bugs connus

FIXED (GIT): Le tool ne génère aucuns gadgets pour un exécutable trop gros. En effet, la gestion mémoire n'est pas encore au top, je voulais séparer la logique de l'affichage mais ça semble assez compromis.

Testé uniquement sur architecture 64 bits pour l’instant, je testerais sur 32 bits une fois les fonctions de bases implémentées correctement.

Le tool crash lorsqu’on essaie de chercher des gadgets dans un fichier ELF 32 bits sur une architecture 64 bits (fonctionne parfaitement sous architecture 32 bits).

La version 0.1 alpha 2 sortira un peu plus tard, le temps que j’implémente les différents formats de fichiers visés et que je teste sous 32 bits :).

Si jamais vous trouvez un crash ou un bug d'une quelconque nature, vous pouvez toujours contribuer en soumettant des rapports de crashs comme décrit ici: Debugging Program Crash.

Conclusion

Bon ok cool on a des tools de ropping … mais vous les trouvez pas trop limités? :) Si vous voulez contribuer, vous savez où me joindre :).

Cheers,

m_101

Ressources