OVH Cloud OVH Cloud

scanner une dll ?

7 réponses
Avatar
Andréï
Salut,
je me rend compte que je pose beaucoups de questions sur le forum, mais
ce langage me plais tellement que je veux en savoir le plus possible.

ma question.
Est il possible de lire l'interface d'une dll afin de pouvoir
l'utiliser ultérieurement depuis python?

merci

7 réponses

Avatar
Hervé Cauwelier
Salut,
je me rend compte que je pose beaucoups de questions sur le forum, mais
ce langage me plais tellement que je veux en savoir le plus possible.

ma question.
Est il possible de lire l'interface d'une dll afin de pouvoir l'utiliser
ultérieurement depuis python?


Tu ne peux pas utiliser les DLL tel quel, il faut un « wrapper » Python
par-dessus, souvent écrit en C. Mais s'il existe, et s'il est mal
documenté (!), tu peux utiliser la fonction dir() pour introspecter son
contenu.

--
Hervé Cauwelier
http://www.oursours.net/

Avatar
Andréï
Salut,
je me rend compte que je pose beaucoups de questions sur le forum, mais ce
langage me plais tellement que je veux en savoir le plus possible.

ma question.
Est il possible de lire l'interface d'une dll afin de pouvoir l'utiliser
ultérieurement depuis python?


Tu ne peux pas utiliser les DLL tel quel, il faut un « wrapper » Python
par-dessus, souvent écrit en C. Mais s'il existe, et s'il est mal documenté
(!), tu peux utiliser la fonction dir() pour introspecter son contenu.


les dll que je voudrais attaquer sont des dll de windev et je n'ai pas
les fichiers sources.


Avatar
nico
Andréï wrote:

Salut,
je me rend compte que je pose beaucoups de questions sur le forum, mais
ce langage me plais tellement que je veux en savoir le plus possible.

ma question.
Est il possible de lire l'interface d'une dll afin de pouvoir l'utiliser
ultérieurement depuis python?


Tu ne peux pas utiliser les DLL tel quel, il faut un « wrapper » Python
par-dessus, souvent écrit en C. Mais s'il existe, et s'il est mal
documenté (!), tu peux utiliser la fonction dir() pour introspecter son
contenu.


les dll que je voudrais attaquer sont des dll de windev et je n'ai pas
les fichiers sources.


ca ne t'empeches pas de faire un wrapper...

--
nico



Avatar
Do Re Mi chel La Si Do
Bonsoir !


Voici un petit exemple d'utilisation de ctypes, pour appeler une DLL :

import ctypes
MessageBoxW = ctypes.windll.user32.MessageBoxW
MessageBoxW.argtypes = ctypes.c_int, ctypes.c_wchar_p,
ctypes.c_wchar_p, ctypes.c_int
MessageBoxW(0, "Vive", u"Michel Claveau Informatique", 0)


Et voici un lien chez MS, pour avoir des infos sur MessageBoxW ; et, ainsi,
pouvoir boucler l'information :
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconcharsetobjectfield.asp


@-salutations

Michel Claveau
Avatar
Andréï
Bonsoir !


Voici un petit exemple d'utilisation de ctypes, pour appeler une DLL :

import ctypes
MessageBoxW = ctypes.windll.user32.MessageBoxW
MessageBoxW.argtypes = ctypes.c_int, ctypes.c_wchar_p,
ctypes.c_wchar_p, ctypes.c_int
MessageBoxW(0, "Vive", u"Michel Claveau Informatique", 0)


Et voici un lien chez MS, pour avoir des infos sur MessageBoxW ; et, ainsi,
pouvoir boucler l'information :
http://msdn.microsoft.com/library/fre/default.asp?url=/library/FRE/cpguide/html/cpconcharsetobjectfield.asp


@-salutations

Michel Claveau
bonsoir,


Le prob par rapport à ton exemple c'est que tu connais l'interface de
la dll. Je voudrais justement connaitre l'interface d'une dll
(méthodes, propriétes, ...)
bye

Avatar
Do Re Mi chel La Si Do
Re


Le problème, c'est qu'il existe de multiples formes de DLL. Si une DLL
recouvre un serveur COM/OLE-automation, il est possible de retrouver les
fonctions, paramètres et propriétés. Dans d'autres cas, on ne verra rien du
tout.

Sinon, tu peux essayer : OLE-Viewer (gratuit),
PE/Explorer-DLL-Export-Viewer (payant), ICON viewer (pour les icones), DLL
explorer (payant) ; ou regarder ce site : http://www.windll.com/


@-salutations

Michel Claveau
Avatar
Amaury

Le prob par rapport à ton exemple c'est que tu connais l'interface de la
dll. Je voudrais justement connaitre l'interface d'une dll (méthodes,
propriétes, ...)
bye


Il est possible de connaître l'interface d'une dll, c'est-à-dire les
fonctions et les variables qu'elle exporte.
Depends.exe, par exemple, fait cela très bien :
http://www.dependencywalker.com/

Mais ça ne suffira pas pour utiliser la DLL:
- pour les fonctions qui utilisent la convention "C", on n'a que le nom
de la fonction, sans les paramètres.
- pour les fonctions de type "C++", le nom listé par dependencywalker
est "décoré" avec le type des arguments (du genre
@@@4ABDDE42), mais ce n'est pas du tout évident de
décoder, et en plus ça dépend du compilateur utilisé, et en plus pour
pouvoir l'appeler il faut vraiment utiliser le fichier .h officiel, et
en plus il faut utiliser les mêmes options...

Bref, sans la doc et les .h, c'est presque mission impossible.

Pour importer ses modules dynamiques (ex: _socket.pyd), Python a choisi
la facilité : la dll exporte une fonction, dont le nom dérive de celui
du module, et qui ne prend pas d'argument (ex: init_socket() ).

Bonne chance quand même...

--
Amaury