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 只释放句柄,不终止正在运行的远程线程
相关推荐
用户298698530142 小时前
Python 中 HTML 转 PDF 的实现方法
python·html·api
pencek2 小时前
MazeSec-113
网络安全
白猫不黑4 小时前
网络安全专业:从入门到进阶的完整学习路线
学习·安全·web安全·计算机·网络安全·信息安全·编程
菩提小狗4 小时前
每日安全情报报告 · 2026-10-07
网络安全·漏洞·cve·安全情报·每日安全
白猫不黑4 小时前
AI自动化漏洞挖掘从入门到进阶超详细学习路线
人工智能·学习·web安全·网络安全·信息安全·渗透测试·自动化
学逆向的6 小时前
远程线程注入
开发语言·jvm·网络安全·win32
在猴站学算法7 小时前
(实战)PHP文件包含漏洞
网络安全·php
winfredzhang7 小时前
用 Chrome 插件 + 局域网 Qwen2.5-VL 打造视频截屏 OCR 工具
人工智能·chrome·ocr·api·plugin
高频因子挖掘机7 小时前
量化选股到底要不要每天拉全市场股票?从全市场扫描到候选池的行情数据设计
后端·github·api