设为首页 加入收藏

TOP

VC++另类实现进程插入(三)
2014-11-23 19:30:42 】 浏览:435
Tags:另类 实现 进程 插入
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
首页 上一页 1 2 3 4 下一页 尾页 3/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇VC++创建指定路径的一系列文件夹 下一篇vc 下拉列表框 编程

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目