Lancer une application avant qu'un processus ne démarre.

Lancer une application avant qu'un processus ne démarre. - API Win32 - Programmation

Marsh Posté le 03-03-2009 à 12:47:01    

Bonjour,
 
Je cherche à reproduire le fonctionnement d'un antivirus standard sous windows : intercepter le lancement d'un processus, le mettre en pause, puis executer une application lambda et redémarrer ce processus.  
 
Exple : Lancer la calculatrice windows, une popup demande s'affiche, je clique sur "ok" et la calculatrice se lance.
J'ai regardé du côté des Hooks windows mais -de ce que j'ai compris- ils permettent d'"espionner" mais pas de prendre le contrôle.  
 
Je présume que c'est possible puisque les antivirus le font.  
 
Quelqu'un a une idée ?
 
cdlt,
Guillaume
 
ps : Je veux le faire en Java mais j'imagine que ça fait appel à des fonctions kernel windows, dans cas que passerai par du code JNI. (jé précise "java" parce que, sait-on jamais, il existe peut être un API java qqpart ? Rêvons.)
 

Reply

Marsh Posté le 03-03-2009 à 12:47:01   

Reply

Marsh Posté le 03-03-2009 à 21:10:15    

Pour intercepter le lancement d'un processus, cela sous-entend que tu te mets entre le processus père et le processus fils. Sous windows, le processus père est généralement l'explorateur windows (lorsque tu double-cliques sur l'icone de l'application, ou bien en faisant démarrer -> Exécuter), mais peut-être un autre processus comme un service, ou n'importe quel processus proposant d'exécuter une application (gestionnaire de tâches, invite de commande, ou ta propre application).  
 
Tu ne peux donc pas te mettre entres les 2 si l'application père ne l'a pas prévu. (Mal)heureusement, l'explorateur Windows propose cette fonctionnalité (faille rêvée des fabricants de programmes malveillants), en modifiant une ou plusieurs clés de la base de registre, qui te permet d'insérer ton propre programme au démarrage de chaque application. Ainsi chaque application lancée sera en fait non pas démarrée par l'explorateur, mais par ton application, et te donne ainsi un certain contrôle sur chaque application démarrée par l'explorateur.
 
C'est d'ailleurs ce que font les anti-virus.
 

Reply

Marsh Posté le 03-03-2009 à 22:49:43    

Merci ! C'est très bien ça. Peux-tu me donner un lien qui explique comment faire plus précisément ?  
 
Je commençais à abandonner l'idée parce que -contrairement à ta solution- je n'avais trouvé qu'une solution partielle et compliquée dont je ne suis même pas sûr de la faisabilité. Mais, pour information, sur cette page (http://www.codeproject.com/KB/system/hooksys.aspx) on nous explique qu'il est possible de faire charger n'importe quelle dll dynamiquement à un processus en execution avec un système de hook. Du coup, il doit être possible d'appeler l'une des routines de la dll (un équivalent de "wait" par exple) depuis n'importe quel processus en execution.  
 
Un chose tout de même : le programme supercopier intercepte toutes les copies de fichier faites sous windows ... et je ne pense pas que ce soit par ta méthode qu'il inhibe le copier/coller standard sinon il ne pourrait pas fonctionner avec un antivirus... non ?

Reply

Marsh Posté le 03-03-2009 à 23:11:18    

SirListener a écrit :

Merci ! C'est très bien ça. Peux-tu me donner un lien qui explique comment faire plus précisément ?  
 
Je commençais à abandonner l'idée parce que -contrairement à ta solution- je n'avais trouvé qu'une solution partielle et compliquée dont je ne suis même pas sûr de la faisabilité. Mais, pour information, sur cette page (http://www.codeproject.com/KB/system/hooksys.aspx) on nous explique qu'il est possible de faire charger n'importe quelle dll dynamiquement à un processus en execution avec un système de hook. Du coup, il doit être possible d'appeler l'une des routines de la dll (un équivalent de "wait" par exple) depuis n'importe quel processus en execution.  
 
Un chose tout de même : le programme supercopier intercepte toutes les copies de fichier faites sous windows ... et je ne pense pas que ce soit par ta méthode qu'il inhibe le copier/coller standard sinon il ne pourrait pas fonctionner avec un antivirus... non ?


 
Supercopier fonctionne grace au travail de Mathias Rauen qui a écrit MadCodeHook. MadCodeHook n'est plus distribué en freeware pour cause de cochonneries écrites avec. Voir madshi.net.

Reply

Marsh Posté le 04-03-2009 à 11:42:27    

xilebo a écrit :

Pour intercepter le lancement d'un processus, cela sous-entend que tu te mets entre le processus père et le processus fils.
....blablabla.....
C'est d'ailleurs ce que font les anti-virus.


 
N'importe quoi.
Les AV comme tout rootkit, font du native api hooking.
Même méthodes 9x/NT depuis 14 ans et la sortie de W95...

Reply

Marsh Posté le 04-03-2009 à 11:44:04    

Mackila a écrit :


 
Supercopier fonctionne grace au travail de Mathias Rauen qui a écrit MadCodeHook. MadCodeHook n'est plus distribué en freeware pour cause de cochonneries écrites avec.  


 
MadCodeHook est lui-même une cochonnerie car très mal écrit (et très buggé)
Il n'utilise même pas les dernières méthodes officielles MS...
 

Reply

Marsh Posté le 04-03-2009 à 11:50:16    

Mackila a écrit :


 
Supercopier fonctionne grace au travail de Mathias Rauen qui a écrit MadCodeHook. MadCodeHook n'est plus distribué en freeware pour cause de cochonneries écrites avec. Voir madshi.net.


 
Je viens de regarder le site et de faire tourner une ou deux démos c'est plutôt impressionnant, ça a l'air pas mal.  
 
Il y a une démo qui fait un hook sur les intéruptions de processus via task manager : ça popup une boite de dialogue qui te demande si oui ou non il faut autoriser le taskmanager à tuer le processus.  
 
J'imagine qu'il doit être possible de faire la même chose au démarrage d'un processus.  
 
 

Pat333 a écrit :


 
MadCodeHook est lui-même une cochonnerie car très mal écrit (et très buggé)
Il n'utilise même pas les dernières méthodes officielles MS...
 


 
Oui, mais ça a l'air de fonctionner et d'être simple d'utilisation.  
 
tu conseilles quoi sinon ?
tu as des tutos / démos qui utilisent les api win32 directement pour interrompre le démarrage d'un process donné (je ne trouve pas) ?


Message édité par SirListener le 04-03-2009 à 11:50:59
Reply

Marsh Posté le 04-03-2009 à 12:34:02    


 

Citation :


Oui, mais ça a l'air de fonctionner et d'être simple d'utilisation.  
 
tu conseilles quoi sinon ?
tu as des tutos / démos qui utilisent les api win32 directement pour interrompre le démarrage d'un process donné (je ne trouve pas) ?


 
 
Je crois que la réponse se trouve ici :  
 
http://www.developpez.net/forums/d [...] i-windows/
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed