Ordner "sperren"?
-
Hi,
ich benutze ein Programm, dass sich durch verschiedene Plugins erweitern lässt. Es werden alle Plugins im entsprechenden Ordner geladen.
Ich möchte allerdings selektieren können, welche Plugins geladen werden. Deshalb habe ich ein Programm geschrieben, welches bestimmte nicht benötigte Plugins temporär in einen anderen Ordner verschiebt. Da der Verzeichnisbaum im Plugin-Ordner allerdings immer größer wird und es daher relativ kompliziert wird, Unterordner wegzuverschieben und später wieder an ihren richtigen Ort zurückzuverschieben, habe ich nach einer anderen Lösng gesucht.Um zu verhindern, dass das Programm eine Plugin-Datei, lädt kann ich diese von meinem Programm aus auch einfach geöffnet halten.
Prinzipiell geht es mir darum, bestimmte Dateien (oder besser ganze Ordner) für ein anderes Programm temporär zu "blockieren".Meine Frage ist speziell auch, gibt es prinzipiell eine Möglichkeit, einen Ordner (vielleicht über eine API-Funktion????) zu "sperren"?
Danke schonmal für euere Antworten.
-
Unte NTFS könntest Du dies natürlich mit Berechtigungen lösen. Dann müsstest Du das Programm aber unter einem speziellen User-Account starten.
Du könntest natürlich auch einen File-System-Filter-Driver schreiben...
Aber, warum verwendest Du nicht einfach eine Konfigurationsdatei, wo definiert wird welche Plugins verwendet werden?
-
Oder wennn du richtig Zeit hast ne Art RootKit basteln, alle Windows-Datei-Funktionen hooken und das Verzeichnis für die "Augen der anderen" verschwinden lassen.
Is aber EXTREM aufwändig und steht glaub ich in deinem Fall in keinem Verhältnis zum Nutzen.Greetz
-
Jochen Kalmbach schrieb:
Aber, warum verwendest Du nicht einfach eine Konfigurationsdatei, wo definiert wird welche Plugins verwendet werden?
Das Programm, das die Plugins lädt, ist ja nicht von mir und es stellt leider keine Methoden zur Pluginselektion zur Verfügung.
Unter NTFS mit Berechtigungen zu arbeiten wollte ich nicht, weil das Programm auch unter FAT32 arbeiten soll.
Ich hatte noch nie etwas mit File-System-Filter-Drivers zu tun. Ist das sehr aufwendig? Ist das irgendwo gut bescgieben?
Die andere Möglichkeit, alle Windows-Datei-Funktionen zu hooken. Über soetwas ähnliches habe ich schon mal in einem anderen Zusammenhang nachgedacht, bin allerdings nie ganz dahintergestiegen. Ist wirklich etwas kompliziert.
-
jeanlucpicard schrieb:
Ich hatte noch nie etwas mit File-System-Filter-Drivers zu tun. Ist das sehr aufwendig? Ist das irgendwo gut bescgieben?
SOllte im aktuellen DDK beschrieben sein (heisst ja jetzt KMDF und nicht mehr DDK...)...
http://www.microsoft.com/whdc/driver/wdf/KMDF_pkg.mspx
-
Funktionieren File-System-Filter-Driver nur mit WinNT-basierten Windows-Versionen. Hat sich irgendwo so gelsesen, vielleicht hab ich das aber auch falsch verstanden.
Wenn das der Fall wäre, müsste ich wohl "CreateFile" hooken. Hab schon dafür gegooglet, aber nicht das gefunden was ich mir vorgestellt habe (mit anderen Worten: ich hab die ganze Sache bis jetzt noch nicht ganz verstanden ;)).
Kennt sich da jemand aus oder kennt eine Seite, auf der das beschrieben ist?
-
Über API-Hijacking findest auf codeproject.com tonnenweise Artikel und für dich ist ein CreateFile/OpenFile-Hook wohl der einfachste Weg.
-
Erstmal Danke für eure Antworten.
Mir ist es nun gelungen "CreateFileA", "CreateFileW", "OpenFile" und "_lopen" zu hooken. Habs getestet, die Funktionen werden korrekt blockiert.
Allerdings kann das Programm, für das ich das ganze geschrieben habe, immer noch auf die Plugin-Files zugreifen.
Gibt es denn unter Windows noch andere Möglichkeiten/Funktionen, eine Datei zu öffnen, die ich auch noch blockiren muss?
-
Unter Windows gibt es viele Arten auf Dateien zuzugreifen... Auf DLLs wird i.d.R. nicht per CreateFile zugegriffen, sondern per LoadLibrary... daneben gibt es dann noch File-Mappings usw....
-
Die Plugins sind keine DLLs, von daher kann mir LoadLibrary egal sein. CreateFileMapping hab ich jetzt auch blockiert, hat aber auch nichts gebracht.
Kann man auch Funktionen, wie beispielsweise fopen irgendwie blocken? Würde das mit einem File-System-Filter-Driver funktionieren? Funktionieren diese Drivers auch mit Win9x oder nur NT?
Gibt es sonst noch andere Möglichkeiten mein Problem zu lösen?
-
fopen verwendet CreateFile...
-
Jochen Kalmbach schrieb:
fopen verwendet CreateFile...
Das dachte ich auch. Ich hab dann ein Test-Programm geschrieben, dass einmal auf eine Datei mittels CreateFile und einmel mittels fopen zugreift.
Da CreateFile gehooket ist, funktioniert der Zugriff mit CreateFile nicht, fopen funktioniert jedoch anstandslos.
Alles etwas seltsam
Hat jemand noch Antworten auf meine anderen Fragen?
-
Das liegt an Deiner Art des Hooks... Du hookst vermutlich nur Funktionen Deiner EXE/DLL... damit kannst Du natürlich keine Funktionen von anderen DLLs abfangen...
-
Ich hooke die Exe und alle DLLs, die von der Exe statisch eingebunden werden. Zudem hooke ich noch die vier LoadLibrary(Ex)(A|W)-Funktionen und die dadurch eventuell noch dynamisch geladenen DLLs.
-
Du hast es doch selber nachgewiesen, dass es nicht funktioniert, oder?
Ein sehr guter Artikel über hooks ist hier zu finden:
http://www.codeproject.com/system/hooksys.asp
-
Erstmal danke für den Link, war wirklich sehr informativ.
Meinen Hook habe ich inzwischen so erweitert, dass nun auch fopen korrekt blockiert wird. Allerdings gibt es jetzt andere Probleme. Zum Teil werden andere Programme nicht mehr korrekt aufsgeführt. Da ist wohl irgendwo noch ein Fehler im Code, den ich nicht finde.
Deshalb habe ich mir mal den Source-Code aus dem Artikle angesehen.
Ziemlich kompliziert. Zudem unterstützt mein Compiler noch keine "Shared sections" in DLLs.
Und das Beispiel-Programm startete gar nicht erst auf einem getesteten XP-SP2-Rechner und auf einem mit ME brach es mit einer Fehlermeldung ab. Nur auf einem XP-SP1-Computer lief das ganze.
Ich denke ja nicht, dass das an der Windows-Version liegt (laut Artikel sollte es ja auf allen getesteten PCs laufen), aber wenn das ganze so instabil ist, frage ich mich, ob das überhaupt der Richtige Weg ist?
-
Welchen Compiler hast n da? Überleg vielleicht mal, ob du auf VC++2005 umsteigst (--> ExpressEdition). Obwohl die SharedSections glaub ich ab Win2k nicht mehr nötig sind (<- korrigiert mich, wenn s falsch ist).
Greetz

-
Ich benutze noch irgend eine alte Version des Borland C++ Builders. Auf was anderes wollte ich eigentlich nicht umsteigen (hab mich so an die VCL gewöhnt). Eine neuere Version wollte ich mir schon länger mal zulegen, aber es gab bis jetzt keinen konkreten Anlass...

-
Ich kram den Thread hier nochmal raus.

Ich habe mich in den letzten Wochen etwas intensiver mit dem Thema API-Hijacking auseinandergesetzt, aber ich bekomme keine Implementation hin, die fehlerfrei funktioniert.
Ich habe dann die Beispiele von http://www.codeproject.com/system/hooksys.asp und http://www.codeproject.com/system/Paladin.asp mit "VC++ 2005 (Express Edition)" kompiliert, aber die entstehenden Programme scheinen nicht auf allen Systemen zu laufen, auf denen ich getestet habe (insbesondere unter XP SP2 läuft das ganze sehr instabil - mit SP1 funktionierts besser).
1. Kennt jemand noch zufällig ein funktionierndes Beispiel eines systemweiten File-Functions-Hook (das ich hoffentlich noch nicht kenne
)?
2. Würde man über einen solchen Hook auch Filezugriffe von .Net-Programmen abfangen können?3. Es wurde hier bereits ein "File-System-Filter-Driver" angesprochen. Das klingt eigentlich nach einer guten Lösung. Aber bevor ich mir das KMDF downloade, würde es mich interessieren, ob diese Driver auch unter Win9x laufen?
4. Ich nehme an, ein solcher Driver würde Dateizufriffe jeglicher Programme (also sowohl native Win32- als auch .Net-Anwendungen) unterbinden können, oder ist dem nicht so?
-
Win95 wird schon lange nicht mehr von MS supported und der Support für Win98 läuft dieses Jahr aus.
Für Win9x gab es aber IFSs:
http://www.sysinternals.com/Utilities/NtfsWindows98.htmlFür einen Einstieg siehe:
http://www.microsoft.com/whdc/driver/filterdrv/default.mspxDas IFS-Kit ist bei dem KMDF dabei...
-
Okay, danke erstmal.
Mal schauen wie weit ich komme