IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

protéger une application d'un kill Process


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut protéger une application d'un kill Process
    salut à toutes et à tous,

    je me demandais comment protéger son application d'un killProcess?

    merci.
    @+

    NABIL74

  2. #2
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut


    pourquoi empêcher le KillProcess ?
    si ton application plante comment l'utilisateur l'arrêtera ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par evarisnea Voir le message


    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

  4. #4
    Membre chevronné
    Avatar de Droïde Système7
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    2 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 2 262
    Points : 1 928
    Points
    1 928
    Par défaut
    Salut,

    Pas plus facile de la cacher des process ?

    @+

  5. #5
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2009
    Messages
    168
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2009
    Messages : 168
    Points : 120
    Points
    120
    Par défaut
    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 !

  6. #6
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par Droïde Système7 Voir le message
    Salut,

    Pas plus facile de la cacher des process ?

    @+
    @ 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.

  7. #7
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    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

  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    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.
    Déjà demande toi si les utilisateurs de ton logiciel ont les compétences et auront le besoin de kill ton logiciel.
    Car selon le type de logiciel je doute que de mettre en place de forte protection soit utile et son plus une perte de temps.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  9. #9
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 448
    Points
    28 448
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    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
    pourquoi ne pas utiliser la gestion des droits Windows ?!
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 436
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 436
    Points : 1 328
    Points
    1 328
    Par défaut
    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.

    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 activer la sécurité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TFTest.BActiveClick(Sender: TObject);
    begin
    BloquerGestionnaireDesTaches(true) ;
    end;
    Pour Désactiver :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    procedure TFTest.BDesactiveClick(Sender: TObject);
    begin
    BloquerGestionnaireDesTaches(False) ;
    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.

    L'application peut être démarrée avec le click droit en tant qu'Administrateur mais ce n'est pas une condition.

    @+,

    Cincap

  11. #11
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    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.

    Citation Envoyé par Paul TOTH Voir le message
    pourquoi ne pas utiliser la gestion des droits Windows ?!
    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

  12. #12
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    je me demandais comment protéger son application d'un killProcess?
    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

  13. #13
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par Franck SORIANO Voir le message

    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.
    @ Franck,
    je suis parvenu à trouver cet exemple :
    http://www.developpez.net/forums/d89...ikill-process/

    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;
    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 ....

    merci de ton aide .

    a+

    NABIL74

  14. #14
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Et bien dans ton FormCreate tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm14.FormCreate(Sender: TObject);
    begin
      SetPermissions(GetCurrentProcessId);
    end;
    Après ça, si tu essaies de tuer l'appli depuis le gestionnaire des tâches, tu te prends un "Accès refusé".

    Il faudra peut-être que tu ajustes également 'Tout le monde' qui s'applique à un OS Français.

  15. #15
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    salut à toutes et à tous,

    Citation Envoyé par Franck SORIANO Voir le message
    Et bien dans ton FormCreate tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    procedure TForm14.FormCreate(Sender: TObject);
    begin
      SetPermissions(GetCurrentProcessId);
    end;
    Après ça, si tu essaies de tuer l'appli depuis le gestionnaire des tâches, tu te prends un "Accès refusé".

    Il faudra peut-être que tu ajustes également 'Tout le monde' qui s'applique à un OS Français.
    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

  16. #16
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 436
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 436
    Points : 1 328
    Points
    1 328
    Par défaut
    Bonsoir mon frère, n'as tu pas oublié de mettre ceci dans le uses :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Windows, AclAPI, AccCtrl
    Edit1 : vérifie aussi,

    users : WideString;

    ea.Trustee.ptstrName := PWideChar(@users[1]);
    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....

    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

  17. #17
    Expert confirmé

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Points : 4 170
    Points
    4 170
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    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é"
    Ca veut vraissemblablement dire que le nom de l'utilisateur n'est pas reconnu.


    j'ai remplacé bien sûr "Tout le monde" par "All Users", mais toujours ce message d'erreur.
    Si tu as un OS anglais, c'est "Everyone" qu'il faut mettre.

Discussions similaires

  1. Meilleure façon pour protéger une application industrielle
    Par 3aychoucha dans le forum Sécurité
    Réponses: 2
    Dernier message: 10/03/2011, 08h28
  2. Protéger une application monoposte
    Par LeSkwal dans le forum Sécurité
    Réponses: 21
    Dernier message: 09/04/2008, 20h16
  3. Réponses: 8
    Dernier message: 21/05/2007, 21h40
  4. comment protéger une application delphi?
    Par dj_techno dans le forum Delphi
    Réponses: 2
    Dernier message: 19/04/2007, 12h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo