登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 49|回复: 0

驱动开发与系统原理-保护进程不被访问

[复制链接]

90

主题

-6

回帖

112

积分

网站编辑

积分
112
发表于 2025-5-5 11:55:23 | 显示全部楼层 |阅读模式

在EPORCESS结构体中,偏移0x26c的地方是一个标志位

在标志位中第12位为进程保护位,当该位为1时,调试器无法附加该进程

没设置保护位:

PCHUNTER没显示拒绝且OD可以附加该进程

设置保护位:

现在我们PCHUNTER显示拒绝访问,OD也找不到该进程,无法进行附加.

原理

我们遍历进程,取出该进程的偏移0x26c的标志位,或上0x800,置第12位2保护位为1,然后再放回去

代码实现

include<ntifs.h>

VOID DriverUnload(PDRIVER_OBJECT pDriverObject) { DbgPrint("Unload Driver Success! "); }

NTSTATUS ProtectedProcess(ULONG ulPid) { DWORD_PTR pEprocess = NULL; ULONG ulProcessID = 0; ULONG ulProtectedFlag = 0; pEprocess = (DWORD_PTR)PsGetCurrentProcess(); PLIST_ENTRY pActiveProcessLinks = (PLIST_ENTRY)(pEprocess + 0xb8); PLIST_ENTRY pNextLinks = pActiveProcessLinks->Flink; while (pNextLinks->Flink!= pActiveProcessLinks->Flink) { pEprocess = (DWORD_PTR)pNextLinks - 0xb8; ulProcessID = ((ULONG)(pEprocess + 0xb4)); if (ulProcessID == ulPid) { //主要操作代码 ulProtectedFlag = ((ULONG)(pEprocess + 0x26c)); DbgPrint("OLD FLAGS: 0x%X", ulProtectedFlag); ((ULONG)(pEprocess + 0x26c))= 0x800| ulProtectedFlag; ulProtectedFlag= ((ULONG*)(pEprocess + 0x26c)); DbgPrint("NEW FLAGS: 0x%X", ulProtectedFlag); return STATUS_SUCCESS; } pNextLinks = pNextLinks->Flink; } DbgPrint("Failed!"); return STATUS_SUCCESS;

}

NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath) { DbgPrint("Load Driver Success!"); pDriverObject->DriverUnload = DriverUnload; ProtectedProcess(836); return STATUS_SUCCESS; }

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-5-13 07:45 , Processed in 0.113431 second(s), 23 queries , Yac On.

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表