找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 5555|回复: 5

win10 1511版本之后,_SECTION_OBJECT结构体哪去了?

[复制链接]

5

主题

53

回帖

0

精华

铜牌会员

积分
66
发表于 2021-2-3 11:18:23 | 显示全部楼层 |阅读模式
我想通过SectionObject获取进程执行文件全路径,
以下结构在win10 1511版本之前都可以正常使用,
但是在win10 1511版本之后,
这个 _SECTION_OBJECT就没了

是微软直接去掉他了还是有其它替代结构体?

EPROCESS->SectionObject(_SECTION_OBJECT)->Segment(_SEGMENT)->ControlArea (_CONTROL_AREA)->FilePointer( _FILE_OBJECT)

78

主题

190

回帖

9

精华

贵宾会员

积分
15605
发表于 2021-2-4 07:45:10 | 显示全部楼层
我看了一圈1809的,有个ImageFilePointer成员,直接是_FILE_OBJECT。
但SectionObject成员还在啊,注意看+0x3B8和+0x448:
  1. kd> dt _EPROCESS ffffaf03fdb66540
  2. nt!_EPROCESS
  3.    +0x000 Pcb              : _KPROCESS
  4.    +0x2d8 ProcessLock      : _EX_PUSH_LOCK
  5.    +0x2e0 UniqueProcessId  : 0x00000000`0000029c Void
  6.    +0x2e8 ActiveProcessLinks : _LIST_ENTRY [ 0xffffaf03`fdc24368 - 0xffffaf03`fdb55828 ]
  7.    +0x2f8 RundownProtect   : _EX_RUNDOWN_REF
  8.    +0x300 Flags2           : 0xd000
  9.    +0x300 JobNotReallyActive : 0y0
  10.    +0x300 AccountingFolded : 0y0
  11.    +0x300 NewProcessReported : 0y0
  12.    +0x300 ExitProcessReported : 0y0
  13.    +0x300 ReportCommitChanges : 0y0
  14.    +0x300 LastReportMemory : 0y0
  15.    +0x300 ForceWakeCharge  : 0y0
  16.    +0x300 CrossSessionCreate : 0y0
  17.    +0x300 NeedsHandleRundown : 0y0
  18.    +0x300 RefTraceEnabled  : 0y0
  19.    +0x300 PicoCreated      : 0y0
  20.    +0x300 EmptyJobEvaluated : 0y0
  21.    +0x300 DefaultPagePriority : 0y101
  22.    +0x300 PrimaryTokenFrozen : 0y1
  23.    +0x300 ProcessVerifierTarget : 0y0
  24.    +0x300 RestrictSetThreadContext : 0y0
  25.    +0x300 AffinityPermanent : 0y0
  26.    +0x300 AffinityUpdateEnable : 0y0
  27.    +0x300 PropagateNode    : 0y0
  28.    +0x300 ExplicitAffinity : 0y0
  29.    +0x300 ProcessExecutionState : 0y00
  30.    +0x300 EnableReadVmLogging : 0y0
  31.    +0x300 EnableWriteVmLogging : 0y0
  32.    +0x300 FatalAccessTerminationRequested : 0y0
  33.    +0x300 DisableSystemAllowedCpuSet : 0y0
  34.    +0x300 ProcessStateChangeRequest : 0y00
  35.    +0x300 ProcessStateChangeInProgress : 0y0
  36.    +0x300 InPrivate        : 0y0
  37.    +0x304 Flags            : 0x144d2c01
  38.    +0x304 CreateReported   : 0y1
  39.    +0x304 NoDebugInherit   : 0y0
  40.    +0x304 ProcessExiting   : 0y0
  41.    +0x304 ProcessDelete    : 0y0
  42.    +0x304 ManageExecutableMemoryWrites : 0y0
  43.    +0x304 VmDeleted        : 0y0
  44.    +0x304 OutswapEnabled   : 0y0
  45.    +0x304 Outswapped       : 0y0
  46.    +0x304 FailFastOnCommitFail : 0y0
  47.    +0x304 Wow64VaSpace4Gb  : 0y0
  48.    +0x304 AddressSpaceInitialized : 0y11
  49.    +0x304 SetTimerResolution : 0y0
  50.    +0x304 BreakOnTermination : 0y1
  51.    +0x304 DeprioritizeViews : 0y0
  52.    +0x304 WriteWatch       : 0y0
  53.    +0x304 ProcessInSession : 0y1
  54.    +0x304 OverrideAddressSpace : 0y0
  55.    +0x304 HasAddressSpace  : 0y1
  56.    +0x304 LaunchPrefetched : 0y1
  57.    +0x304 Background       : 0y0
  58.    +0x304 VmTopDown        : 0y0
  59.    +0x304 ImageNotifyDone  : 0y1
  60.    +0x304 PdeUpdateNeeded  : 0y0
  61.    +0x304 VdmAllowed       : 0y0
  62.    +0x304 ProcessRundown   : 0y0
  63.    +0x304 ProcessInserted  : 0y1
  64.    +0x304 DefaultIoPriority : 0y010
  65.    +0x304 ProcessSelfDelete : 0y0
  66.    +0x304 SetTimerResolutionLink : 0y0
  67.    +0x308 CreateTime       : _LARGE_INTEGER 0x01d6fa83`4c56ae38
  68.    +0x310 ProcessQuotaUsage : [2] 0x3e90
  69.    +0x320 ProcessQuotaPeak : [2] 0x4658
  70.    +0x330 PeakVirtualSize  : 0x00000201`06498000
  71.    +0x338 VirtualSize      : 0x00000201`05244000
  72.    +0x340 SessionProcessLinks : _LIST_ENTRY [ 0xffffaf03`fdc243c0 - 0xffff9c81`e0486010 ]
  73.    +0x350 ExceptionPortData : (null)
  74.    +0x350 ExceptionPortValue : 0
  75.    +0x350 ExceptionPortState : 0y000
  76.    +0x358 Token            : _EX_FAST_REF
  77.    +0x360 MmReserved       : 0
  78.    +0x368 AddressCreationLock : _EX_PUSH_LOCK
  79.    +0x370 PageTableCommitmentLock : _EX_PUSH_LOCK
  80.    +0x378 RotateInProgress : (null)
  81.    +0x380 ForkInProgress   : (null)
  82.    +0x388 CommitChargeJob  : (null)
  83.    +0x390 CloneRoot        : _RTL_AVL_TREE
  84.    +0x398 NumberOfPrivatePages : 0x11f
  85.    +0x3a0 NumberOfLockedPages : 0
  86.    +0x3a8 Win32Process     : 0xffff8880`40608010 Void
  87.    +0x3b0 Job              : (null)
  88.    +0x3b8 SectionObject    : 0xffff8c85`a5762240 Void
  89.    +0x3c0 SectionBaseAddress : 0x00007ff7`9a1e0000 Void
  90.    +0x3c8 Cookie           : 0x96d0bec3
  91.    +0x3d0 WorkingSetWatch  : (null)
  92.    +0x3d8 Win32WindowStation : (null)
  93.    +0x3e0 InheritedFromUniqueProcessId : 0x00000000`0000028c Void
  94.    +0x3e8 Spare0           : (null)
  95.    +0x3f0 OwnerProcessId   : 0x28e
  96.    +0x3f8 Peb              : 0x00000095`f285c000 _PEB
  97.    +0x400 Session          : 0xffff9c81`e0486000 _MM_SESSION_SPACE
  98.    +0x408 Spare1           : (null)
  99.    +0x410 QuotaBlock       : 0xfffff805`57854600 _EPROCESS_QUOTA_BLOCK
  100.    +0x418 ObjectTable      : 0xffff8c85`a2cbd8c0 _HANDLE_TABLE
  101.    +0x420 DebugPort        : (null)
  102.    +0x428 WoW64Process     : (null)
  103.    +0x430 DeviceMap        : 0xffff8c85`a1e13660 Void
  104.    +0x438 EtwDataSource    : 0xffffaf03`fca56ba0 Void
  105.    +0x440 PageDirectoryPte : 0
  106.    +0x448 ImageFilePointer : 0xffffaf03`fda8d200 _FILE_OBJECT
  107.    +0x450 ImageFileName    : [15]  "csrss.exe"
  108.    +0x45f PriorityClass    : 0x2 ''
  109.    +0x460 SecurityPort     : (null)
  110.    +0x468 SeAuditProcessCreationInfo : _SE_AUDIT_PROCESS_CREATION_INFO
  111.    +0x470 JobLinks         : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
  112.    +0x480 HighestUserAddress : 0x00007fff`ffff0000 Void
  113.    +0x488 ThreadListHead   : _LIST_ENTRY [ 0xffffaf03`fdb6f768 - 0xffffaf03`fdb5c728 ]
  114.    +0x498 ActiveThreads    : 0xb
  115.    +0x49c ImagePathHash    : 0
  116.    +0x4a0 DefaultHardErrorProcessing : 0
  117.    +0x4a4 LastThreadExitStatus : 0n0
  118.    +0x4a8 PrefetchTrace    : _EX_FAST_REF
  119.    +0x4b0 LockedPagesList  : (null)
  120.    +0x4b8 ReadOperationCount : _LARGE_INTEGER 0x0
  121.    +0x4c0 WriteOperationCount : _LARGE_INTEGER 0x0
  122.    +0x4c8 OtherOperationCount : _LARGE_INTEGER 0x2f
  123.    +0x4d0 ReadTransferCount : _LARGE_INTEGER 0x0
  124.    +0x4d8 WriteTransferCount : _LARGE_INTEGER 0x0
  125.    +0x4e0 OtherTransferCount : _LARGE_INTEGER 0x500
  126.    +0x4e8 CommitChargeLimit : 0
  127.    +0x4f0 CommitCharge     : 0x19e
  128.    +0x4f8 CommitChargePeak : 0x702
  129.    +0x500 Vm               : _MMSUPPORT_FULL
  130.    +0x610 MmProcessLinks   : _LIST_ENTRY [ 0xffffaf03`fdc24690 - 0xffffaf03`fdb55b50 ]
  131.    +0x620 ModifiedPageCount : 0xf65
  132.    +0x624 ExitStatus       : 0n259
  133.    +0x628 VadRoot          : _RTL_AVL_TREE
  134.    +0x630 VadHint          : 0xffffaf03`fd1424a0 Void
  135.    +0x638 VadCount         : 0x4d
  136.    +0x640 VadPhysicalPages : 0
  137.    +0x648 VadPhysicalPagesLimit : 0
  138.    +0x650 AlpcContext      : _ALPC_PROCESS_CONTEXT
  139.    +0x670 TimerResolutionLink : _LIST_ENTRY [ 0x00000000`00000000 - 0x00000000`00000000 ]
  140.    +0x680 TimerResolutionStackRecord : (null)
  141.    +0x688 RequestedTimerResolution : 0
  142.    +0x68c SmallestTimerResolution : 0
  143.    +0x690 ExitTime         : _LARGE_INTEGER 0x0
  144.    +0x698 InvertedFunctionTable : (null)
  145.    +0x6a0 InvertedFunctionTableLock : _EX_PUSH_LOCK
  146.    +0x6a8 ActiveThreadsHighWatermark : 0xd
  147.    +0x6ac LargePrivateVadCount : 0
  148.    +0x6b0 ThreadListLock   : _EX_PUSH_LOCK
  149.    +0x6b8 WnfContext       : 0xffff8c85`a5761750 Void
  150.    +0x6c0 ServerSilo       : (null)
  151.    +0x6c8 SignatureLevel   : 0x3e '>'
  152.    +0x6c9 SectionSignatureLevel : 0xc ''
  153.    +0x6ca Protection       : _PS_PROTECTION
  154.    +0x6cb HangCount        : 0y000
  155.    +0x6cb GhostCount       : 0y000
  156.    +0x6cb PrefilterException : 0y0
  157.    +0x6cc Flags3           : 0x40c040
  158.    +0x6cc Minimal          : 0y0
  159.    +0x6cc ReplacingPageRoot : 0y0
  160.    +0x6cc Crashed          : 0y0
  161.    +0x6cc JobVadsAreTracked : 0y0
  162.    +0x6cc VadTrackingDisabled : 0y0
  163.    +0x6cc AuxiliaryProcess : 0y0
  164.    +0x6cc SubsystemProcess : 0y1
  165.    +0x6cc IndirectCpuSets  : 0y0
  166.    +0x6cc RelinquishedCommit : 0y0
  167.    +0x6cc HighGraphicsPriority : 0y0
  168.    +0x6cc CommitFailLogged : 0y0
  169.    +0x6cc ReserveFailLogged : 0y0
  170.    +0x6cc SystemProcess    : 0y0
  171.    +0x6cc HideImageBaseAddresses : 0y0
  172.    +0x6cc AddressPolicyFrozen : 0y1
  173.    +0x6cc ProcessFirstResume : 0y1
  174.    +0x6cc ForegroundExternal : 0y0
  175.    +0x6cc ForegroundSystem : 0y0
  176.    +0x6cc HighMemoryPriority : 0y0
  177.    +0x6cc EnableProcessSuspendResumeLogging : 0y0
  178.    +0x6cc EnableThreadSuspendResumeLogging : 0y0
  179.    +0x6cc SecurityDomainChanged : 0y0
  180.    +0x6cc SecurityFreezeComplete : 0y1
  181.    +0x6cc VmProcessorHost  : 0y0
  182.    +0x6d0 DeviceAsid       : 0n0
  183.    +0x6d8 SvmData          : (null)
  184.    +0x6e0 SvmProcessLock   : _EX_PUSH_LOCK
  185.    +0x6e8 SvmLock          : 0
  186.    +0x6f0 SvmProcessDeviceListHead : _LIST_ENTRY [ 0xffffaf03`fdb66c30 - 0xffffaf03`fdb66c30 ]
  187.    +0x700 LastFreezeInterruptTime : 0
  188.    +0x708 DiskCounters     : 0xffffaf03`fdb66d90 _PROCESS_DISK_COUNTERS
  189.    +0x710 PicoContext      : (null)
  190.    +0x718 EnclaveTable     : (null)
  191.    +0x720 EnclaveNumber    : 0
  192.    +0x728 EnclaveLock      : _EX_PUSH_LOCK
  193.    +0x730 HighPriorityFaultsAllowed : 0
  194.    +0x738 EnergyContext    : 0xffffaf03`fdb66db8 _PO_PROCESS_ENERGY_CONTEXT
  195.    +0x740 VmContext        : (null)
  196.    +0x748 SequenceNumber   : 9
  197.    +0x750 CreateInterruptTime : 0x4a01b7a
  198.    +0x758 CreateUnbiasedInterruptTime : 0x4a01b7a
  199.    +0x760 TotalUnbiasedFrozenTime : 0
  200.    +0x768 LastAppStateUpdateTime : 0x4a01b7a
  201.    +0x770 LastAppStateUptime : 0y0000000000000000000000000000000000000000000000000000000000000 (0)
  202.    +0x770 LastAppState     : 0y000
  203.    +0x778 SharedCommitCharge : 0x3aa
  204.    +0x780 SharedCommitLock : _EX_PUSH_LOCK
  205.    +0x788 SharedCommitLinks : _LIST_ENTRY [ 0xffff8c85`a2d6d8e8 - 0xffff8c85`a7311338 ]
  206.    +0x798 AllowedCpuSets   : 0
  207.    +0x7a0 DefaultCpuSets   : 0
  208.    +0x798 AllowedCpuSetsIndirect : (null)
  209.    +0x7a0 DefaultCpuSetsIndirect : (null)
  210.    +0x7a8 DiskIoAttribution : (null)
  211.    +0x7b0 DxgProcess       : 0xffff8c85`a576b050 Void
  212.    +0x7b8 Win32KFilterSet  : 0
  213.    +0x7c0 ProcessTimerDelay : _PS_INTERLOCKED_TIMER_DELAY_VALUES
  214.    +0x7c8 KTimerSets       : 0
  215.    +0x7cc KTimer2Sets      : 0
  216.    +0x7d0 ThreadTimerSets  : 0xb2
  217.    +0x7d8 VirtualTimerListLock : 0
  218.    +0x7e0 VirtualTimerListHead : _LIST_ENTRY [ 0xffffaf03`fdb66d20 - 0xffffaf03`fdb66d20 ]
  219.    +0x7f0 WakeChannel      : _WNF_STATE_NAME
  220.    +0x7f0 WakeInfo         : _PS_PROCESS_WAKE_INFORMATION
  221.    +0x820 MitigationFlags  : 0x121
  222.    +0x820 MitigationFlagsValues : <unnamed-tag>
  223.    +0x824 MitigationFlags2 : 0
  224.    +0x824 MitigationFlags2Values : <unnamed-tag>
  225.    +0x828 PartitionObject  : 0xffffaf03`fca95ce0 Void
  226.    +0x830 SecurityDomain   : 0
  227.    +0x838 ParentSecurityDomain : 0
  228.    +0x840 CoverageSamplerContext : (null)
  229.    +0x848 MmHotPatchContext : (null)
复制代码

展开SectionObject:
  1. kd> dt _SECTION ffff8c85`a5762240 /b
  2. nt!_SECTION
  3.    +0x000 SectionNode      : _RTL_BALANCED_NODE
  4.       +0x000 Children         :
  5.        [00] (null)
  6.        [01] (null)
  7.       +0x000 Left             : (null)
  8.       +0x008 Right            : (null)
  9.       +0x010 Red              : 0y0
  10.       +0x010 Balance          : 0y00
  11.       +0x010 ParentValue      : 0
  12.    +0x018 StartingVpn      : 0
  13.    +0x020 EndingVpn        : 0
  14.    +0x028 u1               : <unnamed-tag>
  15.       +0x000 ControlArea      : 0xffffaf03`fd80ac70
  16.       +0x000 FileObject       : 0xffffaf03`fd80ac70
  17.       +0x000 RemoteImageFileObject : 0y0
  18.       +0x000 RemoteDataFileObject : 0y0
  19.    +0x030 SizeOfSection    : 0x7000
  20.    +0x038 u                : <unnamed-tag>
  21.       +0x000 LongFlags        : 0x100a0
  22.       +0x000 Flags            : _MMSECTION_FLAGS
  23.          +0x000 BeingDeleted     : 0y0
  24.          +0x000 BeingCreated     : 0y0
  25.          +0x000 BeingPurged      : 0y0
  26.          +0x000 NoModifiedWriting : 0y0
  27.          +0x000 FailAllIo        : 0y0
  28.          +0x000 Image            : 0y1
  29.          +0x000 Based            : 0y0
  30.          +0x000 File             : 0y1
  31.          +0x000 AttemptingDelete : 0y0
  32.          +0x000 PrefetchCreated  : 0y0
  33.          +0x000 PhysicalMemory   : 0y0
  34.          +0x000 ImageControlAreaOnRemovableMedia : 0y0
  35.          +0x000 Reserve          : 0y0
  36.          +0x000 Commit           : 0y0
  37.          +0x000 NoChange         : 0y0
  38.          +0x000 WasPurged        : 0y0
  39.          +0x000 UserReference    : 0y1
  40.          +0x000 GlobalMemory     : 0y0
  41.          +0x000 DeleteOnClose    : 0y0
  42.          +0x000 FilePointerNull  : 0y0
  43.          +0x000 PreferredNode    : 0y000000 (0)
  44.          +0x000 GlobalOnlyPerSession : 0y0
  45.          +0x000 UserWritable     : 0y0
  46.          +0x000 SystemVaAllocated : 0y0
  47.          +0x000 PreferredFsCompressionBoundary : 0y0
  48.          +0x000 UsingFileExtents : 0y0
  49.          +0x000 PageSize64K      : 0y0
  50.    +0x03c InitialPageProtection : 0y000000010000 (0x10)
  51.    +0x03c SessionId        : 0y0000000000000000000 (0)
  52.    +0x03c NoValidationNeeded : 0y0
复制代码

然后展开ControlArea:
  1. kd> dt _CONTROL_AREA ffffaf03fd80ac70 /b
  2. nt!_CONTROL_AREA
  3.    +0x000 Segment          : 0xffff8c85`a525eed0
  4.    +0x008 ListHead         : _LIST_ENTRY [ 0xffffaf03`fd142d20 - 0xffffaf03`fd457df0 ]
  5.       +0x000 Flink            : 0xffffaf03`fd142d20
  6.       +0x008 Blink            : 0xffffaf03`fd457df0
  7.    +0x008 AweContext       : 0xffffaf03`fd142d20
  8.    +0x018 NumberOfSectionReferences : 2
  9.    +0x020 NumberOfPfnReferences : 7
  10.    +0x028 NumberOfMappedViews : 2
  11.    +0x030 NumberOfUserReferences : 4
  12.    +0x038 u                : <unnamed-tag>
  13.       +0x000 LongFlags        : 0xa0
  14.       +0x000 Flags            : _MMSECTION_FLAGS
  15.          +0x000 BeingDeleted     : 0y0
  16.          +0x000 BeingCreated     : 0y0
  17.          +0x000 BeingPurged      : 0y0
  18.          +0x000 NoModifiedWriting : 0y0
  19.          +0x000 FailAllIo        : 0y0
  20.          +0x000 Image            : 0y1
  21.          +0x000 Based            : 0y0
  22.          +0x000 File             : 0y1
  23.          +0x000 AttemptingDelete : 0y0
  24.          +0x000 PrefetchCreated  : 0y0
  25.          +0x000 PhysicalMemory   : 0y0
  26.          +0x000 ImageControlAreaOnRemovableMedia : 0y0
  27.          +0x000 Reserve          : 0y0
  28.          +0x000 Commit           : 0y0
  29.          +0x000 NoChange         : 0y0
  30.          +0x000 WasPurged        : 0y0
  31.          +0x000 UserReference    : 0y0
  32.          +0x000 GlobalMemory     : 0y0
  33.          +0x000 DeleteOnClose    : 0y0
  34.          +0x000 FilePointerNull  : 0y0
  35.          +0x000 PreferredNode    : 0y000000 (0)
  36.          +0x000 GlobalOnlyPerSession : 0y0
  37.          +0x000 UserWritable     : 0y0
  38.          +0x000 SystemVaAllocated : 0y0
  39.          +0x000 PreferredFsCompressionBoundary : 0y0
  40.          +0x000 UsingFileExtents : 0y0
  41.          +0x000 PageSize64K      : 0y0
  42.    +0x03c u1               : <unnamed-tag>
  43.       +0x000 LongFlags        : 0
  44.       +0x000 Flags            : _MMSECTION_FLAGS2
  45.          +0x000 PartitionId      : 0y0000000000 (0)
  46.          +0x002 NoCrossPartitionAccess : 0y0
  47.          +0x002 SubsectionCrossPartitionReferenceOverflow : 0y0
  48.    +0x040 FilePointer      : _EX_FAST_REF
  49.       +0x000 Object           : 0xffffaf03`fd84591b
  50.       +0x000 RefCnt           : 0y1011
  51.       +0x000 Value            : 0xffffaf03`fd84591b
  52.    +0x048 ControlAreaLock  : 0n0
  53.    +0x04c ModifiedWriteCount : 0
  54.    +0x050 WaitList         : (null)
  55.    +0x058 u2               : <unnamed-tag>
  56.       +0x000 e2               : <unnamed-tag>
  57.          +0x000 NumberOfSystemCacheViews : 0xffffffff
  58.          +0x000 ImageRelocationStartBit : 0xffffffff
  59.          +0x004 WritableUserReferences : 0n58720257
  60.          +0x004 ImageRelocationSizeIn64k : 0y0000000000000001 (0x1)
  61.          +0x004 LargePage        : 0y0
  62.          +0x004 AweSection       : 0y0
  63.          +0x004 SystemImage      : 0y0
  64.          +0x004 StrongCode       : 0y00
  65.          +0x004 CantMove         : 0y0
  66.          +0x004 BitMap           : 0y10
  67.          +0x004 ImageActive      : 0y1
  68.          +0x004 ImageBaseOkToReuse : 0y1
  69.          +0x008 FlushInProgressCount : 0xfd80ae78
  70.          +0x008 NumberOfSubsections : 0xfd80ae78
  71.          +0x008 SeImageStub      : 0xffffaf03`fd80ae78
  72.    +0x068 FileObjectLock   : _EX_PUSH_LOCK
  73.       +0x000 Locked           : 0y0
  74.       +0x000 Waiting          : 0y0
  75.       +0x000 Waking           : 0y0
  76.       +0x000 MultipleShared   : 0y0
  77.       +0x000 Shared           : 0y000000000000000000000000000000000000000000000000000000000000 (0)
  78.       +0x000 Value            : 0
  79.       +0x000 Ptr              : (null)
  80.    +0x070 LockedPages      : 1
  81.    +0x078 u3               : <unnamed-tag>
  82.       +0x000 IoAttributionContext : 0y0000000000000000000000000000000000000000000000000000000000110 (0x6)
  83.       +0x000 Spare            : 0y000
  84.       +0x000 ImageCrossPartitionCharge : 6
  85.       +0x000 CommittedPageCount : 0y000000000000000000000000000000000110 (0x6)
复制代码

位于+0x40处的FilePointer,因为低4位是引用计数,去掉它之后地址就是ffffaf03`fd845910,展开看就是:
  1. kd> dt _FILE_OBJECT ffffaf03fd845910
  2. nt!_FILE_OBJECT
  3.    +0x000 Type             : 0n5
  4.    +0x002 Size             : 0n216
  5.    +0x008 DeviceObject     : 0xffffaf03`fd530870 _DEVICE_OBJECT
  6.    +0x010 Vpb              : 0xffffaf03`fd2b98b0 _VPB
  7.    +0x018 FsContext        : 0xffff8c85`a500f8b0 Void
  8.    +0x020 FsContext2       : 0xffff8c85`a500fb10 Void
  9.    +0x028 SectionObjectPointer : 0xffffaf03`fd8e7768 _SECTION_OBJECT_POINTERS
  10.    +0x030 PrivateCacheMap  : (null)
  11.    +0x038 FinalStatus      : 0n0
  12.    +0x040 RelatedFileObject : (null)
  13.    +0x048 LockOperation    : 0 ''
  14.    +0x049 DeletePending    : 0 ''
  15.    +0x04a ReadAccess       : 0x1 ''
  16.    +0x04b WriteAccess      : 0 ''
  17.    +0x04c DeleteAccess     : 0 ''
  18.    +0x04d SharedRead       : 0x1 ''
  19.    +0x04e SharedWrite      : 0 ''
  20.    +0x04f SharedDelete     : 0x1 ''
  21.    +0x050 Flags            : 0x44042
  22.    +0x058 FileName         : _UNICODE_STRING "\Windows\System32\csrss.exe"
  23.    +0x068 CurrentByteOffset : _LARGE_INTEGER 0x0
  24.    +0x070 Waiters          : 0
  25.    +0x074 Busy             : 0
  26.    +0x078 LastLock         : (null)
  27.    +0x080 Lock             : _KEVENT
  28.    +0x098 Event            : _KEVENT
  29.    +0x0b0 CompletionContext : (null)
  30.    +0x0b8 IrpListLock      : 0
  31.    +0x0c0 IrpList          : _LIST_ENTRY [ 0xffffaf03`fd8459d0 - 0xffffaf03`fd8459d0 ]
  32.    +0x0d0 FileObjectExtension : (null)
复制代码

另外TA很久之前就科普过用PsReferenceProcessFilePointer函数直接来拿进程的文件对象,免一切偏移量和硬编码:http://www.m5home.com/bbs/thread-8627-1-1.html
不过TA给的代码有个小问题就是漏掉了对取得的文件对象的解引用。应该在函数返回前加上一句
  1. ObDereferenceObject(pFileObject);
复制代码

857

主题

2632

回帖

2

精华

管理员

此生无悔入华夏,  长居日耳曼尼亚。  

积分
36130
发表于 2021-2-4 08:54:21 | 显示全部楼层
tangptr@126.com 发表于 2021-2-4 07:45
我看了一圈1809的,有个ImageFilePointer成员,直接是_FILE_OBJECT。
但SectionObject成员还在啊,注意看+0 ...


我那段没有加ObDereferenceObject的代码不知道被多少人抄去用了多少回了,哈哈。

即使我已经加了注释“尚未释放内存 以及 ObDereferenceObject”。

5

主题

53

回帖

0

精华

铜牌会员

积分
66
 楼主| 发表于 2021-2-4 16:05:35 | 显示全部楼层
tangptr@126.com 发表于 2021-2-4 07:45
我看了一圈1809的,有个ImageFilePointer成员,直接是_FILE_OBJECT。
但SectionObject成员还在啊,注意看+0 ...

首先感谢大佬回复,有点明白了,看来还得自己钻研windbg啊
刚才又仔细看了看资料,从win10 1507 开始,多了一个_SECTION的新结构,但仍然保留了_SECTION_OBJECT结构,
然而1507之后的1511开始,就完全去掉了 _SECTION_OBJECT结构,改为_SECTION结构。

按照这样来说的话,那偏移结构就从 1511之前的
EPROCESS->SectionObject(_SECTION_OBJECT)->Segment(_SEGMENT)->ControlArea (_CONTROL_AREA)->FilePointer( _FILE_OBJECT)

改为

EPROCESS->SectionObject(_SECTION)->ControlArea (_CONTROL_AREA)->FilePointer( _FILE_OBJECT)

去掉了中间的_SEGMENT结构了吗?

还有一个问题就是
+0x040 FilePointer      : _EX_FAST_REF
      +0x000 Object           : 0xffffaf03`fd84591b
      +0x000 RefCnt           : 0y1011
      +0x000 Value            : 0xffffaf03`fd84591b
为啥低4位是引用计数 要用地址 减0xb呢?

78

主题

190

回帖

9

精华

贵宾会员

积分
15605
发表于 2021-2-4 20:16:42 | 显示全部楼层
HJonny 发表于 2021-2-4 16:05
首先感谢大佬回复,有点明白了,看来还得自己钻研windbg啊
刚才又仔细看了看资料,从win10 1507 开始,多 ...

第一个问题没法回答,无法保证win10以后不会再变。只能说还是用PsReferenceProcessFilePointer比较好吧。
这一段东西
  1. +0x040 FilePointer      : _EX_FAST_REF
  2.       +0x000 Object           : 0xffffaf03`fd84591b
  3.       +0x000 RefCnt           : 0y1011
  4.       +0x000 Value            : 0xffffaf03`fd84591b
复制代码

用C语言写出来就是
  1. typedef union _EX_FAST_REF
  2. {
  3.         struct
  4.         {
  5.                 ULONG64 RefCnt:4;
  6.                 ULONG64 Object:60;
  7.         };
  8.         ULONG64 Value;
  9. }EX_FAST_REF,*PEX_FAST_REF;
复制代码

低四位是引用计数(RefCnt即Reference Count缩写),是快速引用这个对象时使用的,与对象自身的地址无关,故去掉。但不要用减法,而是要用与运算复位之。你也可以自行声明这个联合体,对联合体的Value赋值后再将Object左移4位。

5

主题

53

回帖

0

精华

铜牌会员

积分
66
 楼主| 发表于 2021-2-4 22:34:43 | 显示全部楼层
tangptr@126.com 发表于 2021-2-4 20:16
第一个问题没法回答,无法保证win10以后不会再变。只能说还是用PsReferenceProcessFilePointer比较好吧。 ...

明白了,多谢大佬
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

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