Comment interdir la fermeture d'un processus ?

Résolu
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 - 18 janv. 2012 à 09:51
thel0rd Messages postés 14 Date d'inscription lundi 16 février 2004 Statut Membre Dernière intervention 20 janvier 2012 - 20 janv. 2012 à 16:43
Bonjour,

Je cherche comment interdir la fermeture d'un processus déterminé depuis, et durant le lancement d'une application ?

Il s'agit d'une pointeuse sur PC, donc le but est qu'une personne un peu avisée ne ferme pas le programme, à cette fin tout est bloqué sauf la mise sous l'eau de l'ordinateur et la fermeture du processus via <ctrl>++<del>.

Précisons que j'ai déjà vu hélas des pseudo malware et autres bêtes qui savaient faire ce que je cherche, donc ça doit pouvoi se faire, mais évidemment je ne sais comment... (je suis en vbNet 10 sur PC).

Merci bien, cordiaelement, Joe.

3 réponses

thel0rd Messages postés 14 Date d'inscription lundi 16 février 2004 Statut Membre Dernière intervention 20 janvier 2012
20 janv. 2012 à 14:02
Hello,

Tu fais un service et les utilisateurs tant qu'ils ne seront pas admin ne pourront pas stopper ni terminer le processus.
Sinon tu fais un watch dog avec deux processes se surveillant mutuellement, mais c'est pas très efficace et c'est une bidouille.

Si les utilisateurs sont admins, il est virtuellement impossible d'empecher la fermeture d'un process, il y a 50 manières de faire (fais une recherche web sur "Advanced Process Termination" tu comprendras mieux.

Pour info les malwares qui utilisent ce genre de mécanismes détourne les appels systèmes pour contrôler leur flux d'exécution. Il en existe de ring3 (userland en général via une injection de DLL pour faire du hot patching ou du IAT patching) ou ring0 (kernel) ou un driver peut éventuellement patcher la SSDT pour rediriger les appels sur des fonctions de remplacements. Ils en parlent sur ce lien : http://www.nelite.com/community/b/acotrez/archive/2011/10/25/api-happy-hooking-episode-1.aspx
3
ehjoe Messages postés 728 Date d'inscription samedi 4 avril 2009 Statut Membre Dernière intervention 30 mars 2014 4
20 janv. 2012 à 14:16
Bonjour thel0rd,

Merci.

Il n'y a pas tant de façons que ça de fermer un programme par le clavier pour une personne un peu avertie, j'en vois trois :
- +<f4>
- La [X] de la fenêtre
- TaskManager
Les deux premiers sont piégés facilement par form_closing... Cancel (forme noSize, noMove, sans bandeau en TopMost), quant au troisième je viens en fait de trouver un solution (testée) :

Dim myProcesses As Process() = Process.GetProcessesByName("taskmgr")
Dim myProcess As Process
For Each myProcess In myProcesses
 myProcess.Kill()
Next myProcess


*

Mais il y a encore un autre problème dont je viens de me rendre compte, c'est la commande d'extinction du PC (hors intervention différente de la souris ou du clavier), faut que j'arrive à trouver un moyen de ne pouvoir éteindre ou mettre en veille le PC par le code de l'application durant le fonctionnement de cette dernière, ça fera une autre question...

Merci encore, cordialement, Joe.
3
thel0rd Messages postés 14 Date d'inscription lundi 16 février 2004 Statut Membre Dernière intervention 20 janvier 2012
20 janv. 2012 à 16:43
Il y a aussi la commande taskkill qui ne fait pas appel à taskmgr. Si je cherche un peu j'en trouverais d'autre c'est sur.

Tiens, si la personne utilise un peu WMI c'est foutu aussi il y a une méthode Terminate dans Win32_Process. wbemtest ou un vbs de 5 lignes ça le fait.

En plus la boucle là, c'est un peu une bidouille aussi :)

Pour empecher le PC de s'éteindre c'est impossible. Si le user veut vraiment l'éteindre il appuie sur le bouton power et c'est fini.

Ce genre de problématique est très connu notamment en cybercafé, en principe c'est des developpements avec drivers et donc pas de vb pas de c#, plus généralement pas de code "pseudo" compilé (ex. .NET et CLR, la VM de VB6) etc.. La c'est C, C++ ou asm.
0
Rejoignez-nous