有一个进程,我已经知道他的内部函数的内存地址
老外写的程序是这样的
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,不过都可以了 (我不想用线程注入),反正是方法就提吧,好的多给分)

解决方案 »

  1.   

    CreateRemoteThread,只有这一个方法来执行别的进程中的函数
      

  2.   

    注意到这八个函数的调用约定都应该是C约定,而且实际上是两种可用同一CreateThread方式调用而不出错:
    ( ( void (*)( ) ) ValidateFns[0] )( ); 
    ( ( void (*)( int ) ) ValidateFns[5] )( 4 ); 
    (原因是CreateThread函数返回时的地址是ExiteThread,因而不会出错。)
    因此最简单的办法就是循环用
    hThread = CreateRemoteThread(hProcess, 0, 0, lpStartAddress, 4, 0, &dwThreadId);
    来调用这8个函数。
    或者使用远程注入代码,在注入的代码内调用这八个函数。
      

  3.   

    我不想用DLL注入来做,我想用API来解决
      

  4.   

    俺就能想到DLL注入..汗.    撤了.
      

  5.   

    tr0j4n 换头像了...怎么看着没以前的顺眼?
      

  6.   

     谢谢各位了  应该是用CreateRemoteThread来完成 ^_^ 
    我努力下吧