我想编写一个程序来监视驱动程序中的内存并经常打印内存内容。
但是,我在Windows API中找不到任何似乎允许我抓取指针(Handle)到特定驱动程序的资源。
我很感激来自用户空间或内核空间的任何答案。
如果您想知道完全我正在做什么,我尝试复制this纸张的结果,除非在Windows上。在我获得监视基本Windows控制台程序中的缓冲区的能力之后,我打算从GPU进行监视。
[记录:我是一名研究生,正在将其作为一个夏季项目......这是道德恶意软件研究。]
============更新==================
这在技术上可能更适合作为答案,但直到我有一个可行的解决方案才真正适合。
我最初的攻击计划是使用WinDbg在加载时对键盘驱动程序进行动态分析,这样我就可以了解正常的加载/卸载行为。我正在使用this book的第10章来指导设置我的测试平台,一旦我对键盘结构及其缓冲区有了更多的了解,我将向后工作以获得对此结构的永久引用看看有关将其传递到显卡并使用DMA进行监控,就像原始论文在Linux上所做的那样。
答案 0 :(得分:3)
您不会通过“抓取指向特定驱动程序的指针”来解决此问题。您需要找到位于USB驱动程序顶部的键盘驱动程序使用的特定缓冲区。
您必须实际操作Windows的键盘和USB驱动程序。如果你有一个DDK(驱动程序开发工具包)[又名WDK,Windows驱动程序工具包],至少部分可能是可用的。对于这部分项目,您肯定需要一个图形驱动程序。
您还必须开发一种驱动程序机制,将任意(内核)内存块映射到图形驱动程序 - 这意味着您需要访问图形驱动程序的源代码。 (理论上,你可能在页面表中破解,但Windows本身并不太热衷于软件弄乱页面表,如果系统是SMP,你肯定需要非常小心,因为修改SMP系统中的页表要求在更新后刷新系统中“其他”CPU(核心)的TLB。
对我而言,这似乎是一个相当有趣的项目,但在像Windows这样的封闭源系统中却非常艰难。至少在Linux中,开发人员有源代码可供阅读。说到Windows,大多数相关的源代码都是完全不可用的(除非你的学校拥有MS源代码的特殊许可 - 我认为有些代码可以使用)。