欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

新枚举隐藏进程(附源码)

新枚举隐藏进程(附源码)

大概有一年没怎么搞驱动一直搞R3,这些日子被 XXX刺激了一下,重启兴趣接着弄ARK,看看了自己原先的代码有点惨不忍睹,枚举进程用了暴力内存和PspCidTable 枚举发现大量的硬编码,感觉不舒服,我就试验有没有一个新的方法不用硬编码简洁简单而且效果跟现有的差不多呢,呵呵终于弄出来了,以前有前辈说过,不多说了直接代码
/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
**  FileName    :    Process.c
**  Version     :    1.00
**  Author      :    房有亮
**  Date        :    2012-07-05
**  Comment     :    枚举隐藏进程
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】【】
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/
#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通用
我手头上也没有多少隐藏进程的代码也就试验了这些,有不对的地方大家说。。。
EnumProcess.rar

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功