看流星社区

 找回密码
 注册账号
查看: 3225|回复: 5

基于EPROCESS结构中双向链表的进程检测方法总结

[复制链接]

该用户从未签到

发表于 2011-8-7 11:41:09 | 显示全部楼层 |阅读模式
对于windows下的每一个进程windows都会给它分配一个excutive process block 。该结构包含和指向一系列其它相关的数据结构。eprocess及其所有相关数据结构都位于系统空间,只有peb是位于进程地址空间的,它包含用户模式代码所决定的信息。
下面看EPROCESS的结构为:
kd> dt _eprocess
nt!_EPROCESS
  +0x000 Pcb              : _KPROCESS
  +0x06c ProcessLock      : _EX_PUSH_LOCK
  +0x070 CreateTime      : _LARGE_INTEGER
  +0x078 ExitTime        : _LARGE_INTEGER
  +0x080 RundownProtect  : _EX_RUNDOWN_REF
  +0x084 UniqueProcessId : Ptr32 Void //id指针
  +0x088 ActiveProcessLinks : _LIST_ENTRY //活动进程链表作用是把一个个eprocess结构连载一起
  +0x090 QuotaUsage      : [3] Uint4B
  +0x09c QuotaPeak        : [3] Uint4B
  +0x0a8 CommitCharge    : Uint4B
  +0x0ac PeakVirtualSize : Uint4B
  +0x0b0 VirtualSize      : Uint4B
  +0x0b4 SessionProcessLinks : _LIST_ENTRY
  +0x0bc DebugPort        : Ptr32 Void
  +0x0c0 ExceptionPort    : Ptr32 Void
  +0x0c4 ObjectTable      : Ptr32 _HANDLE_TABLE //进程连接表
  +0x0c8 Token            : _EX_FAST_REF
  +0x0cc WorkingSetLock  : _FAST_MUTEX
  +0x0ec WorkingSetPage  : Uint4B
  +0x0f0 AddressCreationLock : _FAST_MUTEX
  +0x110 HyperSpaceLock  : Uint4B
  +0x114 ForkInProgress  : Ptr32 _ETHREAD
  +0x118 HardwareTrigger : Uint4B
  +0x11c VadRoot          : Ptr32 Void
  +0x120 VadHint          : Ptr32 Void
  +0x124 CloneRoot        : Ptr32 Void
  +0x128 NumberOfPrivatePages : Uint4B
  +0x12c NumberOfLockedPages : Uint4B
  +0x130 Win32Process    : Ptr32 Void
  +0x134 Job              : Ptr32 _EJOB
  +0x138 SectionObject    : Ptr32 Void
  +0x13c SectionBaseAddress : Ptr32 Void
  +0x140 QuotaBlock      : Ptr32 _EPROCESS_QUOTA_BLOCK
  +0x144 WorkingSetWatch : Ptr32 _PAGEFAULT_HISTORY
  +0x148 Win32WindowStation : Ptr32 Void
  +0x14c InheritedFromUniqueProcessId : Ptr32 Void
  +0x150 LdtInformation  : Ptr32 Void
  +0x154 VadFreeHint      : Ptr32 Void
  +0x158 VdmObjects      : Ptr32 Void
  +0x15c DeviceMap        : Ptr32 Void
  +0x160 PhysicalVadList : _LIST_ENTRY
  +0x168 PageDirectoryPte : _HARDWARE_PTE
  +0x168 Filler          : Uint8B
  +0x170 Session          : Ptr32 Void
  +0x174 ImageFileName    : [16] UChar
  +0x184 JobLinks        : _LIST_ENTRY
  +0x18c LockedPagesList : Ptr32 Void
  +0x190 ThreadListHead  : _LIST_ENTRY
  +0x198 SecurityPort    : Ptr32 Void
  +0x19c PaeTop          : Ptr32 Void
  +0x1a0 ActiveThreads    : Uint4B
  +0x1a4 GrantedAccess    : Uint4B
  +0x1a8 DefaultHardErrorProcessing : Uint4B
  +0x1ac LastThreadExitStatus : Int4B
  +0x1b0 Peb              : Ptr32 _PEB
  +0x1b4 PrefetchTrace    : _EX_FAST_REF
  +0x1b8 ReadOperationCount : _LARGE_INTEGER
  +0x1c0 WriteOperationCount : _LARGE_INTEGER
  +0x1c8 OtherOperationCount : _LARGE_INTEGER
  +0x1d0 ReadTransferCount : _LARGE_INTEGER
  +0x1d8 WriteTransferCount : _LARGE_INTEGER
  +0x1e0 OtherTransferCount : _LARGE_INTEGER
  +0x1e8 CommitChargeLimit : Uint4B
  +0x1ec CommitChargePeak : Uint4B
  +0x1f0 AweInfo          : Ptr32 Void
  +0x1f4 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
  +0x1f8 Vm              : _MMSUPPORT
  +0x238 LastFaultCount  : Uint4B
  +0x23c ModifiedPageCount : Uint4B
  +0x240 NumberOfVads    : Uint4B
  +0x244 JobStatus        : Uint4B
  +0x248 Flags            : Uint4B
  +0x248 CreateReported  : Pos 0, 1 Bit
  +0x248 NoDebugInherit  : Pos 1, 1 Bit
  +0x248 ProcessExiting  : Pos 2, 1 Bit
  +0x248 ProcessDelete    : Pos 3, 1 Bit
  +0x248 Wow64SplitPages : Pos 4, 1 Bit
  +0x248 VmDeleted        : Pos 5, 1 Bit
  +0x248 OutswapEnabled  : Pos 6, 1 Bit
  +0x248 Outswapped      : Pos 7, 1 Bit
  +0x248 ForkFailed      : Pos 8, 1 Bit
  +0x248 HasPhysicalVad  : Pos 9, 1 Bit
  +0x248 AddressSpaceInitialized : Pos 10, 2 Bits
  +0x248 SetTimerResolution : Pos 12, 1 Bit
  +0x248 BreakOnTermination : Pos 13, 1 Bit
  +0x248 SessionCreationUnderway : Pos 14, 1 Bit
  +0x248 WriteWatch      : Pos 15, 1 Bit
  +0x248 ProcessInSession : Pos 16, 1 Bit
  +0x248 OverrideAddressSpace : Pos 17, 1 Bit
  +0x248 HasAddressSpace : Pos 18, 1 Bit
  +0x248 LaunchPrefetched : Pos 19, 1 Bit
  +0x248 InjectInpageErrors : Pos 20, 1 Bit
  +0x248 VmTopDown        : Pos 21, 1 Bit
  +0x248 Unused3          : Pos 22, 1 Bit
  +0x248 Unused4          : Pos 23, 1 Bit
  +0x248 VdmAllowed      : Pos 24, 1 Bit
  +0x248 Unused          : Pos 25, 5 Bits
  +0x248 Unused1          : Pos 30, 1 Bit
  +0x248 Unused2          : Pos 31, 1 Bit
  +0x24c ExitStatus      : Int4B
  +0x250 NextPageColor    : Uint2B
  +0x252 SubSystemMinorVersion : UChar
  +0x253 SubSystemMajorVersion : UChar
  +0x252 SubSystemVersion : Uint2B
  +0x254 PriorityClass    : UChar
  +0x255 WorkingSetAcquiredUnsafe : UChar
  +0x258 Cookie          : Uint4B
不同的机器会不一样,在上面的结构中,主要要注意 ActiveProcessLinks和ObjectTable,这里的ObjectTable是一个_HANDLE_TABLE 结构具体如下:
kd> dt _handle_table
nt!_HANDLE_TABLE
  +0x000 TableCode        : Uint4B
  +0x004 QuotaProcess    : Ptr32 _EPROCESS
  +0x008 UniqueProcessId : Ptr32 Void
  +0x00c HandleTableLock : [4] _EX_PUSH_LOCK
  +0x01c HandleTableList : _LIST_ENTRY //这里也是一个链表 ,活动进程也可以通过这个进行遍历。
  +0x024 HandleContentionEvent : _EX_PUSH_LOCK
  +0x028 DebugInfo        : Ptr32 _HANDLE_TRACE_DEBUG_INFO
  +0x02c ExtraInfoPages  : Int4B
  +0x030 FirstFree        : Uint4B
  +0x034 LastFree        : Uint4B
  +0x038 NextHandleNeedingPool : Uint4B
  +0x03c HandleCount      : Int4B
  +0x040 Flags            : Uint4B
  +0x040 StrictFIFO      : Pos 0, 1 Bit
另外0x008处的UniqueProcessId就是当前eprocess对应进程的id号,0x004处的QuotaProcess指向了当前进程的eprocess结构(system进程为空),通过它们可以获得进程id和其它的一些信息。
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

发表于 2012-8-30 15:24:48 | 显示全部楼层
看看链表数据

该用户从未签到

发表于 2013-1-21 20:11:02 | 显示全部楼层
看看发出常常常常常常

该用户从未签到

发表于 2013-9-28 08:47:48 | 显示全部楼层
好东西啊,真是好东西,感谢楼主分享!谢谢!

该用户从未签到

发表于 2019-3-28 15:52:04 | 显示全部楼层
支持楼主,支持看流星社区,以后我会经常来!

该用户从未签到

发表于 2019-3-28 17:48:45 | 显示全部楼层
支持楼主,支持看流星社区,以后我会经常来!
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-26 03:44

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

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