PureBasic

Forums PureBasic
Nous sommes le Mar 21/Mai/2013 9:10

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 15 messages ] 
Auteur Message
 Sujet du message: __declspec(dllexport) en PB ?
MessagePosté: Ven 06/Avr/2012 17:27 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 25/Mar/2007 13:44
Messages: 500
Localisation: Toulouse, France
Bonsoir tout le monde !

Aujourd'hui que je trainais sur le net, j'ai trouvé quelque chose de (relativement) intéressant. J'ai trouvé une méthode pour utiliser les Hooks globaux sans passer par une DLL externe (pour en savoir plus à propos des Hooks: viewtopic.php?f=6&t=9949). J'ai trouvé le code ici: http://www.cppfrance.com/codes/HOOK-SAN ... 48043.aspx mais il est en C++ et il y a une chose que je ne sais pas faire en PB (et je ne sais pas si c'est faisable d'ailleurs), c'est ca:
Code:
__declspec(dllexport) LRESULT CALLBACK HookProc ( int nCode, WPARAM wParam, LPARAM lParam)

Ce __declspec(dllexport) permet, à priori, d'exporter la fonction sous forme de dll mais je n'arrive pas à faire la meme chose en PB (j'ai essayé de mettre ProcedureDLL mais sans succès).

Donc voilà si quelqu'un s'y connait à ce sujet ;)

A +


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Ven 06/Avr/2012 18:06 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 3063
Localisation: Arras, France
Ça ne m'a pas l'air d'être un hook "global", mais seulement de l'application lancée en paramètre... Sinon, le __declspec ne me semble ici d'aucune utilité :?

_________________
The shooting crew ~> http://www.shootingcrew.com
Bobble Puzzle ~> http://djes.free.fr


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Ven 06/Avr/2012 19:00 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3065
Citation:
J'ai trouvé une méthode pour utiliser les Hooks globaux sans passer par une DLL externe


Oui, enfin, ça fait lontemps qu'on les utilises !

Tu t'en serait aperçu si t'avait fait une recherche!


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Ven 06/Avr/2012 19:28 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 25/Mar/2007 13:44
Messages: 500
Localisation: Toulouse, France
Citation:
Oui, enfin, ça fait lontemps qu'on les utilises !

Ah ben désolé, mais quand la doc me dis ca:
Citation:
If the application installs a hook procedure for a thread of a different application, the procedure must be in a DLL.

Je me dis que je peux lui faire confiance donc effectivement je n'avais pas cherché à faire autrement (et puis à ce moment là les hooks je n'avais pas tellement besoin).

Citation:
Ça ne m'a pas l'air d'être un hook "global"

Pourtant ils font pareil ici: http://www.cppfrance.com/codes/HOOK-GLO ... 27169.aspx et le code à justement pour but de montrer un hook global sans dll.

Ceci dis, ca ne résous pas mon problème cette histoire :/ .


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Ven 06/Avr/2012 20:08 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 11/Fév/2005 17:34
Messages: 3063
Localisation: Arras, France
T'aurais pas ton code, j'ai la flemme (pour changer :mrgreen: )

_________________
The shooting crew ~> http://www.shootingcrew.com
Bobble Puzzle ~> http://djes.free.fr


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Ven 06/Avr/2012 20:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 25/Mar/2007 13:44
Messages: 500
Localisation: Toulouse, France
Yep voilà un petit test avec un hook clavier:

la DLL:
Code:
ProcedureDLL HookKeyboard(code.l, wParam.l, lParam.l)
  hMyWin = FindWindow_("WindowClass_0","RecupEvent")
  If lParam<0 : type=0 : Else : type=1 : EndIf
  PostMessage_(hMyWin,#WM_USER+5,wParam,type)

  ProcedureReturn CallNextHookEx_(@HookKeyboard(), code, wParam, lParam)
EndProcedure


Le code:
Code:
OpenWindow(0, 0, 0, 550, 160,"RecupEvent",  #PB_Window_SystemMenu|#PB_Window_Invisible)
SetWindowState(0,#PB_Window_Minimize)
;HideWindow(0, 1)

hDLL = OpenLibrary(0, "Hook.dll")
hmyHookHookKeyboard = SetWindowsHookEx_(#WH_KEYBOARD, GetProcAddress_(hDLL, "HookKeyboard"), hDLL, 0)

Repeat
  Event=WaitWindowEvent()
  Select Event
    Case #WM_USER+5
        Letter.s = ""
        If EventlParam() = 0
          wParam = EventwParam()
          Debug wParam
        EndIf
  EndSelect

Until GetWindowState(0)<>#PB_Window_Minimize

UnhookWindowsHookEx_(hmyHookHookKeyboard)
   
CloseLibrary(0)
CloseWindow(0)


Le but serait donc de faire entrer le code de la DLL dans le code de base.


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Ven 06/Avr/2012 20:42 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3065
Il faut que tu saches que:

- pour réaliser un hook global, on était obligé effectivement de le faire par une DLL

pour le hook clavier, on utilisait #WH_KEYBOARD
et pour le hook souris #WH_MOUSE


Le fonctionnement était le suivant, ta DLL était chargée dans tous les processus, ce qui posait des problèmes de sécurité, il fallait que ta dll soit très bien écrite pour pas faire planter les processus et ça facilitait grandement le hacking d'où le problème!

Ce qui fait que maintenant avec Vista et Seven, ta dll ne marchera pas et tu n'auras pas d'erreur en plus (elle sera tout simplement pas chargée dans les différents processus) , cependant elle fonctionnera si l'UAC est désactivé.


Alors Microsoft pour résoudre ce problème les a remplacé par:

pour le hook clavier #WH_KEYBOARD_LL
et pour le hook souris #WH_MOUSE_LL

Et tu n'as plus besoin de placer le code dans une DLL mais attention les procédures sont différentes


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Ven 06/Avr/2012 21:04 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 25/Mar/2007 13:44
Messages: 500
Localisation: Toulouse, France
Hum okay !

Mais du coup ce n'est pas possible de le faire avec WH_CALLWNDPROC ? (la constante WH_CALLWNDPROC_LL n'existe pas)


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Ven 06/Avr/2012 21:35 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3065
Si mais il faut compiler le programme avec les droits administrateurs, ce qui signifie que sous vista et seven tu auras droit à la fenêtre UAC!


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Ven 06/Avr/2012 23:12 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3065
C'est bizarre, je viens de faire des tests, avec seven, ça marche aussi même sans les droits admins, je comprend plus là :|


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Sam 07/Avr/2012 9:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12948
sous seven on peut désactiver l'UAC il me semble ,....peut etre l'a tu fais ..

_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Sam 07/Avr/2012 9:41 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 25/Mar/2007 13:44
Messages: 500
Localisation: Toulouse, France
nico a écrit:
C'est bizarre, je viens de faire des tests, avec seven, ça marche aussi même sans les droits admins, je comprend plus là :|

Quels tests as-tu fait ?

Je n'arrive pas à faire un hook global avec WH_CALLWNDPROC et sans DLL, est ce que tu y arrives ?


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Sam 07/Avr/2012 9:50 
Hors ligne
Avatar de l’utilisateur

Inscription: Lun 26/Avr/2004 0:40
Messages: 12948
chez moi ce code fonctionne tel quel ( Win 7 )
(je ne sais pas de qui est ce code...)


Code:
Structure KBDLLHOOKSTRUCT
   vkCode.i
   scanCode.i
   flags.i
   Time.i
   dwExtraInfo.i
EndStructure

Declare  HookActionCallBack(nCode, wParam, lParam)


HookHandle=SetWindowsHookEx_(#WH_KEYBOARD_LL, @HookActionCallBack(), 0, 0)

OpenWindow(1, 10, 10, 10, 10, "", #PB_Window_SystemMenu)
StickyWindow(1, 1)

Repeat
   
Until WaitWindowEvent()=#PB_Event_CloseWindow

;On libére le Hook à l'aide de la fonction UnHookWindowsHookEx
UnhookWindowsHookEx_(HookHandle)



;Procédure qui devra être appelée lorsque circulera un message de type "Clavier"
Procedure HookActionCallBack(nCode, wParam, lParam)
   Protected *keyBoard.KBDLLHOOKSTRUCT=lParam
   Dim keyState.c (255)
   
   If (nCode=#HC_ACTION) And (wParam = #WM_KEYDOWN)
      GetKeyboardState_(@keyState())
      Debug *keyBoard\vkCode
   EndIf
   
   ProcedureReturn CallNextHookEx_(HookHandle, nCode, wParam, lParam)
EndProcedure



;



; EPB


_________________
Image


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Sam 07/Avr/2012 10:13 
Hors ligne
Avatar de l’utilisateur

Inscription: Dim 25/Mar/2007 13:44
Messages: 500
Localisation: Toulouse, France
Oui avec WH_KEYBOARD_LL ca marche mais pas avec WH_CALLWNDPROC :/


Haut
 Profil  
 
 Sujet du message: Re: __declspec(dllexport) en PB ?
MessagePosté: Mer 11/Avr/2012 20:49 
Hors ligne
Avatar de l’utilisateur

Inscription: Ven 13/Fév/2004 0:57
Messages: 3065
Dobro a écrit:
sous seven on peut désactiver l'UAC il me semble ,....peut etre l'a tu fais ..


Non, l'UAC est bien activé et à fond!


Le code de test:
viewtopic.php?p=8637

Si tu pouvais faire le test de ton coté, je pourrais vérifier si c'est normal!


Haut
 Profil  
 
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 15 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot] et 1 invité


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron

 


Powered by phpBB © 2008 phpBB Group | Traduction par: phpBB-fr.com
subSilver+ theme by Canver Software, sponsor Sanal Modifiye