我想计算我的函数填充多少字节,以便我可以使用CreateRemoteThread()将其注入另一个进程.一旦我知道了字节数,我就可以使用函数指针将它们写入远程进程.我在网上找到了一篇文章(参见http://www.codeproject.com/KB/threads/winspy.aspx#section_3,第三章),他们在C++中执行以下操作:
// ThreadFunc
// Notice: - the code being injected;
//Return value: password length
static DWORD WINAPI ThreadFunc (INJDATA *pData)
{
//Code to be executed remotely
}
// This function marks the memory address after ThreadFunc.
static void AfterThreadFunc (void) {
}
Run Code Online (Sandbox Code Playgroud)
然后他们使用以下方法计算ThreadFunc填充的字节数:
const int cbCodeSize = ((LPBYTE) AfterThreadFunc - (LPBYTE) ThreadFunc);
Run Code Online (Sandbox Code Playgroud)
使用cbCodeSize它们在远程进程中为注入分配内存ThreadFunc并写入ThreadFunc已分配内存的副本:
pCodeRemote = (PDWORD) VirtualAllocEx( hProcess, 0, cbCodeSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE );
if (pCodeRemote == NULL)
__leave;
WriteProcessMemory( hProcess, …Run Code Online (Sandbox Code Playgroud)