2008-11-15 10 views
16

Wie kann ich die Parameter einer undokumentierten Dll-Funktion finden?Dll-Funktionsparameter finden

Ich habe im ganzen Internet gesucht und am Ende einen Weg gefunden: es beinhaltet dekorierte Funktionen. Allerdings kann ich keinen Weg finden, diese zu bekommen.

Jede Hilfe wäre willkommen.

Antwort

6

Sie müssen die Anwendung mithilfe von, wie Paul bemerkt, etwas wie IDA Pro (oder die kostenlose Version des gleichen) zu zerlegen.

Eine gute einleitende Ressource ist das Wikibook, x86 Disassembly. Schauen Sie sich speziell den Abschnitt functions and stack frames an. Die Ableitung von Funktionsparametern kann für einfache Funktionen, die einige Parameter des Standardtyps verwenden, einfach sein.

Wahrscheinlich ist der beste Weg, um mit dieser Art von Sache zu beginnen, eine kleine Test-DLL zu erstellen, ein paar Funktionen mit bekannten Parametern zu erstellen und dann Ihre DLL zu zerlegen, um die Muster zu sehen. Lernen Sie Disassemblierung von Ihren eigenen Funktionen kennen (für die Sie den Quellcode haben und die vollständige Signatur kennen), anstatt sich in die Zerlegung von Drittanbieter-Sachen zu stürzen.

+1

Hrm .... Laut meiner Antwort: P (Scherz ok;), jedenfalls müssen Sie überhaupt nicht zerlegen, Sie können viel genauere Informationen viel schneller vor dem Rückgriff auf diese erhalten Tatsächlich ist dies der letzte mögliche Ausweg nach den von mir vorgeschlagenen Schritten. – RandomNickName42

5

Der einzige Weg, dies zu tun, ist durch Zerlegen der Funktion und sehen, wie es die Register und Stack verwendet. IDA Pro ist das beste Werkzeug, um dies zu tun, aber es ist nicht etwas, das trivial ist.

+0

Gute Antwort, ich sollte wahrscheinlich meine löschen. Ich muss an meiner Kürze arbeiten :) –

1

Wenn die einzige Information, die Sie haben, der undecorated Funktionsname ist, dann ist es leider nicht möglich, die Funktionsparameter daraus abzuleiten.

Wenn Sie mit der Montage gut umgehen können, kann es möglich sein, den Maschinencode für die Funktion zu zerlegen und umgekehrt zu konstruieren. Aber das ist ziemlich schwer für alle außer den einfachsten Funktionen zu tun.

1

Ich bin nicht wirklich vertraut mit dem PE-Format, das Windows verwendet, aber ich bin ziemlich sicher, dass es keine wirklich einfache Möglichkeit gibt, dies zu tun. Wenn die Symboltabelle nicht entfernt wurde, können Sie möglicherweise einige Informationen finden (nicht sicher, wie Windows Debugging-Informationen in PE speichert), aber es würde Ihnen fast sicher nicht mit Parametertypen helfen. Am besten lädt man die DLL in einen Debugger und experimentiert damit ... überwacht den Rohspeicher auf den Stackframes, sendet verschiedene Variablentypen usw.

Auch wenn Sie in den Debugging-Informationen eine gute Ressource finden in einer PE-Datei wird es mit ziemlicher Sicherheit keine Informationen für eine private Funktion geben.

4

Ist es COM Dll? Wenn es sich um eine COM-DLL handelt, registrieren Sie sie, verwenden Sie die OLE-Ansicht, um die Interafaces und Parameter zu kennen.

2

Zuerst laden Sie Dependency Walker herunter und öffnen Sie Ihre DLL darin. Sie sehen Symbole exportiert und importiert. Wenn Ihr Funktionsname wie _MyFunction aussieht - es ist "C" -Stil (nicht dekoriert) und Sie haben nicht zu viel damit zu tun (kann wie gesagt zerlegt werden)

Wenn es mehr wie? _MyFunction @ LoNgSetOfSome @ _StrangeChAracTers es ist C++ - eingerichtet und Sie können von here

+0

PE Explorer ist in der Lage, die exportierten Symbole aus Bibliotheken, die sowohl mit Microsoft- als auch mit Borland C++ - Compilern kompiliert wurden, intern zu entfernen: http://www.heaventools.com/unmangle.htm – Wylder

7

ich habe eine ziemlich in die Tiefe gehende Antwort here ist ReactOS Ihre beste Wette auf „undecorate“ es mit {inoffizielle} Informationen versuchen, wie es wieder scheint, jeder hier ist etwas abseits der Basis.

Ich würde dringend davon abraten versuchen, System-DLLs zu zerlegen.

A VIEL abenteuerlicher (und ich glaube nicht so weit von den Blicken der Dinge diskutiert), Technik ist, um den Inhalt der PDBs aufzuzählen.

PDB-Dateien sind Debug-Symbole, wie Sie vielleicht wissen, aber Microsoft ist aufgrund der Aktion von Anti-Trust-Gerichtsverfahren verpflichtet, große Mengen ansonsten nicht dokumentierter Informationen freizugeben.

Vollständig genaue, brauchbare und aktualisierte Informationen für große Mengen der Windows-API ist nur dokumentiert über PDB-Dateien. Die Aufrufkonvention, Argumentanzahl und sogar Argumenttypen und -namen sind dokumentiert (allerdings nicht die Besonderheiten bezüglich der Verwendung von natürlich :).

Überprüfen Sie das DIA SDK, Dia2dump ist ein gutes Beispiel mit Visual Studio verteilt, um weiter zu untersuchen, bietet es auch eine Lösung zu undecore Funktion, um speziell auf Ihre Frage zu sprechen.

Auch Kernel32 bietet UnDecorateSymbolName, so dass Sie auch verwenden können, wenn Sie nicht mit den debug SDK-Bibliotheken verknüpfen möchten.