Question

Comment trouver les paramètres d'une fonction Dll non documentée ?

J'ai cherché partout sur Internet et j'ai fini par trouver un moyen: il s'agit de fonctions décorées. Cependant, je ne peux pas trouver un moyen d'obtenir ceux-ci.

Toute aide serait la bienvenue.

Était-ce utile?

La solution

Vous devez désassembler l’application en utilisant, comme l’a noté Paul, quelque chose comme IDA Pro (ou sa version gratuite).

Une bonne ressource d’introduction est le Wikibook, Désassemblage x86 . Plus précisément, consultez la section consacrée aux fonctions et cadres de pile . La déduction des paramètres de fonction peut être simple pour des fonctions simples prenant quelques paramètres de type standard.

Le meilleur moyen de démarrer avec ce type de chose est probablement de créer une petite DLL de test, de créer quelques fonctions avec des paramètres connus, puis de désassembler votre DLL pour voir les modèles. Apprenez le désassemblage à partir de vos propres fonctions (pour lesquelles vous avez le code source et connaissez la signature complète) au lieu de vous plonger dans le désassemblage de fichiers tiers.

Autres conseils

J'ai fait une réponse assez détaillée ici , ReactOS est votre meilleur pari comme il semble à nouveau, tout le monde ici est un peu hors de la base.

Je voudrais décourager fortement d'essayer de désassembler les DLL système.

UN BEAUCOUP plus aventureux (et je ne crois pas avoir discuté aussi loin des apparences), la technique consiste à énumérer le contenu des PDB.

Les fichiers PDB sont des symboles de débogage, comme vous le savez peut-être. Cependant, en raison de l'action des affaires judiciaires anti-trust, Microsoft est tenu de divulguer de grandes quantités d'informations autrement non documentées.

Des informations parfaitement précises, utilisables et mises à jour pour des quantités massives d'API Windows sont uniquement documentées via le fichier PDB. La convention d’appel, le nombre d’arguments et même les types et les noms d’argument sont documentés (pas les spécificités relatives à l’utilisation de course:).

Consultez le SDK DIA. Dia2dump est un bon exemple distribué avec Visual Studio. Il permet également d’examiner plus en profondeur. Il fournit également une solution pour les fonctions non décorées, pour répondre spécifiquement à votre question.

De plus, kernel32 fournit UnDecorateSymbolName, vous pouvez donc l'utiliser également si vous ne souhaitez pas créer de lien vers les bibliothèques debug sdk.

La seule façon de procéder consiste à désassembler la fonction et à voir comment elle utilise les registres et la pile. IDA Pro est le meilleur outil pour ce faire, mais ce n’est pas une mince affaire.

Est-ce que c'est COM Dll? S'il s'agit d'une DLL COM, enregistrez-la, utilisez la vue OLE pour connaître les paramètres et les interfaces.

Tout d’abord, téléchargez Dependency Walker et ouvrez votre DLL. Vous verrez les symboles exportés et importés. Si le nom de votre fonction ressemble à _MyFunction - il s’agit de "C". style (pas décoré) et vous n’avez pas trop à faire avec cela (peut être désassemblé comme dit précédemment)

Si cela ressemble plus à? _MyFunction @ LoNgSetOfSome @ _StrangeChAracTers, il est décoré en C ++ et vous pouvez essayer de "undecorate". en utilisant des informations non officielles à partir de ici

Si le seul renseignement dont vous disposez est le nom de la fonction non décorée, il est malheureusement impossible de déduire les paramètres de la fonction à partir de celui-là.

Si le montage vous convient, il peut être possible de désassembler le code machine de la fonction et de procéder à un reverse engineering. Mais c'est assez difficile à faire pour toutes les fonctions, sauf les plus simples.

Je ne connais pas vraiment le format PE utilisé par Windows, mais je suis presque sûr qu'il n'existe pas de moyen simple de le faire. Si la table des symboles n'a pas été supprimée, vous pourrez peut-être trouver des informations (vous ne savez pas comment Windows stocke les informations de débogage dans PE), mais cela ne vous aidera certainement pas avec les types de paramètres. La meilleure chose à faire est de charger la DLL dans un débogueur et de l’essayer ... surveillez la mémoire brute des cadres de pile, envoyez divers types de variables, etc.

Même si vous trouvez une bonne ressource pour les informations de débogage dans un fichier PE, il n'y aura presque certainement aucune information pour une fonction privée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top