-
-
未解决
[求助]内核遍历某进程内模块,结果PEB地址访问出错
-
发表于:
2021-2-6 12:16
7638
-
未解决 [求助]内核遍历某进程内模块,结果PEB地址访问出错
X64下,需要实现内核下遍历某进程内模块,获取模块的地址,代码通过EPROCESS找到PEB,再找LDR,通过LDR的三个链表来遍历。
功能是实现了,但是发现有的时候会存在不能访问PEB地址的情况,错误代码是0xC0000005,Access Violation。发生这种情况的进程也不一样,有的时候是这个进程,有的是那个进程。
网上找了很久也没找到答案,有篇文章是说是因为系统此时没有将地址翻译为物理地址导致的;也有的是说要用MDL映射内存,但是我理解的是PEB还属于内核空间地址,应该不用映射直接访问吧?初学内核很多不懂,不知道大牛们能解答一下吗,万分感谢!
代码大致如下:
1 2 3 4 5 6 7 8 9 10 11 | peb = PsGetProcessPeb(eprocess);
if (!peb)
return FALSE;
KeStackAttachProcess(eprocess, &ks);
__try
{
PPEB_LDR_DATA peb_LDR_data;
/ / irql = WPOFFx64(); / / 关闭保护的话直接蓝屏
/ / 下面这句peb有时候不可读导致错误,错误代码 0xC0000005
peb_LDR_data = (PPEB_LDR_DATA)( * (PULONG64)((ULONG64)peb + PEB_LDR_DATA_OFFSET));
|
希望有大佬指点一下,或者如何能可靠的在内核下读取任意进程内的模块地址?
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课