首页
论坛
专栏
课程

[原创]PEB结构----枚举用户模块列表

2019-6-16 22:11 1188

[原创]PEB结构----枚举用户模块列表

2019-6-16 22:11
1188
 参考文章:
1. https://bbs.pediy.com/thread-52398.htm
2. https://blog.csdn.net/zhou191954/article/details/38677759

本文在主主要以上述两篇文章为基础,简化了上文中的数据结构的定义,可不使用WinDbg的dt指令去查看数据结构的详细信息。
数据结构:
_PEB、_PEB_LDR_DATA、_LDR_DATA_TABLE_ENTRY

1.代码实现
#include<Windows.h>
#include<iostream>
#include<winternl.h>

int main()
{
	PPEB pPEB;
	PLIST_ENTRY pListEntryStart = NULL,pListEntryEnd = NULL;
	PPEB_LDR_DATA pPebLdrData = NULL;
	PLDR_DATA_TABLE_ENTRY pLdrDataEntry = NULL;
	std::locale loc("chs");
	std::wcout.imbue(loc);

#ifdef _WIN64
	pPEB = (PPEB)__readgsqword(0x60);
#else
	pPEB = (PPEB)__readfsdword(0x30);
#endif
	pPebLdrData = pPEB->Ldr;
	pListEntryStart = pListEntryEnd = pPebLdrData->InMemoryOrderModuleList.Flink;

	do
	{
		pLdrDataEntry = (PLDR_DATA_TABLE_ENTRY)CONTAINING_RECORD(pListEntryStart, LDR_DATA_TABLE_ENTRY, InMemoryOrderLinks);
		if (pLdrDataEntry->DllBase != 0)
		{
			std::cout << "Module Base: 0x" << pLdrDataEntry->DllBase << "  ";
			std::wcout << pLdrDataEntry->FullDllName.Buffer << std::endl;
		}
		pListEntryStart = pListEntryStart->Flink;
	} while (pListEntryStart!=pListEntryEnd);

	system("pause");
	return 0;
}




[公告]安全服务和外包项目请将项目需求发到看雪企服平台:https://qifu.kanxue.com

最后于 2019-7-12 17:08 被VirtualCC编辑 ,原因:
最新回复 (1)
黑洛 1 2019-6-17 18:16
2
0
我宁愿使用Undoc的NtQuerySystemInfomation,
游客
登录 | 注册 方可回帖
返回