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 :

Intercepter un processus windows avant son execution


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de ALEX77
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 138
    Par défaut Intercepter un processus windows avant son execution
    Bonjour,

    Je me demandais depuis pas mal de temps s'il était possible de réaliser ça en Delphi (ou dans un autre langage) : un moyen simple de détecter lorsqu'un utilisateur lance un processus et décider si on le laisse s'exécuter on si on l'annule.

    Je sais lister les processus 32bits (pas les 64 bits) mais l'idée est d'intercepter un processus avant qu'il puisse s’exécuter.

    Avez-vous eu des expériences sur ce sujet ?

    Merci pour votre retour

  2. #2
    Membre Expert
    Avatar de pprem
    Homme Profil pro
    MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Inscrit en
    Juin 2013
    Messages
    1 876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : MVP Embarcadero - formateur&développeur Delphi, PHP et JS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 876
    Par défaut
    Tu voudrais te greffer sur les mêmes points d'entrée que les antivirus ? Il y a forcément une API Windows pour ça quelque part.

    La réponse est probablement quelque part dans la doc de Microsoft (si tu arrives à formuler la bonne demande) sur MSDN (bon courage ).

  3. #3
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 477
    Par défaut
    salut

    de mémoire il existé plusieurs possibilité selon la dérivation que l'on voulez faire

    le plus connue est sans nulle doute SetWindowsHookEx

    il y a aussi l'injection dll InjectDLL on en parle ici

    sinon directement en mémoire avec VirtualAlloc et autres joyeuseté

  4. #4
    Membre Expert Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Par défaut
    voir ici

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

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

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par pprem Voir le message
    Tu voudrais te greffer sur les mêmes points d'entrée que les antivirus ? Il y a forcément une API Windows pour ça quelque part.

    La réponse est probablement quelque part dans la doc de Microsoft (si tu arrives à formuler la bonne demande) sur MSDN (bon courage ).
    j'avais vaguement regardé cela, histoire de me débarrasser de l'antivirus en mettant un appli qui accepte tout...sauf qu'il faut que le programme soit signé et répertorié chez MS si je me souviens bien...donc c'est juste pas possible
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  6. #6
    Membre confirmé Avatar de ALEX77
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 138
    Par défaut
    Citation Envoyé par pprem Voir le message
    Tu voudrais te greffer sur les mêmes points d'entrée que les antivirus ?
    Oui c'est un peu ça l'idée

  7. #7
    Membre confirmé Avatar de ALEX77
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 138
    Par défaut
    Merci à tous.

    Je vais jeter un oeil plus approfondi aux liens que vous m'avez passé au dessus et je ne manquerais pas de revenir. Je sens que la nuit va être longue!

  8. #8
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 477
    Par défaut
    salut

    j'avais lu il y a longtemps des articles de "Anton Bassov" fort intéressant à l'époque
    pour contourné un certain nombre de problème, je ne sais pas si ils sont encore d'actualité mais c'était une mine d'information pour moi a ce moment là

  9. #9
    Membre confirmé Avatar de ALEX77
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 138
    Par défaut
    J'ai testé ces codes avec la library :
    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    library HookActivation;
     
    uses
      Windows,
      SysUtils,
      Classes;
     
    Type
      TActivationEvent=procedure(var Handle:HWND);
     
    var
      hkFenetre: HHOOK;
      hwFenetre: HWnd ;
     
      ActivationEvent:TActivationEvent;
      SaveDllProc:TDLLProc;
     
    function MonHookProc(Code:Integer;wParam:WPARAM;lParam:LPARAM):LRESULT; stdcall;
    begin
      Result:= 0;
      if Code<0
      then Result:=CallNextHookEx(hkFenetre, Code, wParam, lParam)
      else  if Code=HCBT_ACTIVATE then
            begin
              hwFenetre:=HWND(wParam);
              if Assigned(ActivationEvent)
              then ActivationEvent(hwFenetre);
            end;
    end;
     
    function ActiveHook:Boolean; stdcall; export;
    begin
      if hkFenetre=0 then
      begin
        hkFenetre:=SetWindowsHookEx(WH_CBT, @MonHookProc, HInstance, 0);
        Result:=True;
      end
      else Result:=False;
    end;
     
    function DesactiveHook: Boolean; stdcall; export;
    begin
      if hkFenetre<>0 then
      begin
        UnHookWindowsHookEx(hkFenetre);
        hkFenetre := 0;
        Result := True;
      end
      else Result := False;
    end;
     
    procedure SetProcedureCallBack(var UneProcedure:TActivationEvent); stdcall; export;
    begin
      ActivationEvent:=UneProcedure;
    end;
     
    procedure LibExit(Reason: Integer);
    begin
      if Reason = DLL_PROCESS_DETACH then
      begin
        // code de sortie de la bibliothèque
        //si on a un hook qui traîne, on le libère...
        DesactiveHook;
      end;
      SaveDllProc(Reason);  // appeler la procédure de point d'entrée enregistrée
    end;
     
    exports
      ActiveHook name 'ActiveHook',
      DesactiveHook name 'DesactiveHook',
      SetProcedureCallBack name 'SetProcedureCallBack';
     
    begin
      hkFenetre:= 0;
      ActivationEvent:=nil;
      // code d'initialisation de la bibliothèque
      SaveDllProc:=DllProc;  // mémoriser la chaîne des procédures de sortie
      DllProc:=LibExit;  // installer la procédure de sortie LibExit
    end.
    et une application fiche VCL toute simple :

    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
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    unit testHookform;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TForm1 = class(TForm)
        Memo1: TMemo;
        Button1: TButton;
        procedure FormDestroy(Sender: TObject);
        procedure Button1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    type
      TActivationEvent = procedure(var Handle:HWND);
     
    procedure ActiveHook; external 'HookActivation.dll';
    procedure DesactiveHook; external 'HookActivation.dll';
    procedure SetProcedureCallBack(var UneProcedure:TActivationEvent); external 'HookActivation.dll';
     
    var
      Form1: TForm1;
      CB:TActivationEvent;
     
    implementation
     
    uses Math;
     
    {$R *.dfm}
     
     
     
    procedure MonCallBack(var Handle: Hwnd);
    var buf: array [0..1023] of char;
      Classe: string;
      Titre:string;
    begin
      GetClassName(Handle, buf, sizeof(buf));
      Classe:=string(buf);
      GetWindowText(Handle, buf, sizeof(buf));
      Titre:=string(buf);
      If Form1<>nil then
      If Form1.Memo1<>nil
      then Form1.memo1.lines.Add(Classe+' ---> '+Titre);
    end;
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      CB:=MonCallBack;
      SetProcedureCallBack(CB);
      ActiveHook;
    end;
     
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      DesactiveHook;
      CB:=nil;
    end;
     
    end.
    Mais ça plante grave...

Discussions similaires

  1. Le temps d'execution d'1 processus en avant &en arrière
    Par elmessoussi dans le forum Administration système
    Réponses: 1
    Dernier message: 08/12/2005, 11h32
  2. Réponses: 2
    Dernier message: 21/01/2005, 12h55
  3. Intercepter un Message Windows ? Créer un Composant Grille !
    Par TOTO32 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 21/07/2004, 13h41
  4. [VB6] Forçage de la priorité d'un processus Windows
    Par okyle dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/06/2004, 11h27
  5. Réponses: 2
    Dernier message: 06/04/2004, 08h39

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