r0遍历系统进程方法总结
方法1: ZwQuerySystemInformation
这个方法网上一搜一大堆,不举例了
方法2:暴力枚举PID枚举进程,代码:
- NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegStr)
 - {
 - pDriverObj->DriverUnload = MyUnload;
 - DbgPrint("DriverEntry...\n");
 - //1.暴力枚举PID,枚举进程
 - for (ULONG i = 0; i < 65535; i += 4)
 - {
 - SearchProcessPID(i);
 - }
 - return STATUS_SUCCESS;
 - }
 - //暴力枚举PID,枚举进程
 - NTSTATUS SearchProcessPID(ULONG pid)
 - {
 - NTSTATUS status = STATUS_SUCCESS;
 - PEPROCESS process = NULL;
 - PUCHAR processName;
 - status = PsLookupProcessByProcessId((HANDLE)pid, &process);
 - processName = ExAllocatePool(NonPagedPool, sizeof(process));
 - if (NT_SUCCESS(status))
 - {
 - processName = PsGetProcessImageFileName(process);
 - DbgPrint("PID:%d,processName:%s\n", pid, processName);
 - }
 
NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegStr)
{
	pDriverObj->DriverUnload = MyUnload;
	DbgPrint("DriverEntry...\n");
	//1.暴力枚举PID,枚举进程
	for (ULONG i = 0; i < 65535; i += 4)
	{
		SearchProcessPID(i);
	}
	return STATUS_SUCCESS;
}
//暴力枚举PID,枚举进程
NTSTATUS SearchProcessPID(ULONG pid)
{
	NTSTATUS status = STATUS_SUCCESS;
	PEPROCESS process = NULL;
	PUCHAR processName;
	status = PsLookupProcessByProcessId((HANDLE)pid, &process);
	processName = ExAllocatePool(NonPagedPool, sizeof(process));
	if (NT_SUCCESS(status))
	{
		processName = PsGetProcessImageFileName(process);
		DbgPrint("PID:%d,processName:%s\n", pid, processName);
	}
	
方法3和方法1原理相同,枚举eprocess结构体的ActiveProcessLinks链表实现,代码如下
- //通过EPROCESS枚举进程
 - NTSTATUS SearchProcessEPROCESS()
 - {
 - PEPROCESS process=NULL,firstProcess=NULL;
 - NTSTATUS status = STATUS_SUCCESS;
 - PLIST_ENTRY plist;
 - process = firstProcess = PsGetCurrentProcess();
 - do
 - {
 - PUCHAR ProcessNmae = NULL;
 - ProcessNmae = PsGetProcessImageFileName(process);
 - DbgPrint("PID:%d,ProcessName:%s\n", (HANDLE)PsGetProcessId(process), ProcessNmae);
 - plist = (PLIST_ENTRY)((ULONG)process + ACTIVE_PROCESS_LINK);
 - process = (PEPROCESS)((ULONG)plist->Flink - ACTIVE_PROCESS_LINK);
 - if (process == firstProcess)
 - {
 - break;
 - }
 - } while (process != NULL);
 - return status;
 - }
 
//通过EPROCESS枚举进程
NTSTATUS SearchProcessEPROCESS()
{
	PEPROCESS process=NULL,firstProcess=NULL;
	NTSTATUS status = STATUS_SUCCESS;
	PLIST_ENTRY plist;
	process = firstProcess = PsGetCurrentProcess();
	do
	{
		PUCHAR ProcessNmae = NULL;
		ProcessNmae = PsGetProcessImageFileName(process);
		DbgPrint("PID:%d,ProcessName:%s\n", (HANDLE)PsGetProcessId(process), ProcessNmae);
		plist = (PLIST_ENTRY)((ULONG)process + ACTIVE_PROCESS_LINK);
		process = (PEPROCESS)((ULONG)plist->Flink - ACTIVE_PROCESS_LINK);
		if (process == firstProcess)
		{
			break;
		}
	} while (process != NULL);
	return status;
}
jpg 改 rar
                    
                

                
            
        
浙公网安备 33010602011771号