暴力枚举进程
2015-09-07 20:38
190 查看
直接上代码:
/*************************************************************************************** * 文件名: EnumProcess.c * 功 能: 枚举进程的驱动程序 ****************************************************************************************/ #include <Ntifs.h> // Ntifs.h包含Ntddk.h, 而Ntddk.h又包含Wdm.h NTKERNELAPI HANDLE PsGetProcessInheritedFromUniqueProcessId(IN PEPROCESS pEProcess); NTKERNELAPI UCHAR* PsGetProcessImageFileName(IN PEPROCESS pEProcess); /*************************************************************************************** * 参数一: 驱动程序对象指针 * 功 能: "停止服务"时调用 * 返回值: 无 ****************************************************************************************/ void DriverUnload(PDRIVER_OBJECT objDriver) { UNREFERENCED_PARAMETER(objDriver); // 避免编译器报未引用参数的警告 DbgPrint("My Driver is unloading...\n"); // 打印一行字符串 } /*************************************************************************************** * 参数一: 进程ID * 功 能 : 通过进程ID获取EPROCESS指针 * 返回值: EPROCESS指针 ****************************************************************************************/ PEPROCESS LookupProcess(HANDLE hPid) { PEPROCESS pEProcess = NULL; if (NT_SUCCESS(PsLookupProcessByProcessId(hPid, &pEProcess))) return pEProcess; return NULL; } /*************************************************************************************** * 功 能: 枚举进程 * 返回值: 无 ****************************************************************************************/ void EnumProcess() { PEPROCESS pEProc = NULL; ULONG i = 0; ULONG j = 1; // 循环遍历进程(假设线程的最大值不超过0x25600) for (i = 4; i < 0x25600; i = i+4) { // a. 根据PID返回PEPROCESS pEProc = LookupProcess((HANDLE)i); if (!pEProc) continue; // b. 打印进程信息 DbgPrint("Num: %d PEPROCESS=%p PID=%d PPID=%d Name=%s\n", j++, pEProc, (UINT32)PsGetProcessId(pEProc), (UINT32)PsGetProcessInheritedFromUniqueProcessId(pEProc), PsGetProcessImageFileName(pEProc)); // c.将进程对象引用计数减1 ObDereferenceObject(pEProc); DbgPrint("\n"); } } /*************************************************************************************** * 参数一: 驱动程序对象指针 * 参数二: 注册表路径 * 功 能 : 驱动程序入口点 * 返回值: 返回状态 ****************************************************************************************/ NTSTATUS DriverEntry(PDRIVER_OBJECT objDriver, PUNICODE_STRING strRegPath) { UNREFERENCED_PARAMETER(strRegPath); // 避免编译器报未引用参数的警告 EnumProcess(); objDriver->DriverUnload = DriverUnload; return STATUS_SUCCESS; }
相关文章推荐
- 设计模式-facade模式
- 屏幕适配的注意事项
- poj 3278 简单搜索bfs
- fastJSON
- GSON解析
- Android中未读信息提示图标的实现
- linux下tar.xz文件解压缩
- 问题:In IOS8 wakeups limit
- Android开发:Button属性警告错误
- Android五大存储---SharedPreferences
- ceshi
- RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密
- S3C2440 GPS串口配置以及数据读写
- 南阳oj 求逆数 题目117
- 求两个字符串的最长公共子串的长度
- Linux&C ——信号以及信号处理
- JSON 解析
- 串口驱动程序
- iPhone第六节:代理模式
- [转]做技术的你,如果别人找你创业,该怎么办?