AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Überwachen welche Dateien ein Programm öffnet?
Thema durchsuchen
Ansicht
Themen-Optionen

Überwachen welche Dateien ein Programm öffnet?

Ein Thema von Hedge · begonnen am 22. Okt 2009 · letzter Beitrag vom 22. Okt 2009
Antwort Antwort
Seite 1 von 2  1 2      
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#1

Überwachen welche Dateien ein Programm öffnet?

  Alt 22. Okt 2009, 13:17
Ich möchte überwachen welche Dateien ein einzelnes Programm öffnet ohne große Performance-Einbußen beklagen zu müssen.

Luckie hat bereits einen Dateisystemtreiber vorgeschlagen, aber ich kann nicht davon ausgehen, dass es beim Anwender möglich ist einen zu installieren, weswegen es ohne gehen muss.

Hat Jemand eine Idee wie man das machen kann?
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Überwachen welche Dateien ein Programm öffnet?

  Alt 22. Okt 2009, 13:34
Warum fängst du dazu jetzt einen neuen Thread an?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Überwachen welche Dateien ein Programm öffnet?

  Alt 22. Okt 2009, 13:39
in diesem Programm einfach "alle" Dateifunktionen (APIs) hooken, womit man Dateien öffnen kann
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Überwachen welche Dateien ein Programm öffnet?

  Alt 22. Okt 2009, 13:53
Schau dir doch mal den Process Monitor an.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Hedge

Registriert seit: 30. Jun 2007
278 Beiträge
 
Delphi 2009 Professional
 
#5

Re: Überwachen welche Dateien ein Programm öffnet?

  Alt 22. Okt 2009, 14:21
Danke Bernhard,
Der Process-Monitor hilft mir sehr weiter. Damit kann ich schonmal schauen wie ich Filtern muss und nach welchen Regeln die Daten die ich brauche ermittelt werden sollen.
Super Tipp. Hab schon lange mal so ein Programm gebraucht.

@himitsu: Alle = ntcreatefile, ntopenfile, ntreadfile oder fällt dir noch was Spannendes ein?

@Luckie: Sorry, eine meiner Zwangsneurosen, wenn ich nen Thread erstelle, sich aber kurz darauf die eigentliche Frage ändert (erst wollte ich wissen wie es global gemacht wird, jetzt aber nur noch lokal auf 1 Prozess bezogen).
٩๏̯͡๏)۶
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Überwachen welche Dateien ein Programm öffnet?

  Alt 22. Okt 2009, 18:14
Zitat von Hedge:
Luckie hat bereits einen Dateisystemtreiber vorgeschlagen, aber ich kann nicht davon ausgehen, dass es beim Anwender möglich ist einen zu installieren, weswegen es ohne gehen muss.
File System Mini Filter ist der einzig wirklich saubere und verlässliche Weg. Es bestünde zwar die Möglichkeit mit Hilfe von Usermode Hooks einen Teil der Zugriffe zu überwachen (eigentlich alle APIs zum Zugriff auf Dateien enden in NtCreateFile oder NtOpenFile), allerdings wirst Du je nach Situation auch für die Usermode Hooks Admin Rechte benötigen. Entsprechend ist die Aussage, daß Du nicht davon ausgehen kannst einen Treiber installieren zu können hinfällig.

Außerdem ist es trivial die entsprechenden System Services an Deinen Hooks vorbei direkt anzusprechen ohne, daß Deine Hooks überhaupt eine Chance hätten dies zu bemerken.
Fridolin Walther
"While Mr. Kim, by virtue of youth and naiveté, has fallen prey to the inexplicable need for human contact, let me step in and assure you that my research will go on uninterrupted, and that social relationships will continue to baffle and repulse me."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Überwachen welche Dateien ein Programm öffnet?

  Alt 22. Okt 2009, 20:50
Aber wenn er nur überwachen möchte was EIN BESTIMMTES Programm macht, dann könnten die Hooks ausreichen.
Und um zu schauen welche APIs dieses Programm nutzt, die Liste der statisch gelinkten APIs kann man aus der EXE und den DLLs auslesen und ein Hook auf GetProcAdress liefert notfalls den Rest.

OK, hier gibt es ja irgendwo einen Code, welcher sowas ohne GetProcAdress macht, aber das sollte ja nicht der Normalfall sein und ist demnach zuerst mal zu ignorieren.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Fridolin Walther

Registriert seit: 11. Mai 2008
Ort: Kühlungsborn
446 Beiträge
 
Delphi 2009 Professional
 
#8

Re: Überwachen welche Dateien ein Programm öffnet?

  Alt 22. Okt 2009, 21:24
Zitat von himitsu:
Aber wenn er nur überwachen möchte was EIN BESTIMMTES Programm macht, dann könnten die Hooks ausreichen.
Ein Bestimmtes könnte reichen. Ein Beliebiges nicht. Ein Bestimmtes könnte man reversen und so sicher gehen, daß garantiert niemals System Services direkt aufgerufen oder Hooks zurück gebogen werden. Bei einem Beliebigen ist das nicht möglich. Allerdings würde ich fast ausschließen, daß es um ein bestimmtes Programm geht. Denn wenn er das bestimmte Programm eh schon reversed um heraus zu finden welche APIs genau genutzt werden um seine Hooks wasserdicht zu machen, kann er auch selbst nachschauen welche Dateien die Anwendung öffnet. Da brauch er dann keine Hooks für .

Zitat von himitsu:
Und um zu schauen welche APIs dieses Programm nutzt, die Liste der statisch gelinkten APIs kann man aus der EXE und den DLLs auslesen und ein Hook auf GetProcAdress liefert notfalls den Rest.

OK, hier gibt es ja irgendwo einen Code, welcher sowas ohne GetProcAdress macht, aber das sollte ja nicht der Normalfall sein und ist demnach zuerst mal zu ignorieren.
Du irrst. Ich empfehle Dir Dir mal die ntdll.dll in nem Disassembler anzuschauen. Dort wirst Du nämlich sehen, daß die ganzen APIs nur Stubs sind:
http://img514.imageshack.us/img514/1...filedisasm.png

Wie Du siehst wird in EAX eine Nummer gepackt (service id). Diese Nummer wird vom System Service Dispatcher genutzt um innerhalb der System Service Dispatching Table die zur ID passende Kernel Mode Funktion zu finden. In EDX wird die Adresse der Parameter auf dem Stack aufbewahrt. Danach wird in den Kernel Mode gesprungen (an der Adresse zu der gesprungen wird befindet sich je nach Plattform ein anderer Opcode um im Kernel Mode zu landen, bei Intel SYSENTER, bei AMD SYSCALL etc.). Prinzipiell funktioniert übrigens auch weiterhin noch int 2Eh (wurde bis Windows 2000 oder irgend ein XP SP benutzt um in den Kernel Mode zu springen, da die spezifischen Opcodes damals noch nicht vorhanden waren).

Das Problem ist jetzt, daß mich kein Usermode Hook der Welt davon abhalten kann, diese 3 simplen Schritte selbst durchzuführen ohne eine Funktion aufzurufen. Wo kein Funktionsaufruf da ist, gibts halt letztlich auch keinen Funktionsaufruf der hookbar wäre. Natürlich könnte man wieder reversen, die eigene NtCreateFile Implementation im Code ausmachen und die Adresse gezielt hooken, aber da wären wir wieder am Beispiel oben. Wenn ich eh schon alles Reversen muss, kann ich die für mich interessanten Informationen auch direkt entnehmen ohne Hooks .

Mehr Informationen dazu gibts hier:
http://web.archive.org/web/200603152...NativeApi.html
Fridolin Walther
"While Mr. Kim, by virtue of youth and naiveté, has fallen prey to the inexplicable need for human contact, let me step in and assure you that my research will go on uninterrupted, and that social relationships will continue to baffle and repulse me."
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#9

Re: Überwachen welche Dateien ein Programm öffnet?

  Alt 22. Okt 2009, 22:16
Soweit ich weiß benutzt PM einen Treiber, um an mehr Infos zu kommen. Im Kernelmodus gibt es auch eine FilterAPI, um Funktionen zu filtern.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Überwachen welche Dateien ein Programm öffnet?

  Alt 22. Okt 2009, 22:24
@Fridolin Walther:
Klar ist sowas nicht bei jedem beliebigen Programm möglich, aber ich gehe einfach mal davon aus, daß bestimmt 99% aller Programme nur ganz stinknormale API-Aufrufe nutzen und keine Anstalten machen etwas gegen Hooking zu unternehmen.

(OK, abgesehn "größerer" Spiele, welche das Cheaten unterbinden wollen und einiger Programmierer, welche glauben ihr Programm sei soooooo gut, daß es extrem schüzenzwert wäre)

Und demnach muß masn nicht unbedingt jeden kleinen Fall beachten und gleich mit Treibern drauf losgehn.
Willst du wirklich unmassen fremder Treiber in deinem System, welche auch noch die Stabilität beeinträchtigen können, oder denkst du nicht, daß bei "einfachen" Programmen auch mal nur "einfache" Wege reichen?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  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 02:48 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