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

  1. #21
    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 Paul TOTH Voir le message
    par ailleurs, l'article parle de Windows XP SP2, donc un Windows qui n'est pas sur l'architecture NT et qui permet beaucoup de choses...rien ne garanti que ce qu'il présente soit toujours possible.
    Je ne sais pas, car il y a quelqu'un dans les commentaires de la page qui dit que ça marche sous Windows 7.

    J'essaie de compiler ça avec Code::Blocks (mais là après on parle d'un autre forum, d'un autre langage) et je bute sur la syntaxe du asm inline dans le code original on a :

    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
    //just saves execution contect and calls check() 
    _declspec(naked) Proxy()
    {
     
    _asm{
     
    //save execution contect and calls check() -the rest depends upon the value check() returns
    // if it is 1, proceed to the actual callee. Otherwise,return STATUS_ACCESS_DENIED
    pushfd
    pushad
    mov ebx,esp
    add ebx,40
    push ebx
    call check
    cmp eax,1
    jne block
     
    //proceed to the actual callee
    popad
    popfd
    jmp RealCallee
     
    //return STATUS_ACCESS_DENIED
    block:popad
    mov ebx, dword ptr[esp+8]
    mov dword ptr[ebx],0
    mov eax,0xC0000022L
    popfd
    ret 32
     
    }
    }
    J'ai choisi GNU Compiler comme compilateur du projet.

    J'ai une belle erreur qui dit que "_asm" n'exsite pas, obligé de mettre asm et d'utiliser les () au lieu des {} et de mettre des "" ce qui donne :

    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
    //just saves execution contect and calls check()
    _declspec(naked) Proxy()
    {
        asm (
            "pushfd"
            "pushad"
            "mov ebx,esp"
            "add ebx,40"
            "push ebx"
            "call check"
            "cmp eax,1"
            "jne block"
            "popad"
            "popfd"
            "jmp RealCallee"
            "block:popad"
            "mov ebx, dword ptr[esp+8]"
            "mov dword ptr[ebx],0"
            "mov eax,0xC0000022L"
            "popfd"
            "ret 32"
        );
    }
    Par contre ça compile mais je ne suis pas sûr de la syntaxe de l'asm ici et que ça fonctionnera. J'ai jeté un oeil sur http://www.ibiblio.org/gferg/ldp/GCC...-HOWTO.html#s5 mais je suis pas sûr d'avoir tout compris...

  2. #22
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    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 491
    Par défaut
    le mots cle asm est /etait valide dans les langage borland soit C++ et delphi

  3. #23
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 093
    Par défaut
    Citation Envoyé par ALEX77 Voir le message

    Le but est de pouvoir intercepter un programme .exe avant qu'il s'exécute et d'avertir l'utilisateur. Un peu comme un antivirus comme il a été évoqué plus haut. Est-ce que c'est possible avec les "Hook" ? Pour l'instant je n'en ai pas la moindre idée...
    Le but est d'intercepter un seul programme précis ou n'importe quel programme ?
    Car si c'est un seul programme précis, tout cela parait d'une extrême complexité pour une chose qui pourrait être faite via un patch du programme que l'on souhaite monitorer.
    Comme je disais remplacer le programme par un launcher qui lui lancerait le vrai programme (renommé, déplacé, en ressource...).
    Pour XChat, j'ai procédé ainsi, j'avais un launcher NotifyXChat qui rajoutait un BallonHint des messages reçus de zone de notification par exemple car j'utilisais la version GPL dans laquelle il manquait des fonctionnalités.

    Quel est le déclencheur de l'exécution du programme ?
    Peut-être qu'il y a d'autres pistes à explorer.

    Si c'est n'importe quel programme ... j'espère que cela ne soit pas faisable aussi facilement car empêcher de lancer un programme c'est quand même méchant comme "pouvoir" qu'un autre programme pourrait détenir.
    Quel est le type d'utilisateur ?
    Quel est l'environnement de déploiement ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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