Questione : IAT che rattoppa, problema quando denominano indietro alla funzione originale dell'obiettivo?

Ciao, il

I stava domandando se un esperto potesse aiutarlo con IAT che rattoppa su O/Ss basato NT poichè sono venuto un piccolo unstuck.  Sto provando ad installare un gancio di api using l'iniezione del DLL (tecnica di LoadLibrary/CreateRemoteThread) ed allora rattoppo una coppia di funzioni di OpenGL per potere intercettare i loro parametri e realizzare i funzionamenti prima della chiamata degli originali.  Tutto il questo sta funzionando oltre a, sembra, quando denomino di nuovo alle versioni originali delle funzioni che hanno una lista di parametro - denominare indietro alle funzioni senza i parametri è sospetto che di fine.

I è come ho specificato dagli indicatori di funzione, io sono nuovo a questa tecnica e non può sembrare calcolare fuori che è il senso corretto di fare le cose.  Quando denomino di nuovo alle funzioni originali con la lista di parametro arresta appena il codice che dell'obiettivo process.

The sto usando sono come segue: - indicatore del

//alla funzione originale:

void (*glRotatefOrig di WINAPI) (angolo di GLfloat, GLfloat x, GLfloat y, GLfloat z); codice del

//per ottenere l'indicatore originale di funzione:

glRotatefOrig = (vuoto (WINAPI *) (GLfloat, GLfloat, GLfloat, GLfloat)) GetProcAddress (hMod, “glRotatef„); hMod = maniglia di // a openGL module.

//il mio proprio implentation di funzione (questo è denominato con successo dall'obiettivo trattato dopo la zona di IAT): myglRotatef del

void (angolo di GLfloat, GLfloat x, GLfloat y, z)
{console->Write del
(“glRotatef di GLfloat denominato \ n„); glRotatefOrig del ok
delle stampe di // (angolo, x, y, z); // questa chiamata arresta l'applicazione (nessun errore espressivo dato). il

Can chiunque del
} possibilmente lo indica dove sto andando male?  Ho provato i numerosi modi diversi di precisazione l'indicatore originale di funzione ma di tutta l'estremità in rotture: /

Cheers in anticipo se potete aiutare,
Chris
class= del

Risposta : IAT che rattoppa, problema quando denominano indietro alla funzione originale dell'obiettivo?

Ciao Chris,

La rattoppatura di IAT è qualcosa che abbia perso tempo con parecchio non molto tempo fa: I libri di J.Richter realmente sono lettura richiesta su questo:)

Ho scritto un codice categoria dell'involucro, ispirato dal signore di cui sopra, cui mi ha permesso di agganciare con successo le funzioni come:: MessageBox ecc.  Ho attaccato il mio codice categoria dell'assistente qui sotto, con uso di esempio.  Provarlo prego fuori using le vostre funzioni di OpenGL - dovrebbe funzionare senza problema.

Vederete quello quando aggancio la chiamata:: MessageBox, cambio il testo che era originale specificato “io ha agganciato questa chiamata!„
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
// ha installato il gancio
VERIFICARE (CFuncInAPIHook:: Cit ad esempioare () .HookFunction (_T (“user32.dll„), _T (“MessageBoxW„), AfxGetInstanceHandle (), &MyMessageBox (PROC)));

Procedura del rimontaggio di //
int WINAPI MyMessageBox (hWnd di HWND,
    lpText di LPCTSTR,
    lpCaption di LPCTSTR,
    uType di UINT
)
{
	L'indicatore di funzione di // deve avere stessa convenzione di chiamata di PROC (WINAPI)!  Di conseguenza, prepend WINAPI (__stdcall)!
	typedef int  (*MESSAGEBOX_FUNC) di WINAPI (HWND, LPCTSTR, LPCTSTR, UINT);

	// richiama soltanto una volta l'indirizzo della funzione originale!
	pFunc statico di MESSAGEBOX_FUNC = (MESSAGEBOX_FUNC) CFuncInAPIHook:: Cit ad esempioare () .RetrieveOriginalAPIFunctionAddress (_T (“user32.dll„), _T (“MessageBoxW„));
	ASSERIRE (pFunc);
	restituire il pFunc? (*pFunc) (hWnd, _T (“ho agganciato questa chiamata! "), lpCaption, uType): 0;
}

// questa chiamata sarà agganciato
:: MessageBox (POSIZIONE DI SEGNALE MINIMO, _T (""), _T (“titolo„), MB_OK);
Altre soluzioni  
 
programming4us programming4us