Einzelnen Beitrag anzeigen

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, 22: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