-
-
[旧帖]
请助:关于inline hook,如何编写通用的重建函数
0.00雪花
-
发表于:
2016-8-24 18:36
3562
-
[旧帖] 请助:关于inline hook,如何编写通用的重建函数
0.00雪花
我HOOK了一些API(诸如SetWindowText、SetWindowLong等等带有窗口句柄参数的一系列)函数,想编写一个通用的重建函数。重建函数实现以下功能:
1、调回原来的API函数,并保留此函数的返回值;
2、调用我自己编写的一个函数,此函数只有一个参数,为窗口句柄;
3、返回API函数的返回值;
例子:
VOID PrintHwnd( HWND h )
{
printf( "0x%x\n", h );
}
__declspec( naked ) VOID RebuildFunction()
{
1、调用原来的API函数,并保留返回值;
2、调用PrintHwnd,并向其传递窗口句柄。
3、返回API函数(第一步中保留)的返回值。
}
LPVOID CreateRebuildFunction( OldFunction )
{
// 创建一个重建函数
LPVOID lp = VirtualAlloc( RebuildFunction->size, PAGE_EXECUTE_READWRITE );
memcpy( lp, RebuildFunction, RebuildFunction->size );
memcpy( lp, __asm{ mov eax, OldFunction; call eax} );
return lp;
}
int main( int argc, char **argv )
{
SetHook( SetWindowLong, CreateRebuildFunction( SetWindowLong ));
SetHook( SetWindowTextA, CreateRebuildFunction( SetWindowTextA ));
SetHook( ..., CreateRebuildFunction( ... ) );
Sleep( INFINITE );
}
我的问题是如何编写RebuildFunction,可以请各位大神支招,感激不尽呐。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课