创建远程线程注入Dll——CreateRemoteThread

本文详细探讨了Windows平台下如何使用CreateRemoteThread函数实现DLL的远程注入技术,涉及进程间通信、内存管理和系统调用等关键概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CreateRemoteThread是创建一个在其他进程的地址空间中运行的线程(也称远程线程)。
其函数原型为:
HANDLE WINAPI CreateRemoteThread(
__in HANDLE hProcess,
__in LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out LPDWORD lpThreadId
);

我们可以通过将Dll完整路径写进目标进程的地址空间然后创建远程线程使目标进程加载Dll来实现注入的效果。话不多说看代码:

头文件:

#pragma once
#include <windows.h>
#include <TlHelp32.h>
#include <Winternl.h>   
#include <iostream>
#include <tchar.h>


using namespace std;  //命名空间

#define PAGE_READ_FLAGS \
    (PAGE_READONLY | PAGE_READWRITE | PAGE_EXECUTE_READ | PAGE_EXECUTE_READWRITE)
#define PAGE_WRITE_FLAGS \
    (PAGE_READWRITE | PAGE_WRITECOPY | PAGE_EXECUTE_READWRITE | PAGE_EXECUTE_WRITECOPY)


BOOL SeEnableSeDebugPrivilege(IN const WCHAR*  PriviledgeName, BOOL IsEnable);//提权函数
BOOL SeInjectionByCreateRemoteThread(WCHAR* DllFullPath, WCHAR* ProcessImageName, size_t ProcessImageNameLength);

BOOL SeGetProcessIDByProcessImageName(WCHAR*   ProcessImageName, DWORD* ProcessID);//通过进程名字获得进程ID
BOOL SeIsValidReadPoint(LPVOID VirtualAddress);
BOOL SeIsValidWritePoint(LPVOID VirtualAddress);
typedef HANDLE(WINAPI* LPFN_CREATEREMOTETHREAD)(
		_In_  HANDLE                 hProcess,
		_In_  LPSECURITY_ATTRIBUTES  lpThreadAttributes,
		_In_  SIZE_T                 dwStackSize,
		_In_  LPTHREAD_START_ROUTINE lpStartAddress,
		_In_  LPVOID                 lpParameter,
		_In_  DWORD                  dwCreationFlags,
		_Out_ LPDWORD                lpThreadId);




//定义LoadLibrary函数指针
typedef HMODULE(WINAPI *LPFN_LOADLIBRARYW) (_In_ LPCTSTR);


.cpp:

#include"CreateRemoteThread-Injection.h"


LPFN_CREATEREMOTETHREAD __CreateRemoteThread = NULL;
LPFN_LOADLIBRARYW f1;


void main()
{
	wchar_t v1[MAX_PATH] = { 0 };//存动态链接库的完整路径

	if (SeEnableSeDebugPrivilege(L"SeDebugPrivilege", TRUE) == FALSE)
	{
		return;
	}
	GetCurrentDirectory(MAX_PATH, v1);

#ifdef _WIN64
	wcscat(v1, L"\\DllX64.dll");
#else
	wcscat(v1, L"\\DllX86.dll");
#endif 


	SeE
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值