![]() |
Datei überwachen / Auf DLL-Start reagieren
Längere Geschichte: Ziel ist es, eine kleine "Firewall" zu schreiben, die Aufrufe von ODBC-Funktionen unterbindet.
Konkret sollen ODBC-Anfragen von EXCEL und ACCESS über einen bestimmten Treiber verhindert werden. Der Aufruf von anderen, explizit bekannten Programmen soll weiterhin gestattet werden. Erster Ansatzpunkt war die jeweilige Prozessliste mit den entsprechenden geladenen Modulen in einer Schleife auszuwerten (die ODBC-DLL wird dann auch entsprechend angezeigt). Dies würde jedoch unnütz Rechenleistung verpulvern, zudem ja nur in einem gewissen Zeitintervall auf das Laden der DLL reagiert werden kann. Geht das nicht doch etwas eleganter, evtl. über einen Systemhook? Hat jemand evtl. eine andere Idee? Danke schonmal :) |
Re: Datei überwachen / Auf DLL-Start reagieren
Warum nicht die DLL ersetzen?
Die DLL ist der ODBC-Treiber, aber die Aufrufe werden an die umbenannte originale DLL weitergeleitet. In der DLL kann man nun beim Laden der DLL (PROCESS_ATTACH bzw THREAD_ATTACH) den Pfadamen des aufrufenden Programms herausbekommen und entsprechend reagieren. Alternativ macht man das in den einzelnen Funktionsaufrufen. GetModuleFileName(0, ...) liefert auch in der DLL den Namen des aufrufenden EXEs. |
Re: Datei überwachen / Auf DLL-Start reagieren
Das wäre auch eine Idee. Beim Aufruf der DLL entsprechend zu reagieren dürfte nicht wirklich das Problem sein. Aber wir kann ich die entsprechenden Funktionsaufrufe Transparent weiterleiten? Ich denke es macht wenig Sinn, sämtliche Funktionsaufrufe vorher in Erfahrung zu bringen und pro Aufruf eine Weiterleitungsfunktion zu erstellen.
Oder mache ich mir da wieder zu viele Gedanken? |
Re: Datei überwachen / Auf DLL-Start reagieren
Doch genau das. Es muss doch irgendwo ein ODBC API geben.
|
Re: Datei überwachen / Auf DLL-Start reagieren
Soweit bin ich mittlerweile auch, aber mir fehlen noch header-files und die dazugehörige Delphi-Umsetzung da die Funktionen mit ODBC-spezifischen Datentypen arbeiten die Delphi von Haus aus scheinbar nicht kennt.
Das wären knapp 30 Funktionen, eine durchaus machbare Anzahl. |
Re: Datei überwachen / Auf DLL-Start reagieren
Da kann man bestimmt ein bischen bescheissen. Ich bin sicher es werden nur Zeiger auf Strukturen uebergeben.
Da man die Strukturen nicht veraendern will, kann man einfach mit Pointer arbeiten. Einfach nur weiterreichen. |
Re: Datei überwachen / Auf DLL-Start reagieren
Wenn du beliebige DLL-Starts unterbinden willst oder eben darüber benachrichtigt werden willst, kannst du mit PsSetLoadImageNotifyRoutine() und einem Treiber einiges reißen. Ansonsten wohl nur dann, wenn du den Prozeß, welcher die DLL lädt kontrollieren kannst und die DLL nicht implizit (statisch) geladen wird.
|
Re: Datei überwachen / Auf DLL-Start reagieren
Zitat:
Ja, Funktionshook auf loadLibrary(Ex) ist auch nicht so super-schön, da du dich in sämtliche Prozesse einklinken müßtest. |
Re: Datei überwachen / Auf DLL-Start reagieren
Das ist das Schöne bei PsSetLoadImageNotifyRoutine() - du wirst nämlich "zurückgerufen" und entscheidest anhand des Objektes, ob du interessiert bis irgendwas zu machen (z.B. RT-Patches oder Laden verhindern usw.).
|
Re: Datei überwachen / Auf DLL-Start reagieren
Mag sein, aber die Nachteile für einen reinen Delphiprogrammierer sind dabei auch nicht von der Hand zu weisen ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:35 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