![]() |
[DLL, HID] Zugriff auf DLL ohne Exports
Hallo zusammen,
ich habe hier eine DLL von einem Gerät bekommen, das sich als HID Device ansprechen lassen soll. Das HID Device kann man auch sehen und ansprechen, nur leider soll der Zugriff über besagte DLL erfolgen. Natürlich nur die DLL, und keine .H oder .def Datei vorhanden. Die DLL hat aber keinerlei Exports, weder DLL-Tools oder DependencyWalker können etwas erkennen. Ich habe versuche die Funktionen per Index/Order zu enumerieren, es kommt aber gar nichts dabei heraus (andere DLLs lassen ihre Funktionen damit wunderbar auflisten).
Delphi-Quellcode:
Ich hätte da mal ein paar Fragen an die DLL/HID Experten:
procedure TForm1.Button3Click(Sender: TObject);
var LRes: LPWSTR; pwc: PWideChar; begin if FLib <> 0 then begin repeat Button3.Tag := Button3.Tag + 1; LRes := MakeIntResource( Button3.Tag ); pwc := PWideChar( LRes ); Memo1.Lines.Add( 'GetProcAddress (' + Button3.Tag.ToString + ') ' ); FProc := GetProcAddress(FLib, pwc ); if FProc <> nil then begin Memo1.Lines.Add( '--> success 0x' + IntToHex( Cardinal( FProc ) ) ); end else begin Memo1.Lines.Add( '--> failed ' ); end; until (FProc = nil); end; end;
Für eure Einschätzung wäre ich sehr dankbar, sorry für die viellen blöden fragen. Aber ich habe die letzten Jahre DLLs möglichst verbannt (solange bis mir dann doch wieder diese Dinos über den Weg laufen). Und dann noch DLLs ohne jegliche Dokumentation, das ist für mich der Horror hoch drei :stupid: Rollo |
AW: [DLL, HID] Zugriff auf DLL ohne Exports
Vielleicht eine COM-DLL?
Gehe mal in der IDE (nachfolgend englisch, bei dir wahrscheinlich deutsch) auf Component -> Import Component -> Import a Type Library -> Button Next -> Button Add -> deine DLL auswählen -> Wenn erfolgreich geladen und keine Fehler-MessageBox hochploppt -> Next -> Create Unit -> Finish. |
AW: [DLL, HID] Zugriff auf DLL ohne Exports
Hallo TiGü,
danke für den Tipp. Wars leider nicht: "Fehler beim Zugriff auf OLE-Registrierung". Rollo |
AW: [DLL, HID] Zugriff auf DLL ohne Exports
Für eine COM-Registrierung braucht es aber auch Exports ... die der Registrierungsfunktionen.
Wenn garnichts da ist, dann kann man sie nirgendwo registrieren. (RegSvr32 usw.) Und auch die bekannten DLL-Hosts wollen einen Export, den sie aufrufen können. Das Einzige was möglich wäre, wenn man die DLL blind läd (LoadLibrary) und sie sich selbt irgendwo zur/während Laufzeit registriert und man dann andere Schnittstellen verwendet. z.B. global registrierte COM-Objekte. Wenn es beim LoadLibrary nicht knall, dann ist die DLL schonmal 32 Bit. |
AW: [DLL, HID] Zugriff auf DLL ohne Exports
Ok, dankesehr.
Eine DLL ganz ohne Exports macht für mich auch keinen Sinn, aber deine Idee ist eine Art Loader für weitere DLLs. Könnte sein, weil DependencyWalker etwas meckert das LazyLoad DLL fehlen würde. Ich dachte aber das möglicherweise wenn man die Exports nicht angibt, dann eben nur statisch linken kann. Könnte das sein ? Trotzdem sollten doch GetProcAddress(dll, Index) mit Index doch etwas zurückliefern, oder nicht ? Rollo |
AW: [DLL, HID] Zugriff auf DLL ohne Exports
Um was für eine DLL handelt es sich denn?
Ich kann mir kaum vorstellen, dass der Hersteller da wirklich null Doku zu seinen Gerät rausgibt. |
AW: [DLL, HID] Zugriff auf DLL ohne Exports
Vielleicht ist es eine .NET Assembly? Die haben nicht unbedingt Win32 Exporte. Und solch eine Ansteuerung wäre durchaus üblich.
// EDIT: Link vergessen, damit kannst du versuchen die DLL zu laden: ![]() Was sagt denn der DLL Export Viewer? ![]() Zitat:
Zitat:
|
AW: [DLL, HID] Zugriff auf DLL ohne Exports
Hallo Sebastian,
super, danke für die Tipp(s), ist schon Plural :thumb: Mit ILSpy zeigt es was an. NirSoft u.ä. hat nichts gezeigt, das hatte ich schon vorher probiert. Ich hatte schon vermutet das es eine .NET Library ist ,aber ich dachte das die auch normale Exports haben sollte. Welchen Mechaniscmus nehmen die denn dann dafür ? Wie bekäme man denn so eine DLL in Delphi gelinkt ? Ich habe es als jetzt als Admin mit "Install Components/Import .NET Assembly" versucht, bekomme aber Fehler "{} is not a valid GUID value". Ich habe ![]() Zitat:
Da werden um die simpelsten Dinge unveräusserliche Betriebsgeheimnisse gemacht. Das ist eben deren Kultur, das sie gerne aus Mücken Elefanten machen :stupid: Edit: Also ![]() Gibt es eine einfache Möglichkeit unter Delphi/CBuilder einen Wrapper dafür zu schreiben ? Es soll auch Möglichkeit über COM geben, aber das ist womöglich noch mehr Frickelei. Rollo |
AW: [DLL, HID] Zugriff auf DLL ohne Exports
Mir fallen die APIs gerade nicht mehr ein, aber du kannst .Net binaries in einen unmanaged Prozess laden. Dazu lässt du windows die CLR in deinem Prozess initialisieren und kannst später per Reflection drauf zugreifen.
|
AW: [DLL, HID] Zugriff auf DLL ohne Exports
Hallo Memnarch,
hört sich abenteuerlich an, aber was für APIs meinst du genau, welche von Windows ? Meinst du sowas wie ![]() Ich denke da muss ich die .NET Assembly.dll entsprechend vorbereiten, oder nicht ? Genau da habe ich keine Sourcen für. Rollo |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:53 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz