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 à 2014
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
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
bonjour à toutes et à tous,
@Linkin, merci de ta réponse,
c'est ce que je veux faire, pour ça , je pense qu'il faut créer un driver "sys".De cette façon il ne sera plus possible de tuer mon processus.
@ Rayek,merci de ta réponse, il n'y a aucune compétence à savoir pour afficher le gestion des tâches et à killer une application sauf les applications qui sont protégées comme les antivirus...... pour la seule protection que nous voulons mettre en place c'est protéger (pour les petits malins ) notre exe d'un killProcess.
@ Franck SORIANO,
merci de ta réponse,
oui je veux dire TerminateProcess.
je vais suivre tes pistes et je vous tiendrez au courant dès que possible(travail oblige ))
@+
NABIL74
@ 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
@ Franck SORIANO, Bonjour, ne fonctionne pas sous Seven 64bits !
Au lancement de l'application :
@+,erreur: un appel à une fonction du system d'exploitation a échoué
Cincap
Je suis sous Seven 64 bits. Moi ça fonctionne très bien.
Si tu as une erreur, regarde quelle est la fonction qui échoue. C'est probablement la définition du compte utilisateur qui ne passe pas.
salut à toutes et à tous,
merci de vos réponses les gars.
@ cincap,
Salut mon frère, j'espère que tu vas bien .
j'ai retiré le PWideChar et l'ai remplacé par un PChar sinon on obtient un message d'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Windows, AclAPI, AccCtrl users : WideString; ea.Trustee.ptstrName := PWideChar(@users[1]); [/QUOTE]
j'ai essayé de changer le nom utilsateur: j'ai mis Everyone , All users, Current user, mon nom de compte,... mais toujours le même message d'erreur (sous xp sp3, delphi7 entreprise):
j'ai pu trouvé un autre exemple semblable à celui de Franck , il marche, mais le problème c'est qu'on tuer notre application.erreur: un appel à une fonction du system d'exploitation a échoué
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 procedure SetPermissions( hSection:THANDLE) ; label CleanUp; var pDacl,pNewDacl: PACL ; pSD: PPSECURITY_DESCRIPTOR ; dwRes : DWORD; ea:EXPLICIT_ACCESS; pid:integer; users : String; begin pDacl:=nil; pNewDacl :=nil; pSD:=nil; dwRes:=GetSecurityInfo(hSection,SE_KERNEL_OBJECT,DACL_SECURITY_INFORMATION, nil,nil,pDacl,nil,pSD); if(dwRes<>ERROR_SUCCESS) then begin goto CleanUp; end; users := 'All users';// everyOne ,..... hSection := OpenProcess(WRITE_DAC, false, pid); 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 := PChar(@users[1]); // pdacl := nil; dwRes:=SetEntriesInAcl(1,@ea,pDacl,pNewDacl) ; if(dwRes<> ERROR_SUCCESS) then begin goto CleanUp; end; dwRes:=SetSecurityInfo(hSection,SE_KERNEL_OBJECT,DACL_SECURITY_INFORMATION, nil,nil,pNewDacl,nil); if(dwRes<>ERROR_SUCCESS) then begin goto CleanUp; end; CleanUp: if(pSD<>nil) then LocalFree(Ulong(pSD)); if(pNewDacl<>nil) then LocalFree(Ulong(pNewDacl)); end; ---------------------------------------------- procedure TForm1.FormCreate(Sender: TObject); begin SetPermissions(GetCurrentProcessId); end;
a+
NABIL74
@ Nabil74, utilises la vielle méthode déjà suggérée :
@+,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 soit "smss.exe", "lsass.exe"...ou simplement en désactivant le gestionnaire lui meme tu peux voir du coté Policies...avant on utilise registerserviceprocess....
Cincap
salut mon frère et merci pour ton soutient,
c'est dans la cadre d'un projet pour nos étudiants, nous aurions préférés protéger notre exe d'un kill.
personnellement,je vais suivre ta piste et celle de notre ami Droïde Système7 qui est de cacher l'application dans le gestionnaire des taches.
ce qui est embêtant, c'est que ça marche chez Franck et pas chez nous! je ne sais pas pourquoi?
A+
NABIL74
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