变异兔子 发表于 2014-6-3 12:18:34

远程线程注入

下面这段代码为什么要写入的函数没有执行?

#include "stdafx.h"
#include <stdio.h>


//要写入的函数
int KeyboardProc()
{
      MessageBox(NULL,"执行! ",NULL,NULL);
      return 0;
}

//远程创建线程函数
int InfusionFunc(DWORD dwProcId,LPVOID mFunc)
{
HANDLE hProcess;//远程句柄
LPVOID mFuncAddr;//申请函数内存地址
HANDLE hThread; //线程句柄

//打开被注入的进程句柄
hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwProcId);
if(!hProcess)
{
      MessageBox(NULL,"打开进程失败",NULL,NULL);
}
//申请内存
mFuncAddr = VirtualAllocEx(hProcess,NULL,20000,MEM_COMMIT,PAGE_EXECUTE_READWRITE);

//写内存
WriteProcessMemory(hProcess,mFuncAddr,mFunc,20000, 0);

//创建远程线程
hThread = CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)mFuncAddr,0,0,0);
    if(!hThread)
{
      MessageBox(NULL,"创建远程线程失败",NULL,NULL);
}
WaitForSingleObject(hThread, INFINITE); //等待线程结束
//释放申请有内存
VirtualFreeEx(hProcess,mFuncAddr,128,MEM_RELEASE);

//释放远程句柄
CloseHandle(hThread);
CloseHandle(hProcess);
return 0;
}

//主函数
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR   lpCmdLine,
                     int       nCmdShow)
{

HWND hwnd=::FindWindow(NULL,"计算器");
if(!hwnd)
{
    MessageBox(NULL,"打开计算器失败",NULL,NULL);
    return 0;
}

DWORD Tid,Pid;
Tid=GetWindowThreadProcessId(hwnd,&Pid);

InfusionFunc(Pid,KeyboardProc);   //调用线程创建函数

return 0;
}

Beatix 发表于 2014-7-9 02:23:21

我来加个数~

Voice 发表于 2014-7-23 09:07:35

强烈支持楼主ing……

红颜祸水ing 发表于 2014-8-6 02:21:00

看看...~

aumkb 发表于 2014-8-16 00:42:17

我支持一下

沵残留的余温ゝ 发表于 2014-8-25 09:39:53

支持一下:lol

装三疯 发表于 2014-8-25 09:49:45

支持, 海 强烈支持楼主ing……

hjwgjd 发表于 2014-12-23 23:39:42

鄙视楼下的顶帖没我快,哈哈

作废游戏 发表于 2014-12-28 02:40:09

鼎力支持!!

zhuzhuli 发表于 2015-1-1 05:38:50

楼猪V5啊
页: [1] 2
查看完整版本: 远程线程注入