[原创]新枚举隐藏进程(附源码)
发表于:
2012-7-5 18:53
14816
大概有一年没怎么搞驱动一直搞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
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
上传的附件: