AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi [DLL, HID] Zugriff auf DLL ohne Exports
Thema durchsuchen
Ansicht
Themen-Optionen

[DLL, HID] Zugriff auf DLL ohne Exports

Ein Thema von Rollo62 · begonnen am 4. Mai 2017 · letzter Beitrag vom 6. Mai 2017
Antwort Antwort
Seite 1 von 2  1 2      
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#1

[DLL, HID] Zugriff auf DLL ohne Exports

  Alt 4. Mai 2017, 10:44
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

Rollo

Geändert von Rollo62 ( 4. Mai 2017 um 10:48 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: [DLL, HID] Zugriff auf DLL ohne Exports

  Alt 4. Mai 2017, 10:51
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.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#3

AW: [DLL, HID] Zugriff auf DLL ohne Exports

  Alt 4. Mai 2017, 11:22
Hallo TiGü,

danke für den Tipp.
Wars leider nicht: "Fehler beim Zugriff auf OLE-Registrierung".

Rollo
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.139 Beiträge
 
Delphi 12 Athens
 
#4

AW: [DLL, HID] Zugriff auf DLL ohne Exports

  Alt 4. Mai 2017, 11:56
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#5

AW: [DLL, HID] Zugriff auf DLL ohne Exports

  Alt 4. Mai 2017, 12:04
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
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: [DLL, HID] Zugriff auf DLL ohne Exports

  Alt 4. Mai 2017, 12:20
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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.346 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: [DLL, HID] Zugriff auf DLL ohne Exports

  Alt 4. Mai 2017, 12:29
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

Wars leider nicht: "Fehler beim Zugriff auf OLE-Registrierung".
Das heißt evtl. einfach, dass du Delphi nicht mit Adminrechten gestartet hast.

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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#8

AW: [DLL, HID] Zugriff auf DLL ohne Exports

  Alt 4. Mai 2017, 13:23
Hallo Sebastian,

super, danke für die Tipp(s), ist schon Plural

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

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

Geändert von Rollo62 ( 4. Mai 2017 um 13:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Memnarch
Memnarch

Registriert seit: 24. Sep 2010
737 Beiträge
 
#9

AW: [DLL, HID] Zugriff auf DLL ohne Exports

  Alt 5. Mai 2017, 07:57
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.
Da man Trunc nicht auf einen Integer anwenden kann, muss dieser zuerst in eine Float kopiert werden
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
3.908 Beiträge
 
Delphi 12 Athens
 
#10

AW: [DLL, HID] Zugriff auf DLL ohne Exports

  Alt 5. Mai 2017, 16:26
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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:09 Uhr.
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