Przechwytywanie funkcji

0

Hej... chce napisac program do przechwytywania wywolania funkcji na razie w obrębie wlasnej aplikacji.
Z tego co znalazlem na googlach doszedlem do czegos takiego:


```cpp
typedef HDC  _stdcall (_BeginPaint) (HWND,LPPAINTSTRUCT);
_BeginPaint *OrgBeginPaint,*Temp,*My;

HDC __stdcall MyBeginPaint(HWND hwnd,LPPAINTSTRUCT lpPaint)
{                   
return OrgBeginPaint(hwnd,lpPaint);
}
...
HWND hwnd = FindWindow("Form1",NULL);
PAINTSTRUCT ps;
Temp = (_BeginPaint*)BeginPaint;
Temp = (_BeginPaint*)int(int(Temp)+2);
OrgBeginPaint = Temp;
My = (_BeginPaint*)MyBeginPaint;
if (!WriteProcessMemory(GetCurrentProcess(),Temp,&My,sizeof(Temp),0))
        ShowMessage("Blad");

BeginPaint(hwnd,&ps);
...


... i niby dziala ale jednak nie ;p Viev CPU pokazuje ze wywolanie USER32.BeginPaint zostalo podmienione przez ta moja funkcje, ale po wywolaniu wylatuje gdzies w kosmos a cala aplikacja się wywala.
Jesli ktos moglby mi pomoc bylbym wdzieczny ;],
0

nie bede komentowal tego co robisz na wskaznikach.. w kazdym badz razie wydaje mi sie ze powinno byc raczej:

(jak rozumiem, chcesz zmodyfikowac adres w IAT i to to +2 to na ominiecie jmp?)

adres_oryg = * (_BeginPaint**) int(int(Temp)+2);

i potem zapisz w to samo miejsce:

  • (_BeginPaint**) int(int(Temp)+2) = &My;

edit: jesli nie da sie wprost bo ten blok pamieci jest chroniony, to moze i rzeczywiscie trzeba uzyc writeprocessmemory. w kazdym badz razie adres adresu to jest ((int)Temp)+2, patrz gdzie zapisujesz !!

1 użytkowników online, w tym zalogowanych: 0, gości: 1