在驱动中实现进程遍历
时间:2019-10-25
本文章向大家介绍在驱动中实现进程遍历,主要包括在驱动中实现进程遍历使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在驱动中实现进程遍历
一、进程遍历思路:
1)之前在用户层,我们通过查看TEB结构体来实现进程遍历;但在内核层,我们使用_EPROCESS结构体来获取进程相关信息。
2)_EPROCESS 有几个比较重要的成员:
1> +0x11c VadRoot : Ptr32 Void,该进程VAD树的根结点。
2> +0x084 UniqueProcessId : Ptr32 Void ,指向PID的指针。(注意是指针,还要取值运算才能得到PID)
3> +0x088 ActiveProcessLinks : _LIST_ENTRY , 进程链,我们通过这个获取获取其他进程。
4> +0x174 ImageFileName : [16] UChar,指向进程的路径名称。
3)我们在驱动中通过 PsGetCurrentProcess(),来获取当前进程的EPROCESS结构体,然后通过链表遍历其余的EPROCESS,将关键信息输出出来。
二、源代码:
1 #include <ntddk.h> 2 3 VOID Unload(IN PDRIVER_OBJECT pDriverObject) { 4 DbgPrint("Driver UnLoad!"); 5 } 6 7 //-------------------------------------------------------------// 8 // 在内核中进程遍历的原理就是先获取系统进程EPROCESS结构 // 9 // 然后依照其链表来获取其他的进程 // 10 // 依次遍历出来 // 11 //-------------------------------------------------------------// 12 NTSTATUS process_enum() { 13 PEPROCESS pEprocess = NULL; // 得到系统进程地址 14 PEPROCESS pFirstEprocess = NULL; 15 ULONG ulProcessName = 0; // 字符串指针,指向进程名称 16 ULONG ulProcessID = 0; // 进程ID 17 18 //----------------------------// 19 // 得到当前系统进程的EPROCESS // 20 //----------------------------// 21 pEprocess = PsGetCurrentProcess(); 22 if (pEprocess == NULL) { 23 DbgPrint("获取当前系统进程EPROCESS错误.."); 24 return STATUS_SUCCESS; 25 } 26 DbgPrint("pEprocess addr is %x0x8\r\n", pEprocess); 27 pFirstEprocess = pEprocess; 28 29 while (pEprocess) { 30 ulProcessName = (ULONG)pEprocess + 0x174; 31 ulProcessID = *(ULONG*)((ULONG)pEprocess + 0x84); 32 DbgPrint("PID=%d,process_name=%s", ulProcessID, ulProcessName); 33 34 //-----------------------------------------------------------------// 35 // 指向下一个进程 // 36 // t = *(ULONG*)((ULONG)pEprocess + 0x88) 获取下一个进程的该处指针 // 37 // t-0x88 指向下一个 EPROCESS 头部 // 38 //-----------------------------------------------------------------// 39 pEprocess = (PEPROCESS)(*(ULONG*)((ULONG)pEprocess + 0x88) - 0x88); 40 41 // 判断标准: 42 if (pEprocess == pFirstEprocess || *(ULONG*)((ULONG)pEprocess + 0x84) <= 0) { 43 DbgPrint("遍历结束!\r\n"); 44 break; 45 } 46 47 } 48 49 return STATUS_SUCCESS; 50 51 52 } 53 NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING registeryPat) { 54 DbgPrint("Driver Loaded!"); 55 pDriverObject->DriverUnload = Unload; 56 process_enum(); 57 return STATUS_SUCCESS; 58 }
原文地址:https://www.cnblogs.com/onetrainee/p/11740715.html
- .Net 转战 Android 4.4 日常笔记(1)--工具及环境搭建
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证
- 如何利用深度学习识别千万张图片?
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(32)-swfupload多文件上传[附源码]
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(31)-MVC使用RDL报表
- 43 Hot Flex and ActionScript 3.0 APIs, tips and tools for Autumn 2008
- 异步数据存储
- 谈谈基于SQL Server 的Exception Handling[中篇]
- C# AD(Active Directory)域信息同步,组织单位、用户等信息查询
- 如何仅使用TensorFlow C+来训练深度神经网络
- 捕获silverlight滚轮事件
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(30)-本地化(多语言)
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(29)-T4模版
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(28)-系统小结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android仿微信@好友功能 输入@跳转、删除整块
- Android开发实现广告无限循环功能示例
- Android仿微信底部菜单栏效果
- MySQL 案例:Update 死锁详解
- Android 线程之自定义带消息循环Looper的实例
- 详解Androidstudio3.0 关于Gradle报错的问题(小结)
- Android开发实现文件关联方法介绍
- Android开发获取重力加速度和磁场强度的方法
- Android自定义View圆形和拖动圆跟随手指拖动
- 简单好用的Adapter—ArrayAdapter详解
- Android开发之图片切割工具类定义与用法示例
- Android开发之超强图片工具类BitmapUtil完整实例
- Android使用URL读取网络资源的方法
- Android控件RecyclerView实现混排效果仿网易云音乐
- MUI整合上拉下拉的写法