2015-04-02 3 views
18

Mein Ziel ist es, beim Ausführen eines Befehls genau zu bestimmen, welche Dateien es liest und schreibt. In Linux kann ich das mit ptrace machen (mit der Arbeit, ähnlich wie strace) und bei freebsd und MacOS kann ich das mit dem ktrace-Systembefehl machen. Was würden Sie verwenden, um diese Informationen in Windows zu erhalten?In Windows, wie kann ich in C verfolgen, welche Dateien ein Kindprozess liest und schreibt?

Meine bisherigen Untersuchungen legen nahe, dass ich entweder die Debugger-Schnittstelle (ähnlich wie ptrace in vielerlei Hinsicht) oder vielleicht ETW verwende. Eine dritte Alternative besteht darin, eine DLL einzufügen, um Systemaufrufe während ihrer Herstellung abzufangen. Leider habe ich nicht die Erfahrung zu erraten, wie schwierig jeder dieser Ansätze sein wird.

Irgendwelche Vorschläge?

+0

Wahrscheinlich ist es ausreichend, w Mit einem GUI-Tool? Versuchen Sie Windows Internals (filemon). – harper

+0

Wie wäre es mit Ressourcenmonitor in Windows 7 oder Process Explorer – GingerJack

+0

Nein, ein GUI-Tool ist nicht ausreichend, ich muss in der Lage sein, dies von meinem Programm zu tun, das in C geschrieben ist (könnte aber C++ verwenden, falls erforderlich). –

Antwort

4

Wie Sie vorgeschlagen haben, ist dies eine ziemlich einfache Aufgabe mit API-Hooking mit DLL-Injektion zu lösen.

Das ist ein ziemlich guter Artikel über das: http://www.codeproject.com/Articles/2082/API-hooking-revealed

ich Sie glauben, mehr aktuelle Artikel über das Thema zu finden.

Sie müssen jedoch wahrscheinlich C++ verwenden, um ein solches Dienstprogramm zu implementieren. Übrigens können Programme die Dll-Injektion deaktivieren, ich konnte diesen Ansatz beispielsweise nicht in der Testversion von Photoshop verwenden.

Sie können also überprüfen, ob Sie DLLs in den gewünschten Prozess mit einer vorhandenen Lösung injizieren können, bevor Sie Ihre eigenen schreiben.

Viel Glück.

4

Leider scheint es keinen einfachen Weg zu geben, Datei-Level-Operationen unter Windows abzufangen.

Hier sind einige Hinweise:

  • Sie könnten versuchen, FileMon von Sysinternals zu verwenden, wenn es genug für Ihre Bedürfnisse ist, oder versuchen, an der Quelle des Werkzeugs könnte
  • Sie Nutzung kommerzieller machen aussehen Software wie Detours - Vorsicht, habe ich nie, dass ich selbst und ich bin nicht sicher, es Ihre Bedürfnisse wirklich

trifft Wenn Sie mit dem es, ein besseres Verständnis und sind nicht Angst wollen Hand tun , die Windows-Art des Abfangens von Datei-IO verwendet eine File System Filter Driver. In Windows ist ein FilterManager eingebettet, der alle Aufrufe des Dateisystems an Minifilter weiterleiten kann.

Um es zu bauen, wird die Schnittstelle mit dem System durch den FilterManager zur Verfügung gestellt, und Sie müssen nur (Minifilter) den Code filtern und installieren, der die eigentliche Filterung tut - hüte dich wieder nie ...

+0

Ich habe angefangen, in die Dateisystem-Minifilter zu schauen, habe aber einige Schwierigkeiten zu sehen, wie sie helfen könnten. Es sieht so aus, als ob der Filter auf dem System installiert werden muss, vielleicht mit Administratorrechten? –

1

Bitte, einen Blick auf die folgenden Artikel nehmen:

http://www.codeproject.com/Articles/950/CDirectoryChangeWatcher-ReadDirectoryChangesW-all 

Es ist ein sehr alt, aber laufe Weg Verzeichnisänderungen zu beobachten.

+0

Es scheint mir, dass dieser Ansatz es nicht ermöglicht, herauszufinden, welcher Prozess die Modifikationen durchgeführt hat. Außerdem sieht es so aus, als ob es keinen Mechanismus zum Bestimmen der gelesenen Dateien gibt. –

1

Microsoft besitzt eine Reihe von Tools namens SysInternals. Es gibt ein Programm namens Process Monitor, das Ihnen alle Dateizugriffe für einen bestimmten Prozess zeigt.Das ist sehr wahrscheinlich, was Sie wollen.

Verwandte Themen