Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在没有驱动程序的情况下从用户模式读取内核内存_C_Windows_Kernel_Driver - Fatal编程技术网

C 在没有驱动程序的情况下从用户模式读取内核内存

C 在没有驱动程序的情况下从用户模式读取内核内存,c,windows,kernel,driver,C,Windows,Kernel,Driver,我正在编写一个程序,该程序枚举由SetWindowsHookEx()创建的钩子 使用GetProcAddress() 在gSharedInfo+8读取用户模式内存,结果应该是第一个句柄条目的指针。(工程,核实) 在[gSharedInfo]+8处读取用户模式内存,结果应该是要枚举的句柄的计数。(工程,核实) 从步骤2中获得的地址读取数据,重复count次 检查HANDLEENTRY.b type是否为5(这意味着它是一个HHOOK)。如果是,请打印信息 问题是,尽管步骤1-3只会搞乱用户模式内存

我正在编写一个程序,该程序枚举由
SetWindowsHookEx()
创建的钩子

  • 使用
    GetProcAddress()
  • gSharedInfo+8
    读取用户模式内存,结果应该是第一个句柄条目的指针。(工程,核实)
  • [gSharedInfo]+8处读取用户模式内存,结果应该是要枚举的句柄的
    计数。(工程,核实)
  • 从步骤2中获得的地址读取数据,重复
    count
  • 检查
    HANDLEENTRY.b type
    是否为5(这意味着它是一个HHOOK)。如果是,请打印信息
  • 问题是,尽管步骤1-3只会搞乱用户模式内存,但步骤4需要程序读取内核内存。经过一些研究,我发现
    ZwSystemDebugControl
    可以用于从用户模式访问内核内存。因此,我编写了以下函数:

    BOOL GetKernelMemory(PVOID pKernelAddr, PBYTE pBuffer, ULONG uLength)
    {
        MEMORY_CHUNKS mc;
        ULONG uReaded = 0;
        mc.Address = (UINT)pKernelAddr;  //Kernel Memory Address - input
        mc.pData = (UINT)pBuffer;//User Mode Memory Address  - output
        mc.Length = (UINT)uLength;       //length  
        ULONG st = -1;
        ZWSYSTEMDEBUGCONTROL ZwSystemDebugControl = (ZWSYSTEMDEBUGCONTROL)GetProcAddress(
        GetModuleHandleA("ntdll.dll"), "NtSystemDebugControl");
        st = ZwSystemDebugControl(SysDbgCopyMemoryChunks_0, &mc, sizeof(MEMORY_CHUNKS), 0, 0, &uReaded);
        return st == 0;
    }
    
    但是上面的功能不起作用
    uReaded
    始终为0,
    st
    始终为0xC0000002。如何解决此错误

    我的全部计划:

    MSFT在windows XP之后未实施
    NtSystemDebugControl
    syscall。

    该漏洞使得在大多数Intel CPU上以大约500kB/s的速度从用户模式读取内核内存成为可能。这适用于大多数未打补丁的操作系统。

    您的程序是否具有SeDebugPrivilege权限?读取内核内存是防病毒程序想要阻止的事情。你确定这不是问题吗?是的,我有调试权限。我试图关闭杀毒软件,但没有帮助@User34660在Vista及更高版本上,无法从用户模式打开\Device\PhysicalMemory部分。我认为没有办法从应用程序左侧读取物理/内核内存。