Fråga : IAT som lappar, problem, när tillbaka de kallar till original, uppsätta som mål fungerar?

Hi

I undrade, om ett sakkunnigt kunde hjälpa mig med IAT som lappar på NT baserad O/Ss, som jag har kommit ett lite unstuck.  Pröva förmiddag I att installera en API hakar genom att använda DLL-injektionen (teknik för LoadLibrary/CreateRemoteThread) och lappar därefter en koppla ihop av OpenGL fungerar för att vara kompetent att fånga upp deras parametrar och att utföra funktioner, innan den kallar originalen.  Allt detta är funktionsdugligt frånsett, han verkar, när I-appellbaksida till de original- versionerna av fungerar som har en parameter att lista - kalla tillbaka fungerar med inga parametrar är misstänkt person för fine.

I som det är hur jag har specificerat by fungerar pekare, I-förmiddagen som är ny till denna teknik och inte kan verka för att figurera ut som är det korrekt långt av att göra saker.  Lista den kraschar precis uppsätta som mål process.

The kodifierar att använda för I-förmiddag är som följer: när I-appellbaksida till original fungerar med parametern,- pekaren för

//till original fungerar:

void (WINAPI-*glRotatefOrig) (GLfloat metar, GLfloat x, GLfloat y, GLfloat z);

//kodifierar för att få original fungerar pekaren:

glRotatefOrig = (annullera (WINAPI *) (GLfloat, GLfloat, GLfloat, GLfloat)) GetProcAddress (hMod, ”glRotatef”); det // hMod = handtaget till openGL module.

//mitt eget fungerar implentation (denna kallas lyckat av uppsätta som mål som processaa IAT lappar efter):
{console->Write för
(”kallad \ n glRotatef för myglRotatef för

void (GLfloat metar, GLfloat x, GLfloat y, GLfloat z),”); glRotatefOrig för // tryckok
(meta, x, y, z); // denna appell kraschar applikationen (inget givet meningsfullt fel).

Can någon för
} pekar eventuellt mig till var I-förmiddagen som orätt går?  Jag har försökt talrik olik väg av att specificera original fungerar pekaren, men alla avslutar i revor: /

Cheers i förskott, om du kan hjälpa,
Chris
" klar "

Svar : IAT som lappar, problem, när tillbaka de kallar till original, uppsätta som mål fungerar?

Hi Chris,

Att lappa för IAT är något som jag mixtrade med ganska ett lott inte så long sedan: J.Richter bokar är egentligen krävd läsning på denna:),

Jag skrev ett omslag klassificerar, inspirerade vid den ovannämnda gentlemannen, som möjliggjorde mig lyckat för att haka fungerar liksom:: MessageBox Etc. som jag har fäst min hjälpreda, klassificerar nedanfört, tillsammans med exempelanvändning.  Behaga försök som det using din OpenGL fungerar ut - det bör fungera utan problem.

Du ska ser det, när jag hakar appellen:: MessageBox jag ändrar texten som var ursprungligen specificerat ”mig har hakat denna appell!”,
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
// ställer in haka
VERIFIERA (CFuncInAPIHook:: Anföra som exempel () .HookFunction (_T (”user32.dll”), _T (”MessageBoxW”), AfxGetInstanceHandle (), &MyMessageBox (PROC)));

// utbytestillvägagångssätt
int WINAPI MyMessageBox (HWND-hWnd,
    LPCTSTR-lpText,
    LPCTSTR-lpCaption,
    UINT-uType
)
{
	// fungerar pekaren måste ha samma kallande regel som PROC (WINAPI)!  Prepend WINAPI (__stdcall), därför!
	typedef int  (WINAPI-*MESSAGEBOX_FUNC) (HWND, LPCTSTR, LPCTSTR, UINT);

	// hämtar endast den original- funktionen tilltalar en gång!
	pFunc för statisk elektricitet MESSAGEBOX_FUNC = (MESSAGEBOX_FUNC) CFuncInAPIHook:: Anföra som exempel () .RetrieveOriginalAPIFunctionAddress (_T (”user32.dll”), _T (”MessageBoxW”));
	PÅSTÅ (pFunc);
	gå pFunc tillbaka? (*pFunc) (hWnd, _T (”jag har hakat denna appell! ”), lpCaption, uType): 0;
}

// denna ska appell hakas
:: OGILTIGA MessageBox (, _T (""), _T (”titeln”), MB_OK);
Andra lösningar  
 
programming4us programming4us