Zitat:
Also du meinst ich hooke nur die Weiterleitfunktion und nicht die echte FindNextFileA?
Das war mehr oder weniger beabsichtigt... Denn ich bekomme auf FindNextFileA keinen Schreibzugriff..
Die Weiterleitungsfunktion wird nur von deinem Delphi-Modul verwendet. Das heißt dein Hook wirkt nur, wenn du aus der
DLL FindNextFileA aufrufst, was wohl nicht beabsichtigt ist.
Um zu hooken, reicht PAGE_EXECUTE_WRITECOPY aus. PAGE_EXECUTE_READWRITE würde bedeuten, dass du auch in allen anderen Prozessen in einem Rutsch hooken kannst (denn deren Pages, in denen Kernel32.dll liegt, sind die selben, in denen bei dir Kernel32.dll liegt - eine enorme Speicherersparnis), was aus Sicherheitsgründen äußerst fragwürdig wäre. PAGE_EXECUTE_WRITECOPY genügt, um ausschließlich in deinem Prozess Speicher zu überschreiben - dein Prozess erhält eine private Kopie der vorher gemeinsam genutzten Speicherseite.
Zitat:
Zitat von
Apollonius:
Der Rest der Funktion ist halbwegs korrekt, auch wenn man sich das WriteProcessMemory sparen könnte.
Warum könnte ich mir das sparen?
Wir sind immer noch in unserem eigenen Prozess, also brauchen wir kein WriteProcessMemory.
Zitat:
Zitat von
Apollonius:
Abschließend weise ich darauf hin, dass diese Hooking-Technik nicht verwendet werden sollte, da es Probleme gibt, falls ein Thread FindNextFile aufruft während du gerade hookst. Stattdessen überschreibt man gewöhnlich für jedes Modul einzeln die vom Windows-Loader an eine bestimmte, in der
PE-Datei angegebene Stelle eingefügte Adresse der zu hookenden Funktion.
Verstehe ich leider nicht ganz
Du kannst nur vier Bytes auf einmal schreiben. Daher musst du in zwei Durchgängen schreiben. Was passiert nun, wenn du den ersten Schreibvorgang gerade beendet hast und dein Thread nun zugunsten eines Threads, welcher FindNextFile aufruft, unterbrochen wird?