CreateRemoteThreadWriteProcessMemory技术 简要的

CreateRemoteThread WriteProcessMemory 第三种方法的基本思想是拷贝一些代码到另一进程的地址空间中然后执行。这种方法代替了编写独立的DLL,而是直接将代码使用WriteProcessMemory API函数拷贝到远程进程中。然后通过CreateRemoteThread来执行它。

本文前面已经介绍过CreateRemoteThread的函数原型,注意以下几点:

1、              hProcess参数是CreateRemoteThread的附加参数,它是进程决定创建哪个线程的句柄。

2、              lpStartAddress参数是线程在远程进程地址空间中的开始地址。它必须存在于远程进程中,因此不能简单的拷贝一个地址句柄传递给本地的ThreadFunc,而必须先将代码拷贝到远程进程中。

3、              对于lpParameter参数也一样,也必须将他拷贝到远程进程中。

下面概括一下使用CreateRemoteThread和WriteProcessMemory的具体步骤。

1、返回远程进程的句柄HANDLE(OpenProcess)

2、在远程进程的地址空间中为待注入的代码分配内存(VirtualAllocEX)

3、将已初始化后的INJDATA结构的一个拷贝写入分配的内存(WriteProcessMemory)

4、在远程进程的地址空间中为注入的代码分配内存

5、将ThreadPunc的一个拷贝写入分配的内存

6、使用CreateRemoteThread来执行远程的ThreadFunc拷贝

7、等待远程线程的终止(WaitForSingleObject)

8、从远程进程中返回执行结果(ReadProcessMemory或GetExitCodeThread)

9、释放已申请的内存,包括步骤2和步骤4中的申请(VirtualFreeEx)

10、             关闭返回的句柄,包括步骤1和步骤6中的HANDLE(CloseHandle)

上述步骤中需要定义INJDATA结构:

typedef struct {

       HWND    hwnd;

       SENDMESSAGE         fnSendMessage; // pointer to user32!SendMessage

 

       BYTE     pbText[128 * sizeof(TCHAR)];

} INJDATA, *PINJDATA;

构造ThreadFunc时将INJDATA作为传递的参数:

static DWORD WINAPI ThreadFunc (INJDATA *pData)

{

       return 0;

}

这样,就可以在ThreadFunc中加入一些想做的事情,并且注入到其它进程中来执行。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值