raryName:
nop
nop
nop
nop
nop
nop
nop
nop
//*******代码开始的真正位置*******
REMOTE_THREAD_CODE:
//*******实现地址重定位,ebx保存差值*******
call relocal
relocal:
pop ebx
sub ebx , offset relocal
//////////////////////////////////////////////////////////////////////////
//*******调用LoadLibrary*******
//////////////////////////////////////////////////////////////////////////
//*******压入LoadLibrary参数(动态链接库名)*******
mov eax , ebx
add eax , offset LibraryName
push eax
//*******调用LoadLibrary*******
mov eax , ebx
add eax , offset LoadLibraryAddr
mov eax , [eax]
call eax
or eax , eax
jnz NEXT1
ret
//////////////////////////////////////////////////////////////////////////
//*******以上调用LoadLibrary*******
//////////////////////////////////////////////////////////////////////////
NEXT1:
// *******压入FreeLibrary参数*******
push eax
// *******调用FreeLibrary*******
mov eax , ebx
add eax , offset FreeLibraryAddr
mov eax , [eax]
call eax
//////////////////////////////////////////////////////////////////////////
//*******以上调用FreeLibrary*******
//////////////////////////////////////////////////////////////////////////
ret
}
REMOTE_THREAD_END:
//////////////////////////////////////////////////////////////////////////
////以上为远程线程代码
//////////////////////////////////////////////////////////////////////////
//*******首先获取选中的进程句柄*******
int nSelectedThreadId;
nSelectedThreadId = ((CComboBox *)GetDlgItem(IDC_COM_Proc))->GetCurSel();
nSelectedThreadId = szThreadId[nSelectedThreadId];
HANDLE hSelectedProcHandle;
hSelectedProcHandle = OpenProcess(PROCESS_ALL_ACCESS , FALSE , nSelectedThreadId);
if(!hSelectedProcHandle)
{
MessageBox("打开进程失败!");
return;
}
// *******得到远程线程代码长度*******
int nRemoteThreadCodeLength;
_asm
{
mov eax , offset REMOTE_THREAD_END
mov ebx , offset REMOTE_THREAD_BEGIN
sub eax , ebx
mov nRemoteThreadCodeLength , eax
}
// *******在宿主进程中申请远程线程代码空间*******
LPVOID pRemoteThreadAddr;
pRemoteThreadAddr = VirtualAllocEx(hSelectedProcHandle , NULL , nRemoteThreadCodeLength ,
MEM_COMMIT,PAGE_EXECUTE_READWRITE);
if(!pRemoteThreadAddr)
{
MessageBox("Alloc Memory Error!");
return;
}
//*******向宿主进程空间中复制远程线程代码*******
LPVOID pRemoteThreadCodeBuf;
DWORD nWritenNum , nSuccess;
_asm mov eax , offset REMOTE_THREAD_BEGIN
_asm mov pRemoteThreadCodeBuf , eax
nSuccess = WriteProcessMemory(hSelectedProcHandle |