0xd00 随笔小记

Back

本地线程劫持的 C++ 实现Blur image

线程劫持#

线程劫持(Thread Hijacking)是一种在Windows系统下常见的代码注入与执行技术,广泛应用于红队攻击、渗透测试、恶意软件免杀等领域。

局部线程创建是线程劫持的一种实现方式,也被称为“本地线程劫持”或“挂起线程创建后劫持”。

线程劫持的核心思想#

创建一个被挂起的线程(Suspended Thread),修改其执行上下文(Context),将指令指针(RIP/EIP)指向我们准备好的Shellcode,再恢复线程执行,从而达到执行任意代码的目的。

这种方式相比于直接使用 CreateThread 执行Shellcode,具有更强的隐蔽性,因为:

  • 线程是合法创建的(调用 CreateThread 是正常API)
  • Shellcode 并非直接作为线程入口,而是通过修改上下文注入,绕过部分EDR的直接内存扫描
  • 可实现无文件落地、内存执行

本地线程劫持的流程#

流程图

  1. 通过设置dwCreationFlag参数创建一个被挂起的线程(CREATE_SUSPENDED)
  2. 分配内存并写入Shellcode
  3. 获取该线程的上下文(GetThreadContext
  4. 修改上下文中的指令指针(RIP/EIP)指向Shellcode地址
  5. 设置线程上下文(SetThreadContext
  6. 恢复线程执行(ResumeThread

C++实现#

image-20250729150258068

本地线程劫持的 C++ 实现
https://blog.0xd00.com/blog/local-thread-hijacking
Author 0xd00
Published at 2025年7月29日
Comment seems to stuck. Try to refresh?✨