米老鼠和蓝精鼠v 发表于 2024-3-11 13:35:40

内核/驱动遍历进程 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通用
我手头上也没有多少隐藏进程的代码也就试验了这些,有不对的地方大家说。。。

ShawnSwoli 发表于 2024-5-23 14:10:49

Электрический Водонагреватель Проточный





Система менеджмента качества компании   сертифицирована по стандарту ГОСТ Р ИСО 9001:2011 в части проектирования и производства   электронагревателей   и изделий электрометрии

MarcusNak 发表于 2024-5-30 14:27:49

Briggs Stratton 625 Series 190 Cc Запчасти







MarcusNak 发表于 2024-12-20 18:23:03

Запчасти Бриггс Страттон Купить



Избавьтесь от лишних хлопот по доставке холодильника, плиты или стиральной машины – наши специалисты самостоятельно заберут вышедшее из строя устройство, а после привезут обратно  



RaymondNar 发表于 4 天前

The beginner’s guide to save money

Revitalize your inundated home with our skilled Water Damage Restoration Service, addressing everything from submerged floors to drenched walls!
Our proficient professionals conduct every step, ensuring your residence is fully repaired and reinstated to its initial splendor!
Trust us to make your home safe, cozy, and vibrant again, no matter the magnitude of the catastrophe!


Call right now - 8338561952, USA
页: [1]
查看完整版本: 内核/驱动遍历进程 GetProcess/OpenProcess