现在的位置: 首页 > 综合 > 正文

通过PEB的Ldr枚举进程内所有已加载的模块

2017年12月03日 ⁄ 综合 ⁄ 共 2606字 ⁄ 字号 评论关闭

一、几个重要的数据结构,可以通过windbg的dt命令查看其详细信息

_PEB、_PEB_LDR_DATA、_LDR_DATA_TABLE_ENTRY

 

二、技术原理

1、通过fs:[30h]获取当前进程的_PEB结构

2、通过_PEB的Ldr成员获取_PEB_LDR_DATA结构

3、通过_PEB_LDR_DATA的InMemoryOrderModuleList成员获取_LIST_ENTRY结构

4、通过_LIST_ENTRY的Flink成员获取_LDR_DATA_TABLE_ENTRY结构,注意:这里的Flink指向的是_LDR_DATA_TABLE_ENTRY结构中的InMemoryOrderLinks成员,因此需要计算真正的_LDR_DATA_TABLE_ENTRY起始地址,我们可以用CONTAINING_RECORD来计算。

5、输出_LDR_DATA_TABLE_ENTRY的BaseDllName或FullDllName成员信息。

 

三、代码实现(基于XP sp2 系统)

  

 

四、总结

枚举模块有多种方式,随着深入的学习,希望能总结越来越来的方法。在这里感谢sai 的文章:http://www.debugman.com/read.php?tid=4255,虽然他的文章还没细看,但他里面的_LDR_DATA_TABLE_ENTRY结构促发了我编写测试的想法并总结了本文。

 

抱歉!评论已关闭.