OVH Cloud OVH Cloud

"analyse" d'une dll

18 réponses
Avatar
Jean-Michel Bechet
Bonjour à tous,

Existe-t-il des outils qui permetteraient d'analyser une dll; c'est à dire :
- lister toutes les fonctions présentes dans la dll
- renseigner sur le nombre et le type des paramètres pour chaque fonction
- autres renseignements éventuellement

Merci d'avance ...

JMB.

8 réponses

1 2
Avatar
Ambassadeur Kosh
> Pas possible si les fonctions ne sont pas "décorées".
Si c'est le cas clic droit/'undecorate C++ functions'.
Sinon pas possible d'avoir le proto a moins de desassembler.



qu'entendez vous par "décorées" ?
le fait que la fonction ait été déclarée declspec(export) implique il
qu'elle soit décorée ?

parlons nous de la même chose : une fonction qui est exportée se voit
cataloguée dans une table des fonctions avec toutes les informations
indispensables au lieur : prototype, mécanique d'appel...
Avatar
Thierry
Bonjour,

Ambassadeur Kosh a écrit :

qu'entendez vous par "décorées" ?
le fait que la fonction ait été déclarée declspec(export) implique il
qu'elle soit décorée ?



voir Q126845

parlons nous de la même chose : une fonction qui est exportée se voit
cataloguée dans une table des fonctions avec toutes les informations
indispensables au lieur : prototype, mécanique d'appel...



Le linker ne se base, je crois, que sur le nom. Si tu (on peut se tutoyer
?) linkes avec la lib du DLL et que tu appelles une fonction avec le
mauvais prototype (nombre d'argument différent) ca plante plus ou
moins (suivant la convention d'appel utilisée).

--
"Oh God I am the American dream
I do not think I'm too extreme
An' I'm a handsome son of a bitch
I'm gonna get a good job 'n' be real rich"
Avatar
Ambassadeur Kosh
> voir Q126845



ok.
donc le prototype (celui affiché par Depends) est directement issu du nom
"manglé".
donc, avec un impdef ou autre outils du genre, je dois pouvoir fabriquer un
.h (sous hypotese de mangling)

merci du coup de pouce...
Avatar
Ambassadeur Kosh
> Tout à fait. Tu n'as qu'à essayer (il faut que le prototype dans la lib
soit en __int32 aussi).



ben non, justement. c'est pour voir si le linker se base juste sur la taille
des parametres. d'ou le float...

Ah mais si c'est une fonction C++, ça change tout. Pour permettre la
surcharge de fonction, les compilateurs C++ décorent les noms de façon à
indiquer le type des arguments.



vi, thierry m'a recement rappellé ça.
un impdef et une moulinette feront donc l'affaire.

Par contre il n'y a pas d'API pour ça non plus, vu que chaque
compilateur décore les fonctions différement. C'est d'ailleurs la raison
qui fait qu'en règle générale on n'exporte pas de fonctions C++...



un beau b... en effet.

> m'étonnerait aussi qu'on désassemble les fonctions et qu'on en
> déduise les types par des regles sur le code machine qui manipule les
> données :)
Ça par contre c'est faisable. Long et ennuyeux mais faisable. À partir
du moment où on parvient à reconstituer la logique du code, on connais
aussi les arguments. Et pour différentier un int d'un float ça n'est pas
très difficile. Ce qui est plus difficile c'est de savoir à quoi tel
argument correspond.



j'entendais qu'un programme le fasse, pas le gugusse :)

Pour autant que je sache, pas pour des fonctions C. Le format PE
n'indique nul part les prototypes des fonctions exportées, seulement
leurs noms.



décidement, vive Com.
Avatar
Cyrille \cns\ Szymanski
>> > m'étonnerait aussi qu'on désassemble les fonctions et qu'on en
> déduise les types par des regles sur le code machine qui manipule
> les données :)
Ça par contre c'est faisable. Long et ennuyeux mais faisable. À
partir du moment où on parvient à reconstituer la logique du code, on
connais aussi les arguments. Et pour différentier un int d'un float
ça n'est pas très difficile. Ce qui est plus difficile c'est de
savoir à quoi tel argument correspond.





On peut quand même automatiser un poil cette procédure si l'argument est
utilisé dans un appel de fonction connu. C'est peut-être ce que tu endends
par "reconstituer la logique du code".

--
_|_|_| CnS
_|_| for(n=0;b;n++)
_| b&=b-1; /*pp.47 K&R*/
Avatar
Thierry
Bonjour,

Møgluglu a écrit :

Ce qui est plus difficile c'est de savoir à quoi tel
argument correspond.



En desassemblant c'est assez facile (la preuve, j'ai deja réussi :-)
en se basant sur les fonctions de l'API Win 32 appellés dans la DLL.
Si le nieme parametre de la fonction exportée est passé en premier
parametre de GetWindowText, y'a de fortes chances que ca soit un HWND.

--
"Oh God I am the American dream
I do not think I'm too extreme
An' I'm a handsome son of a bitch
I'm gonna get a good job 'n' be real rich"
Avatar
Thierry
Bonjour,

Ambassadeur Kosh a écrit :

un impdef et une moulinette feront donc l'affaire.



T'as vu UnDecorateSymbolName ?

--
"Oh God I am the American dream
I do not think I'm too extreme
An' I'm a handsome son of a bitch
I'm gonna get a good job 'n' be real rich"
Avatar
Hou, hou !
> > et pour extraire/modifier les resources, un outil utile est ResHacker
> (http://www.users.on.net/johnson/resourcehacker/)

Rien a voir.



"Bonjour à tous,

Existe-t-il des outils qui permetteraient d'analyser une dll; c'est à dire :
- (...)
- <<< autres renseignements éventuellement >>>
1 2