KILL ANY PROCESS

BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005 - 15 oct. 2004 à 18:03
taye78 Messages postés 106 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 13 janvier 2007 - 10 nov. 2010 à 12:49
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/26858-kill-any-process

taye78 Messages postés 106 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 13 janvier 2007
10 nov. 2010 à 12:49
ok

N3buL4
mokahmed Messages postés 1 Date d'inscription vendredi 11 mars 2005 Statut Membre Dernière intervention 31 mai 2008
31 mai 2008 à 22:34
salut,
peut-être que je m'interroge pour rien, mais ta fonction setdebugprivilege est de type bool, et les tests effectués dans la fonction main font une comparaison avec du numérique.
ça ne pose pas de problème ?
millouche Messages postés 2 Date d'inscription dimanche 3 octobre 2004 Statut Membre Dernière intervention 26 novembre 2007
26 nov. 2007 à 12:04
Salut Nebula. Ca marche très bien en effet mais uniquement sur une machine locale. Sais tu comment il est possible de tuer un process d'une machine connectée en réseau local ? J'arrive très bien à récupérer l'ID du process mais impossible de l'ouvrir. Le OpenProcess retourne systématiquement un NULL ?
jozefff Messages postés 2 Date d'inscription mercredi 28 février 2007 Statut Membre Dernière intervention 2 mai 2007
2 mai 2007 à 17:20
yaurais pas moyen de trouver la meme apli mais avec le nom de l'executable, ou alors une apli qui en fonction du nom de l'executable donne le pid et en récupéran le résultat apliker cette methode ...
kptn Messages postés 25 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 2 janvier 2006
2 janv. 2006 à 09:31
Une méthode, simple, est d'aller dans le gestionnaire des taches, d'aller dans l'onglet Processus et de lire la colonne PID. Si elle n'est pas affiché, suffit de l'ajouter (Affichage / Sélerctionner les colonnes... / PID (Identificateur de processus...))

Sinon, tu peux aussi t'amuser à le programmer. ;o)
ganply Messages postés 1 Date d'inscription jeudi 29 décembre 2005 Statut Membre Dernière intervention 29 décembre 2005
29 déc. 2005 à 17:26
Bonjour, je suis novice dans la programmation et je n'ai pas trouvé comment indiquer le PID du processus qu'on veut killer au programme.
Est ce que quelqu'un peut m'aider svp ?
djnos Messages postés 19 Date d'inscription mercredi 19 mai 2004 Statut Membre Dernière intervention 15 février 2008
9 août 2005 à 14:16
Salut SOSODEF88, moi aussi je connais pas le c++ mais le delphi mais bon là y a pas trop de c++ c surtout une utilisation de l'api windows alors ajoute l'unité shellapi à ton application et reprend les fonctions... le code ne change pas bcp.

@+
sosodef88 Messages postés 78 Date d'inscription jeudi 17 février 2005 Statut Membre Dernière intervention 26 décembre 2005
2 juin 2005 à 14:45
bonjour es ce que quelqu'un sais me traduire ca en delphi ou vb paske je comprend pas bien le c++ :(
kptn Messages postés 25 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 2 janvier 2006
17 nov. 2004 à 11:09
L'impossibilité de tuer un processus avec cette méthode ne vient pas du status (tu peux tuer le kernel si ça te chante), mais plus probablement d'un arrêt des méthodes TerminateThread et TerminateProcess via un hook.

Maintenant en ce qui concerne les threads, non il n'est pas possible de les laisser vivre tout seul sans leur processus associé. Ce qui signifie que si tu fermes le processus, tu fermes tous les threads avec. Mais il est tout à fait envisageable d'injecter" un thread dans un autre processus (comme un processus système) ce qui rendrait ce thread indépendant du programme, et pourrait éventuellement reouvrir une appli qui serait killée... Mais attention toutefois, les RemoteThread sont difficiles à utiliser et assez mal vu puisque très souvent associés aux virus
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
16 nov. 2004 à 20:45
Il ne me semble pas qu'un thread puisse tourner sans son procesus mère excepté le processus système !! Puisqu'en fait un processus n'est qu'un espace d'adresse et les thread le code exécuté dans le processus .

Maintenant pour qu'un processus sont non-killable il y a toujours la méthode qui consiste à hooker les appels à TerminateThread et TerminateThread et empêcher de les diriger contre le processus voulu ou alors il faut le créer avec un statut tellement important qu'on ne puisse pas le terminer(processus système ?) .

Ou alors pour "killer" une application il y a une autre méthode "très barabare" : tu récupère un handle sur le processus et tu écrit des octets dans le code qui ne correspondent pas à des instructions
=> opcode exception
=> fermeture du thread plus que probable .

Ou alors injecter une dll dans ce processus et provoquer volontairement une erreur(overflow, non allocation de mémoire, écriture à une adresse non valide...) et la dll faisant parti du processus alors celui-ci se ferme obligatoirement .

Donc tu vois que pour terminer un process/thread tout est bon même si c'est pas très propre !
nico_rigo Messages postés 5 Date d'inscription jeudi 23 septembre 2004 Statut Membre Dernière intervention 22 mars 2005
16 nov. 2004 à 18:37
cela depend peut-être de la manière dont est terminée le processus.

Les différents threads sont terminés successivement ?

(est-ce qu'un thread peut survivre sans son application mère ?)

Si c'est le cas (arretez-moi si je dis une connerie) il serait possible de faire un thread dédié uniquement a relancer l'application qui la créé au cas ou celle-ci serait killer ?

Si qqun a une explication il est le bien venu...
nico_rigo Messages postés 5 Date d'inscription jeudi 23 septembre 2004 Statut Membre Dernière intervention 22 mars 2005
16 nov. 2004 à 18:28
Salut,

tout d'abord un grand bravo pour le code.

Juste une petite remarque. Il ne marche pas pour tous les processus (et heureusement). Genre firewall (celui que j'utilise est Sygate Personal Firewall). Il est a priori impossible a killer.

J'ai pourtant choppé récemment un virus, qui lui, parvenait à mater sygate (comment ? je n'ai tjs pas compris).

Est-ce qu'avec ce code vous parvenez à killer ce genre de programme ? si oui comment protéger son firewall contre les kill ?

@+ et bonne continuation
hebusletroll Messages postés 1 Date d'inscription mardi 12 mars 2002 Statut Membre Dernière intervention 9 novembre 2004
9 nov. 2004 à 09:38
Cet exemple démontre comment modifier les privilège de l'utilisateur / processus courant.

Le SE_DEBUG_NAME, donne le droit par exemple de récupérer un Jeton (token) d'un autre processus. Seuls les comptes administrateurs ont la possibilité (par défaut) d'accéder à ce droit (Le compte LOCAL SYSTEM le possède également). SE_TCB_NAME assure à l'utilisateur en cours d'agir en tant que système d'exploitation.

D'autres intéressant à exploiter sont SE_DUPLICATE_TOKEN_NAME, ET SE_AJUST_TOKEN.

Je suis surpris de voir un tel code sur un site Français car force est d'avouer que très peu de personnes (voire aucune) ne s'intéressent à cet aspect de l'OS.

Pour ma part j'ai développé un outil (bientôt dispo sur le web), permettant d'exécuter un programme sous le contexter LocalSystem (Assez compliqué en soit), vous pourrez même ouvrir une session sous ce même contexte. Cependant le code est beaucoup plus compliqué.
kptn Messages postés 25 Date d'inscription jeudi 20 novembre 2003 Statut Membre Dernière intervention 2 janvier 2006
28 oct. 2004 à 15:36
J'ai pas encore pris le tps de regarder pour SE_TCB_NAME (je rentre tt juste de vacances, hé!hé! ^^) mais dès que j'ai un peu de tps, je vais essayer de m'y pencher dessus... C'est tjs intéressant ce genre de chose :)
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
18 oct. 2004 à 12:35
Merci basted pour la recherche, si quelqu'un veut tester et peut nous dire ce qu'octroie vraiment ce privilège... D'après ce que j'avais trouvé sur MSDN, il permettrait de gérer les user mais ils ne s'étendent pas vraiment sur le sujet :-/
basted Messages postés 55 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 11 mai 2008
18 oct. 2004 à 08:14
Salut, je trouve le sujet simpa alors j'ai un peut chiné sur le NET, j'ai trouvé ca sur la fich Ms Q180548

"The first and biggest of these restrictions is that on Windows NT and Windows 2000, the process that is calling LogonUser must have the SE_TCB_NAME privilege (in User Manager, this is the "Act as part of the Operating System" right). The SE_TCB_NAME privilege is very powerful and should not be granted to any arbitrary user just so that they can run an application that needs to validate credentials. The recommended method is to call LogonUser from a service that is running in the local system account, because the local system account already has the SE_TCB_NAME privilege."

En claire il faut lancé ton appli en service! J'ai mas testé mais si micro$oft le dit ...
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
17 oct. 2004 à 12:01
Gendal67 > de rien ;-)

Pamaury > bah oui j'ai regardé la MSDN, mais ils ne disent rien de particulier sur ce privilège :-/
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
17 oct. 2004 à 08:47
Merci Nebula,
t'as regardé sur MSDN pq il le voulait pas le SE_TCB_NAME parce que s'il existe on doit pouvoir l'utiliser !!
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
16 oct. 2004 à 13:36
Nebula, un grand grand merci pour ton aide !!!
J'ai testé et tout fonctionne impec' ! Maintenant je vais me mettre à apprendre et à connaitre ce code (se sert à rien de l'utiliser si je ne suis pas capable de le refaire et connaitre les différentes parties) :-)) merci en tt cas !!
cs_Nebula Messages postés 787 Date d'inscription samedi 8 juin 2002 Statut Membre Dernière intervention 7 juin 2007 2
16 oct. 2004 à 13:24
Pamaury > c'est le privilège minimal dont on a besoin pour accéder sans limites à tous les processus, oui... y'en a un autre bien plus puissant : SE_TCB_NAME (act as part of operating system), mais je n'ai pas encore réussi à l'activer, windows me le refuse lol

Gendal67 > pour les PID, tu peux les trouver dans le gestionnaire de tâches, deuxième colonne (éventuellement affichage->sélectionner des colonnes pour afficher la bonne colonne)... pour killer par noms regarde ma source "tuer un processus", peu de modifications sont nécessaires ;)
Gendal67 Messages postés 627 Date d'inscription mercredi 16 juin 2004 Statut Membre Dernière intervention 24 juillet 2011 2
16 oct. 2004 à 08:45
Euh slt, je trove ta source géniale...sauf une chose : ça marche pas chez moi ! Windows XP SP1...
En fait, le truc chiant c'est qu'il faut envoyer un ID du processus à la ligne de commande....et que moi je ne vois pas comment envoyer un nombre à partir d'un nom de processus, si tu pouvais m'aider...merci d'avance! :-)
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
16 oct. 2004 à 08:27
juste une question parce que j'ai pas envie d'aller sur MSDN, pourquoi tu utilise SE_DEBUG_NAME dans la fonction LookupPrivilegeValue, c'est çà qui permet les privilèges les plus élevé ou c'est juste parce qu'il faut mettre çà ??
BlackGoddess Messages postés 338 Date d'inscription jeudi 22 août 2002 Statut Membre Dernière intervention 14 juin 2005
15 oct. 2004 à 18:03
joli :))
interressantes cette partie de l'api sur les privileges
Rejoignez-nous