首页
社区
课程
招聘
[讨论]关于通过PEB隐藏进程内模块的问题
发表于: 2011-4-28 19:15 8754

[讨论]关于通过PEB隐藏进程内模块的问题

2011-4-28 19:15
8754
通过PEB断链隐藏了模块,但是使用GetModuleHandle却还是能返回模块的handle的。
比如我通过断PEB链隐藏了ntdll.dll
例子代码:
HMODULE hModule = GetModuleHandle(L"ntdll.dll");
void *pfunc = GetProcAddress(hModule, "DbgBreakPoint");
wprintf(L"%p, func = %p\n", hModule, pfunc);
hModule 的值却是对的,只是pfunc为空而已。

现在的问题是,还需要增加什么手段,可以让GetModuleHandle也返回NULL,
否则别人还是可以通过offset + hModule ,能找到函数的地址的。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
LdrLink,LdrpHashTable,PE Head,VAD。。。。
2011-4-28 19:37
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
GetModuleHandle是通过ntdll!LdrpHashTable搜索的,把它XX掉。。。
2011-4-28 19:58
0
雪    币: 34
活跃值: (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
nt!_LDR_DATA_TABLE_ENTRY
+0x000 InLoadOrderLinks : _LIST_ENTRY                         // 和谐
   +0x008 InMemoryOrderLinks : _LIST_ENTRY                     // 和谐
   +0x010 InInitializationOrderLinks : _LIST_ENTRY              // 和谐
   +0x018 DllBase          : Ptr32 Void
   +0x01c EntryPoint       : Ptr32 Void
   +0x020 SizeOfImage      : Uint4B
   +0x024 FullDllName      : _UNICODE_STRING
   +0x02c BaseDllName      : _UNICODE_STRING
   +0x034 Flags            : Uint4B
   +0x038 LoadCount        : Uint2B
   +0x03a TlsIndex         : Uint2B
   +0x03c HashLinks        : _LIST_ENTRY                           // 把这个也和谐掉,然后GetModuleHandle就查不出来了.
   +0x03c SectionPointer   : Ptr32 Void
   +0x040 CheckSum         : Uint4B
   +0x044 TimeDateStamp    : Uint4B
   +0x044 LoadedImports    : Ptr32 Void
   +0x048 EntryPointActivationContext : Ptr32 Void
   +0x04c PatchInformation : Ptr32 Void
2011-4-28 22:26
0
雪    币: 203
活跃值: (279)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢楼上几位,这里高手云集啊
2011-4-29 09:56
0
雪    币: 234
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
6
HashLinks        : _LIST_ENTRY  怎样和谐呢 
2022-5-28 16:02
0
游客
登录 | 注册 方可回帖
返回
//