0-创建线程注入(CreateThread Injection)

一、前言

创建线程注入是最基础、最经典、最出名的一种注入方式,很多人刚开始学习免杀最先接触的注入方式就是创建线程注入,当然人怕出名猪怕壮,这也是杀软严密监控的一种注入方式。在前面我说过,shellcode的注入大致分为三步:

  1. 为shellcode分配内存

  2. 将shellcode移动到已分配的内存区域

  3. 执行shellcode

CreateThread是完成 执行shellcode 这一步骤的关键WindowsAPI,所以由此得名 创建线程注入

相信读者很熟悉这种注入方式,因为在 第一章-基础 中大部分代码采用的是创建线程注入,因此在本小节中我不会过多说明实现细节,请读者参考前面的文章。

注意:从本小节开始,我只用C++完成代码实现,如果有读者想要用C# 和Go实现,那么多注意WindowsAPI的参数类型。

二、流程

  1. 使用 VirtualAlloc 申请一块内存区域。官方文档:VirtualAlloc 函数 (memoryapi.h) - Win32 apps | Microsoft Learnarrow-up-right

  2. 使用 RtlMoveMemory 将shellcode移动到相应的内存区域。官方文档:Wdm.h) (RtlMoveMemory 函数 - Win32 apps | Microsoft Learnarrow-up-right

  3. 使用 CreateThread 创建一个线程执行指定位置的代码。官方文档:CreateThread 函数 (processthreadsapi.h) - Win32 apps | Microsoft Learnarrow-up-right

  4. 使用 WaitForSingleObject 等待线程完成。官方文档:WaitForSingleObject 函数 (synchapi.h) - Win32 apps | Microsoft Learnarrow-up-right

三、代码实现

Last updated