Registry guard beta

Soyez le premier à donner votre avis sur cette source.

Vue 12 941 fois - Téléchargée 995 fois

Description

Registry Guard est un programme très proche de Regmon de Sysinternals (http://www.sysinternals.com/Utilities/Regmon.html), il permet de visualiser les tentatives d'accés à la registry (Lecture, Ouverture, Création) en temps réel, mais il possédera plus de fonctionnalités que ce-dernier plus tard (notamment une fonctionnalité réseau).

Ce programme est composé d'une DLL codée en C qui permet le hook des fonctions RegCreateKeyEx, RegOpenKeyEx, et RegQueryKeyEx (d'autre fonctions sont à venir...); c'est le moteur du programme. Grâce à la fonction API de hook, cette DLL est executée dans chaque programme actifs, modifie la table d'import de ces programme et les adresses des API de la registry afin de les détourner vers les fonctions de la DLL. Ensuite, la seconde partie du programme est en réalité le programme principal (comprenant la GUI), qui reçoit les messages d'alerte envoyés par la DLL et affiche les tentatives d'accés à la registry. Ces deux parties sont donc totalement complémentaires.

Pour plus d'informations concernant la technique de hook utilisée et son fonctionnement ; des sources sont disponibles sur ce site et un article sur le PE Header (avec l'IAT) pourra vous éclairer : http://olance.developpez.com/articles/windows/pe-iczelion/import-table/

Ce programme n'est qu'une ébauche, plusieurs fonctionnalités sont à venir...

Source / Exemple :


// Cf .ZIP pour le code source

Conclusion :


Programme testé sous Windows XP SP1/SP2 et Windows Vista.
Compilé sous Visual Studio 2005.

Attention cependant, un bug persiste : lorsqu'on est en train d'utiliser MSN Messenger avec Registry Guard en mode actif ; MSN plante, je n'ai pas encore eu le temps de regarder ce bug.

Second bug (minime) : si vous lancez un programme avec RG activé, les API registry seront logguées, mais si vous désactivez RG et que le programme tente d'accéder à la base de registre par la suite, ce-dernier plantera, vu que les adresses originales des API ont été remplacées par celles des fonctions de la DLL et que celle-ci n'est plus présente. Vous pouvez le corriger par vous même, grâce à ma fonction MakeHook que vous appellerez dans DLL_PROCESS_DETACH, afin ques les bonnes adresses soient réaffectées dans l'IAT. Malgré que cette mise à jour soit rapide, je n'ai pas eu le temps de la faire.

Un fichier binaire est présent (.EX_ dans /RG _GUI/Bin).

Je mettrai prochainement en ligne un .ZIP contenant les deux projets Visual Studio complets pour la DLL et RG, pour une compilation rapide et facile.
Pour plus d'infos, faire parvenir des bugs, ou si vous souhaitez être informé lors de la sortie d'une nouvelle version, voici mon mail : touron.guillaume@gmail.com

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
6
Date d'inscription
vendredi 23 décembre 2005
Statut
Membre
Dernière intervention
13 avril 2007

Lu,

C'est un très pratique programme (même si il fait planter MSN etc.) :-).
Je me suis moi (pas tout seul) lancé dans la construction d'un antivirus, (c.f. http://www.viropy.com ) et je cherche à faire quelque chose se rapprochant mais comme l'a dit Brunews avec un driver, donc, si quelqu'un trouve quelque chose (documentation, etc.) ce serait gentil de poster ici ou bien de me le dire (MP etc.) car je pense que ça en ferait profiter tout le monde.


++, PianoPâriss.
Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

vraiment bien jouer, voila plusieur mois que je fait du hooking detouring, je vais recommencer le meme projet, sa pourrait etre un entrennament pour moi
Messages postés
199
Date d'inscription
vendredi 16 avril 2004
Statut
Membre
Dernière intervention
28 février 2008

En effet on dirait que WinRar effectue énormément d'appels à RegOpenKeyEx...
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Je viens de remarquer que ce programme empêche WinZip de fonctionner normalement et l'oblige à se fermer. Winrar lui, fait carrément planter le programme. Je ne sais si c'est seulement chez moi ou non.
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,
Taron31 >> Je viens de regarder ton code d'un peu plus près. C'est effectivement l'utilisation de SetWindowsHook() qui permet de ne pas s'occuper de l'énumération des processus et la détection de ceux nouvellement créés. C'est donc le système qui fait ce travail. C'est dommage que cela ne permette pas de hooker les processus sans fenêtre. Pourtant, je trouve l'utilisation de SetWindowsHook() très propre par rapport aux autres méthodes de hook. Je connais plutôt la célèbre méthode de Jeffrey Ritcher qui consiste à:
1- Enumérer tous les processus existants (avec ou sans fenêtre).
2- Ouvrir chaque processus.
3- Allouer de la mémoire dans l'espace alloué au processus.
4- Ecrire le chemin contenant le nom de notre dll dans cette zone mémoire.
5- Récupérer l'adresse de LoadLibary() dans Kernel32.dll
6- Créer un thread dans le processus cible. La fonction de ce thread est l'adresse de LoadLibrary() ayant comme paramètre le pointeur sur la zone allouée contenant le chemin de notre dll.
7- Attendre que ce Thread se termine.
8- Libérer le handle du thread, celui du processus et la mémoire allouée.

Notre dll sera donc chargée dans tous les processus. Elle modifiera leurs tables d'import afin de rediriger tous les appels de l'API voulue vers une fontion contenu dans cette dll.

Je trouve cette solution très élégante. Le problème qui reste à résoudre est celui de la détection de nouveux processus.
Un autre problème apparaitra car il parait que Microsoft a l'intention d'interdire l'écriture dans une zone mémoire allouée dans un processus externe à une application. Dans tel cas, cette méthode ne sera plus utilisable.

La solution du hook avec SetWindowsHook() sera toujours supportée.
Je te conseille donc de garder cette solution dans la prochaine mise à jour de ce code source en essayant d'y apporter quelques améliorations. Dans beaucoup de cas, ce genre de solution suffit largement.

Pour perfectionner les choses, on sera donc obligés d'utiliser la solution proposée par BruNews. Je vais m'y mettre bientôt. je suis sûr que ce sera passionnat et plein de découvertes.
Vive la programmation! :)
Afficher les 20 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.