ReadProcessMemory - Ablauf
-
Hi,
da ich mich momentan mit dem unterbinden von API-Calls auseinandersertze, würde ich gerne wissen, wie z.B. ein ReadProcessMemory Aufruf abläuft. Bisher habe ich versucht mit OllyDbg herauszufinden wie das ganze aussieht und stellt fest:
+ RPM = kernel32.ReadProcessMemory
->JMP to &API-MS-Win_Core-Memory-L1-1-0.ReadProcessMemory (=KERNELBA.ReadProcessMemory)
-> CALL DWORD PTR DS:[<&ntdll.NtReadVirtualMemory>] (=ntdll.ZwReadVirtualMemory)Das würde bedeuten, dass mit jedem Aufruf von RPM, egal von welchem Programm ausgehen) die Funktion ZwReadVirtualMemory aufgerufen wird. Wenn ich diese Hooken würde, könnte man doch den Zugriff auf den virtuellen Speicher im eigenen Programm von usermode Programmen unterbinden?
Die Funktion müsste man dann mit einem Treiber hooken oder?
Über hilfreiche Antworten würde ich mich sehr freuen! Danke
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C++ (auch C++0x und C++11) in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Wenn du es ganz ausschalten willst - jein.
Dann brauchst du einen Treiber der systemweit alle anderen Programme injected.
Damit Verbunden auch einen Treiber für 64 Bit Systeme.Alle Hooks reihen sich in einer Schlange, sind zufällig Hooks einer zweiten App vor deinem können sie trotzdem aggieren, allerdings ein einfaches Program ohne weiteren Hook wäre blockiert.
-
Also ich würde erstmals vom einfachsten Fall ausgehen, dass die Funktion noch nicht von einem anderen Prozess gehookt wurde.
Ich könnte doch mit einem Kernel-Mode Treiber die Funktion ZwReadVirtualMemory hooken und so feststellen, ob jemand auf meinen Prozess zugreift? Hab ich das richtig verstanden?@thenoname: Danke für deine Antwort
-
Ich kenne das Vorgehen bei Kernel Mode Treibern und Hooks nicht.
Die SDK's wie Detours und EasyHook machen es aber über diese Methode, allerdings benötigen sie eine Zertifizierung des Kernel Mode Treibers sonst wird dieser unter 64Bit Windows nicht geladen.
Im Endeffekt wird aber auf alle OpenProcessMemory (und Co. wie z.B. OpenProcessMemoryEx) Aufrufe gehooked und dann verglichen ob es dein Prozess ist.
Ist er es gibts eine Liste mit zu blockenden Handles die dann wiederum mit dem Handle vom ReadProcessMemory Hook verglichen werden.
So oder so ähnlich ...
-
Vielleicht hilft dir das hier:
http://www.codeproject.com/Articles/13677/Hooking-the-kernel-directly
Ansonsten wäre das Buch: The rookit arsenal von Bill Blunden ganz interessant für dich und davon dann die neusten Auflage. (Das Buch ist aktuell und nicht so veraltet wie mhhm ja wie hiess das Buch noch -.- ich weiss es nicht mehr aber auf dem Deckblatt war ein Samurai mit einem Schwert.^^ Ich meine das Buch war von Greg Hoguland oder so ähnlich.)
-
subverting the windows kernel
-
tRoppl schrieb:
Also ich würde erstmals vom einfachsten Fall ausgehen, dass die Funktion noch nicht von einem anderen Prozess gehookt wurde.
Ich könnte doch mit einem Kernel-Mode Treiber die Funktion ZwReadVirtualMemory hooken und so feststellen, ob jemand auf meinen Prozess zugreift? Hab ich das richtig verstanden?@thenoname: Danke für deine Antwort
Ja kannst du.
-
thenoname schrieb:
...
Alle Hooks reihen sich in einer Schlange, sind zufällig Hooks einer zweiten App vor deinem können sie trotzdem aggieren, allerdings ein einfaches Program ohne weiteren Hook wäre blockiert.
Dann musst du halt schauen das du am Anfang der liste stehst... oder mit einem anderen Trick ein ähnlichen Effekt erzeugst. Es geht alles. Die Frage lautet nur wie... Die Frage lautet grundsätzlich wie!
-
Nekromantie...
-
Martin Richter schrieb:
Nekromantie...
Ja ich weiss, aber ich kann im doch nicht tonnenweise Material in das Hirn pressen wenn er nicht mal einen funktionierenden Treiber am Start hat. Bis dahin ist es schon ein langer und steiniger weg, wenn man vorher noch nie was im Kernelmode gemacht hat.
-
Wieso einen Treiber du kannst auch im Usermode über SetWindowsHookEx in alle Prozesse eine DLL injizieren, die die gewünschte Funktion in der Ntdll hookt. (ich habe z.B mal ZwQueryDirectoryFile gehookt).
-
gaaaaaaaaaaaaaaaaaaaast schrieb:
Wieso einen Treiber du kannst auch im Usermode über SetWindowsHookEx in alle Prozesse eine DLL injizieren, die die gewünschte Funktion in der Ntdll hookt. (ich habe z.B mal ZwQueryDirectoryFile gehookt).
Natürlich geht das, doch wir sprachen noch von was anderem...