有一个进程,我已经知道他的内部函数的内存地址
老外写的程序是这样的
DWORD ValidateFns[8];
void Validate( )
{
( ( void (*)( ) ) ValidateFns[0] )( );
( ( void (*)( ) ) ValidateFns[1] )( );
( ( void (*)( ) ) ValidateFns[2] )( );
( ( void (*)( ) ) ValidateFns[3] )( );
( ( void (*)( ) ) ValidateFns[4] )( );
( ( void (*)( int ) ) ValidateFns[5] )( 4 );
( ( void (*)( ) ) ValidateFns[6] )( );
( ( void (*)( ) ) ValidateFns[7] )( );
}
这个我再上一个问题中已经解决了,是函数指针
来调用这些函数,现在不是本程序 而是另一个进程的调用 函数首地址已经得到
我想再另一个进程里是否有合适的API来完成这个,或者其他方法,
这个解决了给加分。(我想在C#中来调用API,不过都可以了 (我不想用线程注入),反正是方法就提吧,好的多给分)
老外写的程序是这样的
DWORD ValidateFns[8];
void Validate( )
{
( ( void (*)( ) ) ValidateFns[0] )( );
( ( void (*)( ) ) ValidateFns[1] )( );
( ( void (*)( ) ) ValidateFns[2] )( );
( ( void (*)( ) ) ValidateFns[3] )( );
( ( void (*)( ) ) ValidateFns[4] )( );
( ( void (*)( int ) ) ValidateFns[5] )( 4 );
( ( void (*)( ) ) ValidateFns[6] )( );
( ( void (*)( ) ) ValidateFns[7] )( );
}
这个我再上一个问题中已经解决了,是函数指针
来调用这些函数,现在不是本程序 而是另一个进程的调用 函数首地址已经得到
我想再另一个进程里是否有合适的API来完成这个,或者其他方法,
这个解决了给加分。(我想在C#中来调用API,不过都可以了 (我不想用线程注入),反正是方法就提吧,好的多给分)
( ( void (*)( ) ) ValidateFns[0] )( );
( ( void (*)( int ) ) ValidateFns[5] )( 4 );
(原因是CreateThread函数返回时的地址是ExiteThread,因而不会出错。)
因此最简单的办法就是循环用
hThread = CreateRemoteThread(hProcess, 0, 0, lpStartAddress, 4, 0, &dwThreadId);
来调用这8个函数。
或者使用远程注入代码,在注入的代码内调用这八个函数。
我努力下吧