OldSchoolHack

Register / Login English

[C++]gehookte Funktion nochmal hooken

icon Thread: [C++]gehookte Funktion nochmal hooken

Join Date: Aug 2007

Posts: 8643

User-Rating:

199 positive
33 negative
Hallo,

wer schonmal versucht hat eine gehookte Funktion nochmal zu hooken, der weiß, das crasht. Problematisch wird das ganze, wenn man die Funktion unbedingt braucht, so brauche ich z.B. die Funktionen GetCursorPos und SetCursorPos für mein Ingame GUI. Normalerweise ist das kein Problem, aber xFire oder das STEAM Overlay hooken die Funktionen auch. Wenn man versucht die dann nochmal zu hooken, stürzt das Programm ab, weil die Sprungadresse des alten Hooks in eurem "Backup" nicht mehr funktioniert. Deswegen habe ich heute eine neue Funktion geschrieben, mit der man auch gehookte Funktionen nochmal hooken kann. Dazu wird einfach eine neue Sprungadresse für den alten Hook berechnet und dann eingebaut. Damit läufts dann.

TEXT Code:
  1. void *SafeDetourFunc(BYTE *src, const BYTE *dst, const int len)
  2. {
  3. BYTE *jmp;
  4. DWORD dwback;
  5. DWORD jumpto, newjump;
  6.  
  7. VirtualProtect(src,len,PAGE_READWRITE,&dwback);
  8.  
  9. if(src[0] == 0xE9)
  10. {
  11. jmp = (BYTE*)malloc(10);
  12. jumpto = (*(DWORD*)(src+1))+((DWORD)src)+5;
  13. newjump = (jumpto-(DWORD)(jmp+5));
  14. jmp[0] = 0xE9;
  15. *(DWORD*)(jmp+1) = newjump;
  16. jmp += 5;
  17. jmp[0] = 0xE9;
  18. *(DWORD*)(jmp+1) = (DWORD)(src-jmp);
  19. }
  20. else
  21. {
  22. jmp = (BYTE*)malloc(5+len);
  23. memcpy(jmp,src,len);
  24. jmp += len;
  25. jmp[0] = 0xE9;
  26. *(DWORD*)(jmp+1) = (DWORD)(src+len-jmp)-5;
  27. }
  28.  
  29. src[0] = 0xE9;
  30. *(DWORD*)(src+1) = (DWORD)(dst - src) - 5;
  31.  
  32. for(int i = 5; i < len; i++)
  33. src[i] = 0x90;
  34.  
  35. VirtualProtect(src,len,dwback,&dwback);
  36.  
  37. return (jmp-len);
  38. }

Viel Spaß mit eurem MausGUI.

greetz KN4CK3R

__________________

Hallo