salut à toutes et à tous,
je me demandais comment protéger son application d'un killProcess?
merci.
@+
NABIL74
salut à toutes et à tous,
je me demandais comment protéger son application d'un killProcess?
merci.
@+
NABIL74
pourquoi empêcher le KillProcess ?
si ton application plante comment l'utilisateur l'arrêtera ?
bonjour,
@ evarisnea ,salut
note application qui est encore sous développement contrôle les accès à certains répertoires ,c'est en quelque sorte 'un folder guard" .
Nous voulons empêcher l'utilisateur à killer notre exe que par un mot de passe saisie auparavant par l'administrateur.
si t'as un exemple sous la main, je suis très intéressé.merci d'avance .
A+
NABIL74
Salut,
Pas plus facile de la cacher des process ?
@+
Tu a 4 possibilité du plus simple au plus compliquer
1 - Utiliser une persistance , pour cela je m'injecte dans le processus Explorer , et fait une comparaison de Mutex ...
je m'explique :
Disons que ton module se nome Stub.
Lancement de Stub
Stub se crée un Mutex
Stub injecte un Thread dans Explorer.exe (CreateRemoteThread)
ce thread contient un petit bout de code qui qui va en permanence essayer de crée le même mutex que Stub , si le mutex est crée c'est que Sub n'est plus en mémoire alors le thread injecter va relancer avec un simple ShellExecute le chemin du Stub !
Pour les systèmes 64bit , lance un explorer.exe en hidden dans le chemin SysWow64 !
2 - Lance ton process en mode critique ( Si on kill ton process alors écran bleu :p )
3 - RunPE , tu "injecte" la totalité de ton application dans la mémoire d'un autre processus système , userinit par exemple comme sa Stub n'est plus visible dans les processus puisqu'il n'existe pas dans les process vu qu'il s'est binder avec userinit.
4 - La seul que je n'est pas encore réussi , tu code un Driver pour passer en Ring0 (Kernel Mode) et la tu est tranquille !
@ Droïde Système7,bonjour mon vieux,
oui, je peux cacher mon processus, mais ce qui m'embête c'est qu'il des soft qui te donne la liste de tous les processus en cours d'exécution et par la suite, on peut les neutraliser.
@ 0x44-0x43-0x53-0x43, merci de ton aide,
je ne veux pas passer par des injections de codes ou de travailler en mémoire.
je qui m'intéresse, c'est ta 4ème proposition.c'est là où je veux atterrir.je veux créer un driver *.sys .
je continue mes recherches.
@+
NABIL74.
Tu dois aussi pouvoir l'installer en tant que service, non arrêtable par un simple kill (comme certains anti-virus), par conter techniquement je ne sais pas comment faire.
Delphi 7/XE2/XE3
C#
Oracle 9i à 12c
SQL Server 2008 à 2022
Modérateur Delphi
Le guide du bon forumeur :
- Les règles du forum tu liras
- La FAQ et les tutoriels tu consulteras
- La fonction Recherche tu utiliseras
- Google tu vénèreras
__________
Rayek World : Youtube Facebook
bonjour à toutes et à tous,
@ NABIL74, si tu envisages de bloquer le gestionnaire de taches, voici une procédure sous Seven 64bits qui fonctionne, les touches CTRL + SHIFT + ESC sont innactives ainsi que dans le menu concernant l'accès au gestionnaire de tache par les touches CTRL + ALT + DELETE, de plus, cet accès est aussi neutralisé dans le menu lors d'un click droit sur la barre de tache et avec la commande Démarrer / Exécuter... "taskmgr.exe".
A tester sur d'autres Os.
Pour activer la sécurité :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 procedure BloquerGestionnaireDesTaches(bloque: Boolean); begin with TRegistry.Create do try //HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System RootKey := HKEY_CURRENT_USER; //OpenKey ('SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon',false); OpenKey ('\Software\Microsoft\Windows\CurrentVersion\Policies\System',false); if bloque then WriteInteger('DisableTaskMgr', 1) //Clé DWord else DeleteValue('DisableTaskMgr'); finally CloseKey; Free ; end; end;
Pour Désactiver :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TFTest.BActiveClick(Sender: TObject); begin BloquerGestionnaireDesTaches(true) ; end;
@ Paul TOTH, Il faut aussi penser que notre ami NABIL74 est professeur en Algérie et que la plus part des étudiants ont un Pc avec des anciens Os.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 procedure TFTest.BDesactiveClick(Sender: TObject); begin BloquerGestionnaireDesTaches(False) ; end;
L'application peut être démarrée avec le click droit en tant qu'Administrateur mais ce n'est pas une condition.
@+,
Cincap
bonjour à toutes et à tous,
@ Coussati,
pour ce qui du lourd en delphi, c'est du lourd , mais on sait jamais,peut-être un des membres du club a rencontré ce problème et qu'il a une solution ou une suggestion.
merci de ton conseil Paul, mais comme t'as dit mon ami cincap c'est qu'il faut aussi penser que la plus part de nos étudiants ont un pc avec XP, alors je suis "obligé" de faire tourner notre application sous cet os.
@ cincap,
merci mon frère.
après beaucoup de discutions entre nous les collègues au travail,nous avons repenser des dizaines de fois à quelle piste nous allons suivre et enfin, nous nous sommes mis d'accord sur: cacher complètement l'application dans le gestionnaire de taches.
personnellement, je ne suis pas satisfait de cette piste.enfin bon .
merci à vous tous pour votre aide.
je clôture ce topic, mais je continue mes recherches et mes tests.
toutes idées seraient le bienvenue.
NABIL74
KillProcess n'existe pas !
Je pense que tu veux dire TerminateProcess.
En fait c'est relativement simple. Si tu consultes la doc de TerminateProcess tu verras qu'il faut avoir le droit d'accès PROCESS_TERMINATE pour pouvoir tuer un processus.
Donc il suffit à ton appli de redéfinir les droits d'accès de son propre processus (avec SetSecurityInfo) en lui retirant PROCESS_TERMINATE. De cette façon il ne sera plus possible de tuer le processus puisque plus personne n'aura le droit requis...
Si tu essaies de tuer l'appli depuis le gestion des tâches, tu auras un message du genre "accès refusé".
Il y a quelque temps j'avais vu le programme d'exemple tout fait sur le forum. Mais je ne remets plus la main dessus.
Quelques infos utiles :
http://msdn.microsoft.com/en-us/libr...80(VS.85).aspx
@ Franck,
je suis parvenu à trouver cet exemple :
http://www.developpez.net/forums/d89...ikill-process/
Comment appeler cette fonction Franck? car je l'ai appelé dans le Oncreate de la fiche, mais j'ai pu killer mon application,et à partir d'un timer ça n'a pas marcher.il m'affiche "erreur systeme" blablabla ....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 function SetPermissions(pid : integer) : cardinal; var hpWriteDAC : THandle; pdacl : PACL; ea : EXPLICIT_ACCESS; dwErr : DWORD; users : string; begin hpWriteDAC := OpenProcess(WRITE_DAC, false, pid); // word users := 'Tout le monde'; ea.grfAccessPermissions := PROCESS_TERMINATE; ea.grfAccessMode := DENY_ACCESS; ea.grfInheritance := NO_INHERITANCE; ea.Trustee.pMultipleTrustee := nil; ea.Trustee.MultipleTrusteeOperation := NO_MULTIPLE_TRUSTEE; ea.Trustee.TrusteeForm := TRUSTEE_IS_NAME; ea.Trustee.TrusteeType := TRUSTEE_IS_WELL_KNOWN_GROUP; // ea.Trustee.ptstrName := PWideChar(@users[1]); ea.Trustee.ptstrName := PChar(@users[1]); pdacl := nil; dwErr := SetEntriesInAcl(1, @ea, nil, pdacl); if dwErr<>0 then RaiseLastOSError; dwErr := SetSecurityInfo(hpWriteDAC, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil,pdacl, nil); if dwErr<>0 then RaiseLastOSError; LocalFree(THAndle(pdacl)); CloseHandle(hpWriteDAC); end;
merci de ton aide .
a+
NABIL74
Et bien dans ton FormCreate tu fais :
Après ça, si tu essaies de tuer l'appli depuis le gestionnaire des tâches, tu te prends un "Accès refusé".
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 procedure TForm14.FormCreate(Sender: TObject); begin SetPermissions(GetCurrentProcessId); end;
Il faudra peut-être que tu ajustes également 'Tout le monde' qui s'applique à un OS Français.
salut à toutes et à tous,
Franck, si je me ça dans le "OnCreate de la fiche", je reçois un message d'erreur : "un appel à une fonction du système d'exploitation a echoué" et ça pointe sur cette ligne:.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 dwErr := SetSecurityInfo(hpWriteDAC, SE_KERNEL_OBJECT, DACL_SECURITY_INFORMATION, nil, nil,pdacl, nil);
j'ai remplacé bien sûr "Tout le monde" par "All Users", mais toujours ce message d'erreur.
merci de ton aide.
A+
NABIL74
Bonsoir mon frère, n'as tu pas oublié de mettre ceci dans le uses :
Edit1 : vérifie aussi,
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Windows, AclAPI, AccCtrl
Edit2 : je pensais aussi, pour empêcher l'utilisation de gestionnaire des tache ...la solution la plus simple est de changer le nom de ton exe par un nom des processus de system smss.exe, lsass.exe...ou simplement en désactivant le gestionnaire lui meme tu peux voir du coté Policies...avant on utilise registerserviceprocess....users : WideString;
ea.Trustee.ptstrName := PWideChar(@users[1]);
Et enfin, n'oublies pas que sur Vista 32bits et 64bits ainsi que sous Seven 32bits et 64bits c'est encore différent !
Car si ton utilisateur a les droits, c'est raté.
@+,
Cincap
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager