Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [DLL, HID] Zugriff auf DLL ohne Exports (https://www.delphipraxis.net/192605-%5Bdll-hid%5D-zugriff-auf-dll-ohne-exports.html)

Rollo62 4. Mai 2017 10:44


[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:
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;
Ich hätte da mal ein paar Fragen an die DLL/HID Experten:
  • DependencyWalker zeigt Links zu vielen 32-Bit Funktionen (Kernel32, ...),
    deshalb gehe ich davon aus das die DLL auch 32-Bit ist.
    Ich habe versucht da mit Win32-Test zuzugreifen, oder muss ich das irgendwie anders machen (Stichwort WoW64) ?
  • Wenn die DLL 32-Bit im 64-Bit System ist, können dann 32/64 Bit Apps beide damit arbeiten ohne Verrenkungen ?
  • Kann es sein das eine DLL keine Funktionen per GetProcAddress mit Index s.o. exportiert, und trotzdem
    in VS oder .NET linkbar ist ?
  • Braucht ein HID Controller eine solche Geräte-DLL, wenn ja gibt es da vielleicht neuere Registierungsmethoden
    für .NET die ich nicht kenne ?
  • Soweit ich weiis wird .NET möglichst nicht mit unmanaged DLLs arbeiten, oder gibt es "managed" DLLS für .NET
    mit anderem Mechanismus ?
    Wenn ja, wie könnte ich das feststellen. ?
  • Gibt es vielleicht ein Tool was solche versteckten Funktionen-Exports automatisch disassemblieren könnte
    (ohne das man es wirklich selber debuggen müsste, dafür habe ich zu wenig Zeit) ?

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

TiGü 4. Mai 2017 10:51

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.

Rollo62 4. Mai 2017 11:22

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

himitsu 4. Mai 2017 11:56

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.

Rollo62 4. Mai 2017 12:04

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

TiGü 4. Mai 2017 12:20

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.

jaenicke 4. Mai 2017 12:29

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:
http://ilspy.net/

Was sagt denn der DLL Export Viewer?
http://www.nirsoft.net/utils/dll_export_viewer.html

Zitat:

Zitat von Rollo62 (Beitrag 1370152)
Wars leider nicht: "Fehler beim Zugriff auf OLE-Registrierung".

Das heißt evtl. einfach, dass du Delphi nicht mit Adminrechten gestartet hast.

Zitat:

Zitat von Rollo62 (Beitrag 1370167)
Trotzdem sollten doch GetProcAddress(dll, Index) mit Index doch etwas zurückliefern, oder nicht ?

Das geht nur, wenn auch entsprechende Indizes für die Funktionen definiert sind. Und die müssen auch nicht bei 1 oder so starten.

Rollo62 4. Mai 2017 13:23

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 CrossTalk gesehen, muss ich noch checken, oder geht es auch einfacher ?


Zitat:

Ich kann mir kaum vorstellen, dass der Hersteller da wirklich null Doku ...
Ja in einer normalen Welt ist das so, aber wir haben mit Geräten auf China zu tun.
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 hier wird es über einen Wrapper gemacht, der die Funktionen durchreicht, ich wollte deswegen aber nicht unbedingt Vs installieren.
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

Memnarch 5. Mai 2017 07:57

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.

Rollo62 5. Mai 2017 16:26

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 Com-Interop ?
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 12:16 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz