找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 219|回复: 0

暴力搜索内存枚举所有进程

[复制链接]

210

主题

371

回帖

0

积分

管理员

积分
0
发表于 2013-10-11 16:24:04 | 显示全部楼层 |阅读模式
[bgcolor=#ffffff]我们知道每个进程都有一个EPROCESS结构。。。 这个结构存了此进程的所有信息 进程路径进程名称 进程PID 创建时间 结束时间等等很多多在这结构里面。。。  进程的结束时间都是0,PEB的高16位也是不会变的,所以可以通过这些特征来暴力搜索eprocess结构。[/bgcolor]

[bgcolor=#ffffff]include<ntddk.h>[/bgcolor]
[bgcolor=#ffffff]///////////////////////////不同的windows版本下面的偏移值不同[/bgcolor]
[bgcolor=#ffffff]#define  EPROCESS_SIZE       0x25C //EPROCESS结构大小[/bgcolor]
[bgcolor=#ffffff]#define  PEB_OFFSET          0x1B0[/bgcolor]
[bgcolor=#ffffff]#define  FILE_NAME_OFFSET    0x174[/bgcolor]
[bgcolor=#ffffff]#define  PROCESS_LINK_OFFSET 0x088[/bgcolor]
[bgcolor=#ffffff]#define  PROCESS_ID_OFFSET   0x084[/bgcolor]
[bgcolor=#ffffff]#define  EXIT_TIME_OFFSET    0x078[/bgcolor]
[bgcolor=#ffffff]#define  OBJECT_HEADER_SIZE  0x018[/bgcolor]
[bgcolor=#ffffff]#define  OBJECT_TYPE_OFFSET  0x008[/bgcolor]
[bgcolor=#ffffff]#define PDE_INVALID 2 [/bgcolor]
[bgcolor=#ffffff]#define PTE_INVALID 1 [/bgcolor]
[bgcolor=#ffffff]#define VALID 0 [/bgcolor]

[bgcolor=#ffffff]ULONG     pebAddress;         //PEB地址的前半部分[/bgcolor]
[bgcolor=#ffffff]PEPROCESS pSystem;            //system进程[/bgcolor]
[bgcolor=#ffffff]ULONG     pObjectTypeProcess; //进程对象类型[/bgcolor]
[bgcolor=#ffffff]ULONG   VALIDpage(ULONG addr) ;  //该函数直接复制自 Ring0下搜索内存枚举隐藏进程[/bgcolor]
[bgcolor=#ffffff]BOOLEAN IsaRealProcess(ULONG i); //该函数复制自 Ring0下搜索内存枚举隐藏进程[/bgcolor]
[bgcolor=#ffffff]VOID    WorkThread(IN PVOID pContext);[/bgcolor]
[bgcolor=#ffffff]ULONG   GetPebAddress();          //得到PEB地址前半部分[/bgcolor]
[bgcolor=#ffffff]VOID    EnumProcess();            //枚举进程[/bgcolor]
[bgcolor=#ffffff]ULONG GetExitTime(ULONG pEProcess);[/bgcolor]
[bgcolor=#ffffff]ULONG GetObjectTypeProcess(ULONG pEProcess);[/bgcolor]
[bgcolor=#ffffff]VOID    OnUnload(IN PDRIVER_OBJECT DriverObject)[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]
[bgcolor=#ffffff]}[/bgcolor]
[bgcolor=#ffffff]NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath)[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]
[bgcolor=#ffffff]  ULONG Address;[/bgcolor]
[bgcolor=#ffffff]  PEPROCESS pEProcess;[/bgcolor]
[bgcolor=#ffffff]  pSystem   = PsGetCurrentProcess();[/bgcolor]
[bgcolor=#ffffff]  pEProcess = (PEPROCESS)((ULONG)((PLIST_ENTRY)((ULONG)pSystem + PROCESS_LINK_OFFSET))->Flink - PROCESS_LINK_OFFSET);[/bgcolor]
[bgcolor=#ffffff]  Address   = *(PULONG)((ULONG)pEProcess + PEB_OFFSET);[/bgcolor]
[bgcolor=#ffffff]  pebAddress= Address & 0xFFFF0000;[/bgcolor]
[bgcolor=#ffffff]  DbgPrint("驱动安装成功\n");[/bgcolor]
[bgcolor=#ffffff]  pObjectTypeProcess = GetObjectTypeProcess(pSystem); [/bgcolor]
[bgcolor=#ffffff]  DriverObject -> DriverUnload = OnUnload;[/bgcolor]
[bgcolor=#ffffff]  EnumProcess();[/bgcolor]
[bgcolor=#ffffff]  return STATUS_SUCCESS;[/bgcolor]
[bgcolor=#ffffff]}[/bgcolor]
[bgcolor=#ffffff]ULONG GetObjectTypeProcess(ULONG pEProcess)[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]
[bgcolor=#ffffff]return *((ULONG*)(pEProcess-OBJECT_HEADER_SIZE+OBJECT_TYPE_OFFSET)) ;[/bgcolor]
[bgcolor=#ffffff]}[/bgcolor]
[bgcolor=#ffffff]ULONG  GetPebAddress( ULONG pEProcess)[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]
[bgcolor=#ffffff]  ULONG Address;[/bgcolor]

[bgcolor=#ffffff]  __try[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]
[bgcolor=#ffffff]   Address   = *(PULONG)(pEProcess + PEB_OFFSET);[/bgcolor]
[bgcolor=#ffffff]}[/bgcolor]
[bgcolor=#ffffff]__except(1)[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]
[bgcolor=#ffffff]  KdPrint(("eprocess=%x\n",pEProcess));[/bgcolor]
[bgcolor=#ffffff]}[/bgcolor]
[bgcolor=#ffffff]  return (Address & 0xFFFF0000);  [/bgcolor]
[bgcolor=#ffffff]}[/bgcolor]
[bgcolor=#ffffff]ULONG GetExitTime(ULONG pEProcess)[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]
[bgcolor=#ffffff]return *((ULONG*)(pEProcess+EXIT_TIME_OFFSET));[/bgcolor]
[bgcolor=#ffffff]}[/bgcolor]
[bgcolor=#ffffff]///////////////////////////////////////////////////////[/bgcolor]
[bgcolor=#ffffff]VOID EnumProcess()[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]
[bgcolor=#ffffff]//MmIsAddressValid[/bgcolor]
[bgcolor=#ffffff]//MmSystemRangeStart[/bgcolor]
[bgcolor=#ffffff]ULONG i=MmSystemRangeStart;[/bgcolor]
[bgcolor=#ffffff]while(i<pSystem)[/bgcolor]
[bgcolor=#ffffff]{[/bgcolor]

[bgcolor=#ffffff]  if (MmIsAddressValid(i+EXIT_TIME_OFFSET)&&MmIsAddressValid(i - OBJECT_HEADER_SIZE +OBJECT_TYPE_OFFSET)&&MmIsAddressValid(i+PEB_OFFSET))[/bgcolor]
[bgcolor=#ffffff]  {[/bgcolor]
[bgcolor=#ffffff]  // DbgPrint("eprocess=%x\n",i);[/bgcolor]
[bgcolor=#ffffff]   if (GetExitTime(i)==0&&GetObjectTypeProcess(i)==pObjectTypeProcess&&GetPebAddress(i)==pebAddress)[/bgcolor]
[bgcolor=#ffffff]   {[/bgcolor]
[bgcolor=#ffffff]    DbgPrint("找到一个进程eprocess=%x,name=%s\n",i,(i+0x174));[/bgcolor]
[bgcolor=#ffffff]   }[/bgcolor]
[bgcolor=#ffffff]  }[/bgcolor]

[bgcolor=#ffffff]  i++;[/bgcolor]
[bgcolor=#ffffff]}[/bgcolor]

[bgcolor=#ffffff]DbgPrint("找到一个进程eprocess=%x,name=%s\n",pSystem,((ULONG)pSystem+0x174));[/bgcolor]
[bgcolor=#ffffff]}[/bgcolor]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-2 02:50 , Processed in 0.155500 second(s), 20 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表