OldSchoolHack

Registrieren / Anmelden Deutsch

[C++]gehookte Funktion nochmal hooken

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

Anmeldungsdatum: Aug 2007

Beiträge: 8643

Benutzer-Bewertung:

199 positiv
33 negativ
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