原文发表于百度空间,2008-7-26
==========================================================================
继续实践之前的想法,就是断掉如下这个结构中的双向链表:
typedef struct _LDR_MODULE { LIST_ENTRY InLoadOrderModuleList; LIST_ENTRY InMemoryOrderModuleList; LIST_ENTRY InInitializationOrderModuleList; void* BaseAddress; void* EntryPoint; ULONG SizeOfImage; UNICODE_STRING FullDllName; UNICODE_STRING BaseDllName; ULONG Flags; SHORT LoadCount; SHORT TlsIndex; HANDLE SectionHandle; ULONG CheckSum; ULONG TimeDateStamp; } LDR_MODULE, *PLDR_MODULE;
断开之后,凡使用Module32First()/Module32Next枚举模块的就找不到被隐藏的模块了.
不过这样隐藏好像效果太差,没什么实用价值,最起码比起修改映像名称的效果要差多了~
下面是用WSysCheck查看的效果图(隐藏了kernel32.dll):
断链之前:
断链之后: