内核/驱动遍历进程 GetProcess/OpenProcess
#include <ntddk.h>NTKERNELAPI
PVOID
MmGetSystemRoutineAddress (
__in PUNICODE_STRING SystemRoutineName
);
NTKERNELAPI
NTSTATUS
PsLookupProcessByProcessId(
__in HANDLE ProcessId,
__deref_out PEPROCESS *Process
);
NTKERNELAPI
NTSTATUS
NTAPI
ObOpenObjectByPointer(
IN PVOID Object,
IN ULONG HandleAttributes,
IN PACCESS_STATE PassedAccessState OPTIONAL,
IN ACCESS_MASK DesiredAccess OPTIONAL,
IN POBJECT_TYPE ObjectType OPTIONAL,
IN KPROCESSOR_MODE AccessMode,
OUT PHANDLE Handle
);
NTKERNELAPI
UCHAR *
PsGetProcessImageFileName(
__in PEPROCESS Process
);
#define PsGetCurrentProcessImageFileName() PsGetProcessImageFileName(PsGetCurrentProcess())
NTKERNELAPI
HANDLE
PsGetProcessInheritedFromUniqueProcessId(
__in PEPROCESS Process
);
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
NTSTATUS DriverUnload(
IN PDRIVER_OBJECT DriverObject
);
//########################################################################################################################################
//功能:获取进程句柄
//########################################################################################################################################
HANDLE OpenProcess(
ULONG Processid
)
{
NTSTATUS status;
PEPROCESS Process = NULL;
HANDLE hProcess = NULL;
UNICODE_STRING Unicode;
status = PsLookupProcessByProcessId(Processid, &Process);
if (NT_SUCCESS(status))
{
RtlInitUnicodeString(&Unicode, L"PsProcessType");
PsProcessType = MmGetSystemRoutineAddress(&Unicode);
if (PsProcessType)
{
status = ObOpenObjectByPointer(
Process,
NULL,
NULL,
PROCESS_ALL_ACCESS,
(PVOID) * PsProcessType,
KernelMode,
&hProcess
);
if (NT_SUCCESS(status))
{
ObfDereferenceObject(Process);
return hProcess;
}
}
ObfDereferenceObject(Process);
}
return 0;
}
//########################################################################################################################################
//功能:获取进程 PEPROCESS
//########################################################################################################################################
PEPROCESS GetProcess(
ULONG Processid
)
{
NTSTATUS Status;
PEPROCESS Process = NULL;
PEPROCESS Result = NULL;
if (PsLookupProcessByProcessId((HANDLE)Processid, &Process) == STATUS_SUCCESS)
{
Result = Process;
ObDereferenceObject(Process);
}
return Result;
}
//########################################################################################################################################
//功能:枚举进程
//########################################################################################################################################
void EnumProcess()
{
PEPROCESS Process = NULL;
HANDLE hProcess = NULL;
ULONG Count = NULL;
ULONG ProcessId = NULL;
for (ProcessId = 0; ProcessId < 9999; ProcessId += 4)
{
Process = GetProcess(ProcessId);
if (Process != 0)
{
if (MmIsAddressValid((PVOID)Process))
{
DbgPrint("序号:%d 进程ID:%d 父进程ID:%d EPROCESS:0x%08X 进程名称:%s\n",
Count,
ProcessId,
PsGetProcessInheritedFromUniqueProcessId(Process),
Process,
PsGetProcessImageFileName(Process)
);
Count++;
}
}
}
}
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
DriverObject->DriverUnload = DriverUnload;
EnumProcess();
return STATUS_SUCCESS;
}
NTSTATUS DriverUnload(
IN PDRIVER_OBJECT DriverObject
)
{
return STATUS_SUCCESS;
}
经过试验 用hidetoolz 2.2 隐藏的进程 还有断链都能检测出来,最主要的是没硬编码 xp 2k3 win7通用
我手头上也没有多少隐藏进程的代码也就试验了这些,有不对的地方大家说。。。
Электрический Водонагреватель Проточный
Система менеджмента качества компании сертифицирована по стандарту ГОСТ Р ИСО 9001:2011 в части проектирования и производства электронагревателей и изделий электрометрии
Briggs Stratton 625 Series 190 Cc Запчасти
页:
[1]