CreateRemoteThread函数实现远程注入6部曲

来源:互联网 发布:座狼猎人 升星数据 编辑:程序博客网 时间:2024/05/29 14:40
实现远程注入的方法其实挺简单的:

第一步:打开要写入的进程,赋予权限。用API函数OpenProcess可以实现。

第二步:在目标进程的内存中分配一块内存空间。用API函数VirtualAllocEx可以实现。

第三步:将dll写入内存区域。用API函数WriteProcessMemory可以实现。

第四步:创建远程线程。用API函数CreateRemoteThread可以实现。

第五步:等待加载完成。用API函数WaitForSingleObject可以实现。

第六步:释放目标进程中申请的空间。用API函数VirtualFreeEx可以实现。


下面是控制台源码:

#include <Windows.h>#include <tchar.h>void main(){TCHAR dllPath[MAX_PATH] = _T("d:\\我的文档\\桌面\\注入小工具\\dll\\debug\\dlltest.dll");// HMODULE lib = LoadLibrary(_T("kernel32.dll"));// PTHREAD_START_ROUTINE proc =(LPTHREAD_START_ROUTINE)GetProcAddress(lib, "LoadLibraryW");// FreeLibrary(lib);//撤销duidll文件映像的映射,计数递减1LPVOID proc  = LoadLibraryW;//线程的起始地址   //前3句注释等同这一句// LPVOID pFunc = GetModuleHandleA;HANDLE process = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM_OPERATION|PROCESS_VM_WRITE, FALSE, 5360);//他让一个进程在另一个进程的地址空间中分配一块内存,执行成功就返回分配内存的首地址LPVOID param = VirtualAllocEx(process,NULL, sizeof(dllPath), MEM_COMMIT, PAGE_EXECUTE_READWRITE);if (param == NULL){VirtualFreeEx(process,NULL, 0, MEM_RELEASE);CloseHandle(process);}DWORD A;BOOL b = WriteProcessMemory(process, param, (LPVOID)dllPath, sizeof(dllPath), &A);HANDLE thread = CreateRemoteThread(process, NULL, 0,(LPTHREAD_START_ROUTINE)proc, param, 0, NULL);// 等待LoadLibrary加载完毕WaitForSingleObject(thread, INFINITE);// 释放目标进程中申请的空间VirtualFreeEx(process, param, 0, MEM_RELEASE);CloseHandle(thread);CloseHandle(process);}
源码下载地址:http://download.csdn.net/detail/qyuewei/7653067

0 0