[C++] VTable Hook

10/14/2011 00:14 Tyrar#1
schnell erklärt was das hier is:
eine "andere" methode vtable funktionen zu hooken, die meisten hooken direkt die funktion!
diese funktion hier nicht, es wird nur der vtable eintrag überschrieben... vorteil: es wird keine backup funktion benötigt da die gehookte funktion nicht + geändert wird! zwar nur eine kleinigkeit, finde ich trotzdem einfacher als immer CreateHook((void*)VTable[4], hookVTable4,true,true); zu callen!

ich werds nicht weiter erklären, man sollte es verstehen:
Code:
PBYTE HookVTable(DWORD** VTablePtr, int VTableIndex, PBYTE HookPtr) {
DWORD oldProtect;
VirtualProtect((void*)((*VTablePtr)+(VTableIndex*sizeof(DWORD))),sizeof(DWORD),PAGE_EXECUTE_READWRITE,&oldProtect);
PBYTE original=((BYTE*)(*VTablePtr)[VTableIndex]);
(*VTablePtr)[VTableIndex]=(DWORD)HookPtr;
VirtualProtect((void*)((*VTablePtr)+(VTableIndex*sizeof(DWORD))),sizeof(DWORD),oldProtect,&oldProtect);
return original;
}
hoffe mal dass es wenigstens manchen hilft ;)

edit: nochmal die parameterlist (wobei man selbst drauf kommen sollte was die bedeuten :))
VTablePtr - pointer zur vtable (in den meisten fällen von FindPattern etc.)
VTableIndex - index der zu hookenden funktion
HookPtr - pointer zur funktion die gecalled werden soll
10/15/2011 12:37 MrSm!th#2
Quote:
CreateHook((void*)VTable[4], hookVTable4,true,true); zu callen!
Aha, wer sagt, dass man das immer machen muss? Hab ich noch nie getan.
Quote:
ich werds nicht weiter erklären, man sollte es verstehen:
Dann ist das auch kein Tutorial und verfehlt den Sinn der Sektion.

Ganz nebenbei kann sich jeder diese Funktion in Sekunden selbst schreiben, der weiß, was eine VTable ist.

#closed