我是靠谱客的博主 义气小懒猪,最近开发中收集的这篇文章主要介绍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中加入一些想做的事情,并且注入到其它进程中来执行。
 

最后

以上就是义气小懒猪为你收集整理的CreateRemoteThreadWriteProcessMemory技术 简要的的全部内容,希望文章能够帮你解决CreateRemoteThreadWriteProcessMemory技术 简要的所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(32)

评论列表共有 0 条评论

立即
投稿
返回
顶部