Vraag : Herstellen IAT die, probleem wanneer het terugbellen aan originele doelfunctie?

Hallo, was

I benieuwd of kon een deskundige me die met IAT helpen op NT gebaseerde O/Ss herstellen aangezien ik een weinig los ben gekomen.  Ik probeer om een API haak te installeren gebruikend injectie DLL (techniek LoadLibrary/CreateRemoteThread), en dan een paar functies te herstellen OpenGL hun parameters kunnen onderscheppen en handelingen uitvoeren alvorens de originelen te roepen.  Elk van dit werkt behalve, schijnt het, wanneer ik terug naar de originele versies van functies roep die een parameterlijst die hebben - aan functies zonder parameters terugbellen is/>I verdachte fine.


The ik ben als volgt gebruik: -/>//Wijzer


void (WINAPI *glRotatefOrig) (hoek GLfloat, GLfloat x, GLfloat y, GLfloat z); />//Code


glRotatefOrig = (leegte (WINAPI *) (GLfloat, GLfloat, GLfloat, GLfloat)) GetProcAddress (hMod, „glRotatef“); // hMod = behandelt aan openGL module.

//Mijn eigen functieimplentation (dit wordt geroepen met succes door het doelproces na flard IAT):

void myglRotatef (GLfloat hoek, GLfloat x, GLfloat y, GLfloat z)
{
console->Write („glRotatef Geroepen \ n“); // drukken ok
glRotatefOrig (hoek, x, y, z); // Deze vraag verplettert de toepassing (geen zinvolle gegeven fout).
}

Can iedereen richt me misschien aan waar ik verkeerd ga?  Ik heb talrijke verschillende manieren geprobeerd om de originele functiewijzer maar al eind in scheuren te specificeren: /

Cheers vooraf als u kunt helpen,
Chris

Antwoord : Herstellen IAT die, probleem wanneer het terugbellen aan originele doelfunctie?

Hallo Chris,

Het herstellen IAT is iets ik met heel wat niet zo lang geleden lummelde: J.Richter worden de boeken werkelijk vereist lezend op dit:)

Ik schreef een omslagklasse, door de bovengenoemde heer wordt geïnspireerd), die me toeliet om functies die zoals met succes vast te haken:: MessageBox enz.  Ik heb mijn helperklasse hieronder, samen met voorbeeldgebruik vastgemaakt.  Gelieve te proberen het uit gebruikend uw functies OpenGL - het zou zonder probleem moeten werken.

U zult dat zien wanneer ik de vraag: vasthaak: MessageBox, verander ik de tekst die oorspronkelijk aan „ik heeft vastgehaakt deze vraag!“ werd gespecificeerd
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
// Opstelling de haak
VERIFI�ëR (CFuncInAPIHook:: Instantie () .HookFunction (_T („user32.dll“), _T („MessageBoxW“), AfxGetInstanceHandle (), (PROC) &MyMessageBox));

// de procedure van de Vervanging
int. WINAPI MyMessageBox (HWND hWnd,
    LPCTSTR lpText,
    lpCaption LPCTSTR,
    UINT uType
)
{
	// de wijzer van de Functie moet zelfde roepende overeenkomst hebben zoals PROC (WINAPI)!  Daarom prepend WINAPI (__stdcall)!
	TYPEDEF INT.  (WINAPI *MESSAGEBOX_FUNC) (HWND, LPCTSTR, LPCTSTR, UINT);

	// wint eens slechts het adres van de originele functie terug!
	statische MESSAGEBOX_FUNC pFunc = (MESSAGEBOX_FUNC) CFuncInAPIHook:: Instantie () .RetrieveOriginalAPIFunctionAddress (_T („user32.dll“), _T („MessageBoxW“));
	BEWEER (pFunc);
	keer terug pFunc? (*pFunc) (hWnd, _T („ik heb deze vraag vastgehaakt! “), lpCaption, uType): 0;
}

// Deze vraag zal worden vastgehaakt
:: MessageBox (VERKLAAR, _T (""), _T („Titel“), MB_OK nietig);
Andere oplossingen  
 
programming4us programming4us