如题。通过CreateRemoteThread来注入,总是不能成功。谁有代码呢?请发到邮箱:[email protected] .再次感谢。
@

解决方案 »

  1.   

    关键代码一般这样写:
    HANDLE hProcess = OpenProcess( PROCESS_CREATE_THREAD | PROCESS_VM_OPERATION | PROCESS_VM_WRITE, FALSE, dwProcessID );DWORD dwSize, dwWritten;
    dwSize = lstrlenA( lpszDll ) + 1;
    LPVOID lpBuf = VirtualAllocEx( hProcess, NULL, dwSize, MEM_COMMIT, PAGE_READWRITE );
    if ( NULL == lpBuf )
    {
     CloseHandle( hProcess );
     // 失败处理
    }
    if ( WriteProcessMemory( hProcess, lpBuf, (LPVOID)lpszDll, dwSize, &dwWritten ) )
    {
     // 要写入字节数与实际写入字节数不相等,仍属失败
     if ( dwWritten != dwSize )
     {
      VirtualFreeEx( hProcess, lpBuf, dwSize, MEM_DECOMMIT );
      CloseHandle( hProcess );
      // 失败处理
     }
    }
    else
    {
     CloseHandle( hProcess );
     // 失败处理
    }
    // 使目标进程调用LoadLibrary,加载DLL
    DWORD dwID;
    LPVOID pFunc = LoadLibraryA;
    HANDLE hThread = CreateRemoteThread( hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)pFunc, lpBuf, 0, &dwID );
    // 等待LoadLibrary加载完毕
    WaitForSingleObject( hThread, INFINITE );
    // 释放目标进程中申请的空间
    VirtualFreeEx( hProcess, lpBuf, dwSize, MEM_DECOMMIT );
    CloseHandle( hThread );
    CloseHandle( hProcess );
      

  2.   

    这个我知道。可是怎么运行DLL中的函数呀?是不是DLL不能用MFC呢?郁闷中
      

  3.   

    将要执行的函数放在DLLMAIN里面就可以了。
      

  4.   

    将要执行的函数写在DllMain中,这样就可以在DLL被加载时调用了
      

  5.   

    那样可以么,以前试的是MFC的DLL,放在了DLL里的InitInstance()函数里了,一执行就锁死了。三楼四楼说的还没有试。等试成功了,一定给分。谢谢啦。小弟要找个时间试一下。呵呵。再有什么不懂得,多多指导哈。
      

  6.   

    为什么dll 注入后,宿主程序会崩溃呢?我选 的宿主程序是 iexplore.exe 版本是 7 ,是不是iexplore.exe有自我防注入功能呢?