目标是通过访问已加载内核模块中的win32.sys把它的导出表读出来,
首先通过ZwQuerySystemInformation获得win32.sys加载基址Base = bf800000
然后用以下语句获得 win32.sys的dos头和nt头,但红色的部分会读bf80003c地址,这里会触发蓝屏.
DosHead = (PIMAGE_DOS_HEADER)Base;
NtHeads = (PIMAGE_NT_HEADERS)((ULONG)DosHead +
DosHead->e_lfanew);
我猜想win32.sys此时被交换至分页内存,于是在蓝屏之前,查看了此地址内存内容
kd> dd bf800000
bf800000 ???????? ???????? ???????? ????????
bf800010 ???????? ???????? ???????? ????????
bf800020 ???????? ???????? ???????? ????????
bf800030 ???????? ???????? ???????? ????????
bf800040 ???????? ???????? ???????? ????????
bf800050 ???????? ???????? ???????? ????????
bf800060 ???????? ???????? ???????? ????????
bf800070 ???????? ???????? ???????? ????????
kd>!pcr得到当前运行级别是passivelevel
irql 00000000
DDK上不是说 处于pasivelevel的代码都能访问分页内存,此时会触发缺页中断,中断处理后继续执行中断前的指令.
既然当前运行级别是passivelevel,也将此函数设置为#pragma alloc_text(PAGE, HookCheckAllModuleExportRoutine)
为何还会蓝屏,怎么解决这个问题呢,网上搜了半天没搜到,害的偶又睡不好觉,无奈錒,帮帮偶把
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课