0x4 PEB断链隐藏模块
1.如何找到_PEB_LDR_DATA
由_TEB找到_PEB,_PEB偏移0xC找到_PEB_LDR_DATA
2.基础知识
_LDR_DATA_TABLE_ENTRY结构
ntdll!_LDR_DATA_TABLE_ENTRY
+0x000 InLoadOrderLinks : _LIST_ENTRY//_PEB_LDR_DATA的第一个_LIST_ENTRY结构指向这里
+0x008 InMemoryOrderLinks : _LIST_ENTRY//_PEB_LDR_DATA的第二个_LIST_ENTRY结构指向这里
+0x010 InInitializationOrderLinks : _LIST_ENTRY//_PEB_LDR_DATA的第三个_LIST_ENTRY结构指向这里
+0x018 DllBase : Ptr32 Void//DLL基址
+0x01c EntryPoint : Ptr32 Void
+0x020 SizeOfImage : Uint4B
+0x024 FullDllName : _UNICODE_STRING//带路径的dll的名称
+0x02c BaseDllName : _UNICODE_STRING//dll的名称
+0x034 Flags : Uint4B
+0x038 LoadCount : Uint2B
+0x03a TlsIndex : Uint2B
+0x03c HashLinks : _LIST_ENTRY
+0x03c SectionPointer : Ptr32 Void
+0x040 CheckSum : Uint4B
+0x044 TimeDateStamp : Uint4B
+0x044 LoadedImports : Ptr32 Void
+0x048 EntryPointActivationContext : Ptr32 _ACTIVATION_CONTEXT
+0x04c PatchInformation : Ptr32 Void
+0x050 ForwarderLinks : _LIST_ENTRY
+0x058 ServiceTagLinks : _LIST_ENTRY
+0x060 StaticLinks : _LIST_ENTRY
+0x068 ContextInformation : Ptr32 Void
+0x06c OriginalBase : Uint4B
+0x070 LoadTime : _LARGE_INTEGER
_PEB_LDR_DATA结构
typedef struct _PEB_LDR_DATA
{
ULONG Length; // +0x00
BOOLEAN Initialized; // +0x04
PVOID SsHandle; // +0x08
LIST_ENTRY InLoadOrderModuleList; // +0x0c 加载顺序
LIST_ENTRY InMemoryOrderModuleList; // +0x14 在内存中的顺序
LIST_ENTRY InInitializationOrderModuleList;// +0x1c 初始化装载顺序
PVOID EntryInProgress; // +0x24
} PEB_LDR_DATA,*PPEB_LDR_DATA;
_LIST_ENTRY结构
typedef struct _LIST_ENTRY {
struct _LIST_ENTRY *Flink;
struct _LIST_ENTRY *Blink