16,551
社区成员
发帖
与我相关
我的任务
分享// 向目标进程地址空间写入DLL名称
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 );
// 失败处理
}
HMODULE hInstLibrary = LoadLibrary(INJECT_DLL);
CreateRemoteThread(hProcess, NULL, 0, LPTHREAD_START_ROUTINE(hInstLibrary), lpBuf, 0, &lpThreadId);
const DWORD THREADSIZE=1024*4;
HANDLE pRemoteThread,hRemoteProcess;
PTHREAD_START_ROUTINE pfnAddr = NULL;
DWORD pId = 0;
void *pFileRemote = NULL;
HWND hWinPro=::FindWindow("XXX",NULL); //取窗体句柄
if(!hWinPro)
{
return 0;
}
else
{
::GetWindowThreadProcessId(hWinPro,&pId); //获取目标句柄的PID
hRemoteProcess=::OpenProcess(PROCESS_ALL_ACCESS,false,pId); //打开进程
pFileRemote=::VirtualAllocEx(hRemoteProcess,0,THREADSIZE,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);//分配内存空间
if(!::WriteProcessMemory(hRemoteProcess,pFileRemote,"d:\\RemoteDll.dll",THREADSIZE,NULL))
return;
pfnAddr=(PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(TEXT("Kernel32")),"LoadLibraryA"); //获取API地址
pRemoteThread=::CreateRemoteThread(hRemoteProcess,NULL,0,pfnAddr,pFileRemote,0,NULL);//注入线程
if(pRemoteThread==NULL)
return;
else MessageBox("success!"); //注入成功
}
}