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

x86 32-bits / 64-bits Assembleur Discussion :

Hooks API


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Août 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Hooks API
    Bonjour,

    Je suis débutant ici et j'aimerais que quelq'un me corrige ce bout de code. J'ai éssayé de mettre un hook API sur MessagBox avec ce code mais cela ne fonctionne pas.

    Voici le code :

    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
    .386
    .model flat,stdcall
     option casemap:none
    include windows.inc
    include user32.inc
    include kernel32.inc
    includelib kernel32.lib
    includelib user32.lib
     
    include \masm32\macros\macros.asm
    .data?
    OldProtection    dd ?
    .data
    Text1      db  " Hello Test1",0
    Text2      db  " Hello Test2",0
    Text3      db  " Hello Test3",0 
    Caption    db " API Hooking ",0
    ModifiedT  db " hhhhhhhhhhhhhh :p ",0
     
     
    .code
    ExecuteHook proc hWnd:DWORD, IpText:DWORD, IpCaption:DWORD, Ttype:DWORD
    invoke MessageBox,0,addr ModifiedT,0,MB_OKCANCEL
       ret
    ExecuteHook endp
     
    SetHook proc hookProc :DWORD, Traject:DWORD
    mov ebx,Traject
    invoke VirtualProtect,ebx,5,PAGE_EXECUTE_READWRITE,addr OldProtection
    mov ecx,hookProc
    add ebx,5
    sub ecx,ebx
    mov byte ptr [ebx],0E9h
    mov [ebx+1],ecx
    ret
    SetHook endp
     
    start:
    LoadProcAddress "user32.dll","MessageBoxA"
    test eax,eax
    je error
    invoke SetHook,ExecuteHook,eax
    invoke MessageBox,0,addr Text1,addr Caption,MB_OK
    invoke MessageBox,0,addr Text2,addr Caption,MB_OK
    invoke MessageBox,0,addr Text3,addr Caption,MB_OK
    error:
    invoke ExitProcess,0
    End start
    J'ai utilisé la macro LoadProcAddress pour avoir l'adresse de l'API. C'est en MASM.
    Merci.

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    193
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 193
    Points : 277
    Points
    277
    Par défaut
    J'ai une petite question.
    En général on utilise le terme hook lorsque l'on détourne des messages,des proc...La construction de ces programmes est spécial.
    Par contre là je ne vois pas bien ce que l'on peut hooker avec votre code.
    Une explication sur ce que vous cherchez à faire me semble nécessaire.

  3. #3
    Membre confirmé
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Points : 567
    Points
    567
    Par défaut
    Bonjour.

    Le terme anglais " hook " est à prendre ici dans le sens de " dérivation " ou " détournement ".

    En informatique, on peut détourner des tas de choses.

    L' API Windows propose une fonction ( SetWindowsHookEx ) pour faire cela dans les règles.
    Mais cette fonction ne s'applique qu'à certains évènements et ne concerne pas le détournement d'une fonction du système.
    ( voir http://msdn.microsoft.com/en-us/libr...90(VS.85).aspx )

    Si on veut détourner une fonction de l'API, il faut donc bidouiller.
    C'est ce que fait le code posté plus haut, destiné à détourner la fonction MessageBox.

    Malheureusement, le code proposé ne peut pas fonctionner ...
    En effet la nouvelle fonction ( ExecuteHook ), qui est censée remplacer l'ancienne, appelle l'ancienne fonction !
    On est donc dans un cercle vicieux : la nouvelle fonction appelle l'ancienne, laquelle étant détournée appelle la nouvelle, qui à son tour appelle l'ancienne, etc ...

    Pour que ce code fonctionne, il faut que la nouvelle fonction appelle une autre fonction de l'API, par exemple MessageBoxIndirect

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Août 2011
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    ouui c'est ca cestune boucle infini un hook dans l'autre merci une autre fois prof

Discussions similaires

  1. HOOK API WIN32
    Par benjlomb dans le forum C++
    Réponses: 2
    Dernier message: 21/05/2010, 18h23
  2. [VB.NET] API hook clavier
    Par Torkan dans le forum Windows Forms
    Réponses: 15
    Dernier message: 05/05/2006, 03h01
  3. Cours sur l'api hooking
    Par bouazza92 dans le forum C++
    Réponses: 10
    Dernier message: 20/03/2006, 12h09
  4. API Hooking
    Par mathk dans le forum C
    Réponses: 2
    Dernier message: 10/03/2006, 18h00
  5. API HOOK, Dump dll, Surcharge de Fonction
    Par MicroAlexx dans le forum Windows
    Réponses: 2
    Dernier message: 30/12/2005, 10h39

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