保存扫描Windows内核内存0xffff0800`00000000-0xffffffff`ffffffff

问题描述

我正在寻找一种快速且(崩溃)可靠的方式,以从Windows内核驱动程序扫描整个分配的系统内核内存(范围为0xffff080000000000-0xffffffffffffffff)。 我试图列出整个VAD树(如windbg中的“!vad”)并扫描相关的部分,但似乎树中并未列出所有部分。有什么办法列出整个分配的系统内存地址范围,以便我可以用下面的代码进行扫描?

inline BOOLEAN CompareByteArray(const BYTE* pData,const BYTE* bMask,const char* szMask)
{
    for (; *szMask; ++szMask,++pData,++bMask)
        if (*szMask == 'x' && *pData != *bMask)
            return 0;

    return (*szMask) == 0;
}

UINT64 FindPattern(const UINT64 dwAddress,const UINT64 dwLen,const char* szMask)
{
    for (UINT64 i = 0; i < dwLen; i++)
        if (CompareByteArray((BYTE*)(dwAddress + i),bMask,szMask))
            return (UINT64)(dwAddress + i);

    return 0;
}

编辑#1: 我必须对内存进行一次实时扫描(每次扫描少于一分钟),而且我只能在内核内存空间中搜索静态值,例如字符串/协称。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)