0xd00 随笔小记

Back

远程线程劫持的 C++ 实现Blur image

远程线程劫持的流程#

流程图

  1. 打开远程进程和线程
  2. 挂起目标线程
  3. 分配内存并写入 Shellcode
  4. 获取该线程的上下文
  5. 修改上下文中的指令指针(RIP/EIP)指向Shellcode地址
  6. 设置线程上下文
  7. 恢复线程执行

C++实现#

image-20250731114718631

关于执行时机#

一个常见的新手误区是:认为调用 ResumeThread 后,Shellcode 会立即执行。但实际情况并非如此。代码在执行结束后过一段时间才会执行shellcode。

因为当调用 SetThreadContext(hThread, &ctx) 并将 Rip 设置为远程 Shellcode 地址后,并没有让线程立即运行这段代码,而是在当这个线程被操作系统调度器重新投入运行时,目标线程才会从我们设置的 Rip 地址开始执行

这就意味着:目标线程当前可能处于“挂起”、“等待消息”、“空闲”或“阻塞”状态,即使我们调用了 ResumeThread,也不能保证它立刻被调度执行。

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