Nun hab ich Gestern eine, für mich noch unbekannte, Möglichkeit für Detours auf  GameDeception gefunden. Das hier gezeigte Retour-Konzept ist kein Retour im wahrsten sinne, sondern eher ein Debugger. Daher lässt sich die Funktion nicht überschreiben oder ihre Rückgabewert auslesen, jedoch kann man ihre Aufrufargumente ändern.

Man definiert einen Exceptionhandler, dieser ist dafür zuständing, dass die eigene Funktion aufgerufen wird, aber dazu später mehr.

Will man eine Funktion überschreiben, wird das erste Byte mit einer Sperre versehen(mit der Kernel Funktion NtProtectVirtualMemory und dem Parameter PAGE_NOACCESS). Wird nun versucht diese Funktion aufzurufen, wird stattdessen der Exceptionhandler ausgelöst. Dieser ist nun, angand des Pointers der Quelle der Exception, in der Lage zu bestimmen welche Funktion aufgerufen worden war und ggf. das auslösen einer Aktion (z.B. das Aufrufen unserer eigenen Funktion).