原文发表于百度空间,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):
断链之前:
断链之后: