Fremde .dll ansprechen/benutzen bzw. vorab Syntax herausfinden

Hallo,

ich habe wieder einmal eine sehr komplizierte Frage.

Wie kann man denn eine fremde .dll ansprechen/steuern/benutzen,
wenn man nicht einmal die Deklaration/den zugehörigen Syntax kennt?

Benutzt man API-SPY, PE-EXPLORER oder Dependency-Walker,
dann kann man ja sehr schön die numerisch/alphabetisch aufgelisteten
Funktionen in den Exports erkennen. Auch im HexEditor kann man diese Funktionen einfach herauslesen. Soweit so gut, denn dies ist kein Problem.

Nimmt man jetzt "übliche" .dll her (z.B. advapi32.dll usw.) und lädt diese,
dann kann man neben den Funktionen auch den Syntax lesen. Aufgrund
des Syntax kann man dann in VB6, VB.NET, Delphi, C++ usw. einen Code schreiben bzw. diese .dll ansteuern. Klar, meistens gibt es auch noch eine Dokumentation zur .dll. Soweit so gut...

Ja, was mache ich denn nun, wenn ich eine fremde .dll benutzen möchte,
die Funktionen zwar erkenne/sehe/auslesen kann, aber beim Syntax "nichts" bzw. "(not available)" steht. Besagte Fremdanwendungen benutzen ja die .dll. Demnach "muss" es ja auch einen Aufruf und eine Deklaration gehen.

Nur wie finde ich dies nun heraus? Ich kann ja nicht alle Variablen durchgehen und irgendetwas zuweisen, wenn ich nicht einmal weiß was Sache ist. Wie geht man da vor bzw. wie kann man fremde .dlls dennoch benutzen?

Mir geht es einfach darum, dass es bereits fertige .dlls gibt und ich Funktionen nutzen möchte.

Danke


Hier die .dll
[URL="http://linkcrypt.ws/dir/434u2zka187hw68"]http://linkcrypt.ws/dir/434u2zka187hw68[/URL]
 
Zuletzt bearbeitet:
Disassemble doch die DLL mal mit objdump o.ä..
Dann ordne die Exports der DLL mal den jeweiligen Addressen im Code zu, dann hast du deine Funktionen aus denen du Rückschluss auf benutzte Variablen und Parameter ziehen kannst.

Wäre mein Vorschlag :)
 
Hallo fabuloes,

vielen Dank für deinen Rat und deine Antwort.
Allerdings wäre mir sehr damit geholfen, wenn du mir evtl. ein Beispiel als Anreiz/Tipp geben könntest.

Die Funktionen habe ich ja bereits im PE-Explorer, API-SPY, Dependency-Walker usw. erkannt.

Aber wie kann ich denn Rückschlüsse auf verwendete Parameter und Variablen schließen? Da stehe ich jetzt im Moment etwas auf dem Schlauch.

Kann man wohl deutlich erkennen, ob es "Byval as Long, Byval as String, Bval as Integer, As Long, Byref" usw. ist? Echt? Also, dies wundert mich, denn dann bin ich scheinbar doch noch sehr weit am Anfang ;-(
Nun denn, ich lerne immer stets dazu und bin wissbegierig.

Nehmen wir zum Beispiel die im Beispiel genannte .dll (meine Problem .dll):
Dort steht zum Beispiel bei Ord #3 die Funktion "SM_VstLinkGetUniqueID".

Und du meinst jetzt, dass ich die kompletten Parameter mit OllyDBG auslesen kann? Wow. Soweit war ich dann doch noch nicht.

Also kann ich dann komplett ein Ergebnis, wie z.B:

Private Declare Function SM_VstLinkGetUniqueID LIB "vstdll.dll" (Byval path as String, Byval ID as Integer)

ableiten?

Nur ein Beispiel^^


Noch eine Zusatzfrage:
Was mache ich denn, wenn ich Funktionen erkenne und auch noch den dazugehörigen Syntax in c++, aber die Funktionen mit Sonderzeichen und Kauderwelsch beginnen und so im Code nicht deklariert werden können?

Zum Beispiel gibt es in einer anderen .dll Funktionen, die eben alle mit "??" beginnen.

Wenn ich nun so deklarieren möchte:
Private Declare Function ??ܧ%UniqueVSTID@mm78 LIB "123.dll"


Dann haut mir VisualBasic einen Fehler hinein!


Okay, Danke erst einmal. Ich teste/taste mich einmal heran und versuche erst einmal Problem 1 zu lösen.


P.S.
Tutorials und Links sind gerne gesehen!
objdump kannte ich noch gar nicht. Suche ich gerade...
 
Zuletzt bearbeitet:
Dein Request ist mit hoher Wahrscheinlichkeit illegal.

SM_VstLinkGetUniqueID ->
Company: Steinberg Media Technologies AG
Decription: Virtual Studio Technology Engine

Trotzdem was inhaltliches:
Und du meinst jetzt, dass ich die kompletten Parameter mit OllyDBG auslesen kann? Wow. Soweit war ich dann doch noch nicht.
Kannst du nicht. Weil das da nicht drinsteht, sondern eben durch Hinweise im Assembler klar wird. Dazu solltest du Assembler gut lesen können.
 
Die "übliche" Vorgehensweise ist Reverse Engineering.
Entweder disassembliert man die DLL und "rät" die Parameter, so wie die Rückgabewerte (klappt i.d.R nur bei einfachen Funktionen).
Oder man debuggt die Anwendung, die die DLL nutzt - speziell die Aufrufe. Da man die Übergabeparameter vor und nach dem Aufruf einsehen kann, wird das "Ratespiel" um einiges leichter.

Wenn die Funktionen so anfangen:
Code:
??ܧ%UniqueVSTID@mm78 LIB
tippe ich darauf, dass es sich um C++ Classenmethoden/exporte handelt.
Diese sollten eigentlich von Dependency-Walker oder CFFExplorer "decodiert" werden können:
z.B
Code:
?wclog@std@@3V?$basic_ostream@_WU?$char_traits@_W@std@@@1@A
->
class std::basic_ostream<wchar_t,struct std::char_traits<wchar_t> > std::wclog

PS:
Bei "unleserlichen" Bezeichnern mit Sonderzeichen könnte man entweder versuchen Escapezeichen/ASCII Codierung zu nutzen oder zur Laufzeit importieren (LoadLibary und GetProcAddress) und aufrufen:
Dynamic-link library - Wikipedia, the free encyclopedia
 
Hallo,

ich wollte mich noch bei "ENKORE" und "CDW" bedanken.
Mein THREAD ging irgendwie unter und ich bin leider damit noch nicht
weitergekommen.

Dennoch "DANKE".
 
Zurück
Oben