Frage Dll-Funktionsparameter finden


Wie finde ich die Parameter von a undokumentiert Dll Funktion?

Ich habe das ganze Internet durchsucht und bin schließlich in eine Richtung gegangen: Es beinhaltet verzierte Funktionen. Allerdings kann ich keinen Weg finden, diese zu bekommen.

Jede Hilfe wäre willkommen.


17
2017-11-15 05:15


Ursprung


Antworten:


Sie müssen die Anwendung zerlegen, indem Sie, wie Paul bemerkt, etwas wie IDA Pro (oder die kostenlose Version desselben) verwenden.

Eine gute einleitende Ressource ist das Wikibook, x86 Disassemblierung. Schauen Sie sich speziell den Abschnitt an Funktionen und Stapelrahmen. 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 die 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.


7
2017-11-16 07:36



Ich habe eine ziemlich gründliche Antwort gegeben Hier, ReactOS ist Ihre beste Wette, wie es scheint, jeder Hier ist etwas abseits von der Basis.

Ich würde stark abzuraten Der Versuch, System-DLLs zu zerlegen.

EIN VIEL abenteuerlicher (und ich glaube nicht so weit von den Blicken der Dinge diskutiert), ist die Technik, 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-Gerichtsfällen verpflichtet, große Mengen ansonsten nicht dokumentierter Informationen freizugeben.

Vollständig genaue, verwendbare und aktualisierte Informationen für große Mengen der Windows API sind 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 :).

Sehen Sie sich das DIA SDK an, dia2dump ist ein gutes Beispiel, das mit Visual Studio vertrieben wird, um es weiter zu untersuchen, es bietet auch eine Lösung zum Dekomprimieren von Funktionen, um speziell auf Ihre Frage einzugehen.

Kernel32 stellt auch UnDecorateSymbolName zur Verfügung, also können Sie das auch verwenden, wenn Sie nicht mit den Debug-SDK-Bibliotheken verlinken möchten.


7
2017-07-02 09:37



Die einzige Möglichkeit besteht darin, die Funktion zu zerlegen und zu sehen, wie sie die Register und den Stack verwendet. IDA Pro ist das beste Werkzeug, um dies zu tun, aber es ist nicht etwas, das trivial ist.


5
2017-11-15 05:34



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.


4
2017-11-16 07:24



Zunächst einmal, Download Abhängigkeit Walker und öffne deine DLL darin. Sie sehen Symbole exportiert und importiert. Wenn Ihr Funktionsname wie _MyFunction aussieht, ist er "C" -Stil (nicht dekoriert) und Sie haben nicht zu viel damit zu tun (kann wie vorher zerlegt werden)

Wenn es mehr wie? _MyFunction @ LoNgSetOfSome @ _StrangeChAracTers ist es C ++ - dekoriert und Sie können versuchen, es mit Hilfe von {inoffizielle} info aus "undecorate" Hier


2
2017-11-18 20:08



Wenn die einzige Information, die Sie haben, der Name der undecorated-Funktion ist, dann ist es leider nicht möglich, die Funktionsparameter allein 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
2017-11-15 05:34



Ich kenne das PE-Format von Windows nicht wirklich, aber ich bin mir ziemlich sicher, dass es keinen wirklich einfachen Weg dafür gibt. 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 laden Sie die DLL in einen Debugger und experimentieren damit ... überwachen Sie den Rohspeicher auf den Stack-Frames, senden Sie verschiedene Variablentypen usw.

Selbst wenn Sie eine gute Quelle für die Debugging-Informationen in einer PE-Datei finden, wird es mit ziemlicher Sicherheit keine Informationen für eine private Funktion geben.


1
2017-11-15 05:34