win32远程线程

前置回顾:线程基础

  1. 线程本质:依附于进程的代码执行流,进程至少有 1 个主线程 (main),可通过CreateThread新建子线程并发运行
  2. 线程函数标准格式
c 复制代码
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
    //线程执行代码
    return 0;
}
  1. CreateThread 关键点
    ● 参数:安全属性、栈大小 (0 = 默认)、线程函数地址、线程参数、创建标志、TID 输出
    ● 线程句柄 CloseHandle不会杀死线程,只是释放句柄引用;线程生命周期由线程函数是否执行完毕决定
    ● 所有代码必须在线程内部才会被 CPU 调度执行,函数不会自动运行

CreateRemoteThread(远程线程 API)

  1. 定义
    在另一个进程的虚拟地址空间创建并运行线程,也就是跨进程创建线程。
    与CreateThread参数几乎完全一致,多了第一个参数 hProcess(目标进程句柄)
c 复制代码
HANDLE CreateRemoteThread(
    HANDLE hProcess,                          //【新增】目标进程句柄
    LPSECURITY_ATTRIBUTES lpThreadAttributes,
    SIZE_T dwStackSize,
    LPTHREAD_START_ROUTINE lpStartAddress,    //线程函数地址:必须属于目标进程地址空间!
    LPVOID lpParameter,
    DWORD dwCreationFlags,
    LPDWORD lpThreadId
);
  1. 使用完整步骤
  2. OpenProcess():打开目标进程,获取进程句柄,必须带上 PROCESS_CREATE_THREAD 权限
  3. CreateRemoteThread():在目标进程内创建远程线程
  4. 等待 / 观察线程执行(可选WaitForSingleObject等待线程结束)
  5. CloseHandle()关闭进程句柄、远程线程句柄
  6. 核心限制
    lpStartAddress 线程函数地址必须是目标进程虚拟地址空间内的有效地址
    不能直接传本进程函数地址!本进程的函数地址,在别的进程里面是无效的
    经典用法:注入 DLL 时传入LoadLibraryA地址(LoadLibrary 在系统 dll,所有进程地址一致)
  7. 安全特性
    被叫做注入 "万恶之源"API,DLL 注入最经典 API
    ● 原理:在目标进程开远程线程,远程线程调用LoadLibrary加载我们的 dll,实现代码注入
    ● 风险:恶意程序大量用这个 API 做进程注入、木马
    注意:高版本 Windows 有部分防护,现代对抗会规避
  8. CreateThread VS CreateRemoteThread
函数 运行位置 关键参数
CreateThread 当前本进程 不需要进程句柄,函数地址为本进程内地址
CreateRemoteThread 别的目标进程 hProcess 目标进程句柄;线程函数地址属于目标进程

总结

  1. OpenProcess 打开目标进程,权限不够会直接创建远程线程失败
  2. 远程线程函数地址不能使用本地进程函数地址,地址空间隔离
  3. CloseHandle (hRemoteThread) 只是释放句柄,不会终止远程线程,线程继续跑完
  4. 远程线程执行在目标进程内,使用目标进程的栈、虚拟内存
c 复制代码
//1.打开目标进程
HANDLE hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION,
FALSE, dwPID); //dwPID是目标进程ID
//2.创建远程线程
HANDLE hRemoteThread = CreateRemoteThread(
    hProcess,
    NULL,
    0,
    (LPTHREAD_START_ROUTINE)0x401090, //目标进程内函数地址
    NULL,
    0,
    NULL);
//3.资源释放
CloseHandle(hRemoteThread);
CloseHandle(hProcess);
  1. CreateRemoteThread:跨进程创建线程,第一个参数是目标进程句柄 hProcess
  2. 线程入口地址必须属于目标进程地址空间,不能直接传本进程函数
  3. 经典用途:DLL 注入,也是恶意注入常用 API
  4. CloseHandle 只释放句柄,不终止正在运行的远程线程
相关推荐
学逆向的7 小时前
C 堆区内存管理
c语言·开发语言·网络安全
admin and root17 小时前
《神农安全.AI漏洞挖掘src赏金》单独开放!
安全·web安全·网络安全·数据挖掘·渗透测试·ai安全·白帽子黑客
学逆向的17 小时前
C++ 匿名命名空间
开发语言·c++·网络安全
菩提小狗18 小时前
每日安全情报报告 · 2026-10-27
网络安全·漏洞·cve·安全情报·每日安全
学逆向的20 小时前
C++ 别名命名空间
开发语言·c++·网络安全
用户2986985301421 小时前
Python 实战:Markdown 转 PDF 的代码实现与页面设置
python·api·markdown
QZ1665609515921 小时前
高效・AI 优化・多模态:知镜-数据安全检测工具政务数据安全管理方案
网络·安全·网络安全
Tanshu_API君21 小时前
白银期货行情数据接入:从上海期货交易所合约到实时报价
api·金属·白银·白银价格·白银历史价格
Vitaliy Kostrov(柯维远)21 小时前
Multi-CDN 决策闭环:QoE、成本、安全与内容正确性如何进入同一个策略引擎?
安全·网络安全·云计算·音视频·负载均衡·cdn
m0_547486661 天前
《网络安全技术》全套PPT课件2026
安全·web安全·网络安全·数据安全