【问题标题】:Is it possible to call functions from a kernel mode driver in a user mode application on Windows?是否可以在 Windows 上的用户模式应用程序中从内核模式驱动程序调用函数?
【发布时间】:2021-05-24 22:59:07
【问题描述】:

我读到here 说逆向是可能的,但是如何实现这样的事情呢?我希望有一种简单的方法,类似于从加载的 DLL 调用,但我的谷歌研究一无所获。我唯一的另一个想法是,可以通过 WriteFileDeviceIoControl 传递一些预定义的常量,驱动程序会像 switch 语句一样解析这些常量以执行相关功能;有没有更直接的方法?

【问题讨论】:

  • 没有任何简单的方法。而内核模式无法在用户空间执行代码
  • @RbMm 是我详细介绍的方法

标签: winapi driver nt-native-api


【解决方案1】:

问题是您为什么要这样做?一般来说,如果你必须依赖这样的机制,你需要重新设计你正在编写的应用程序/驱动程序。

在您的用户模式应用程序上下文中做某事的正确方法正是您所描述的。您可以对驱动程序进行 DeviceIoControl 调用,驱动程序会验证您传递的所有参数,然后代表用户模式调用执行操作。

如果出于某种原因,您需要直接调用内核,您将不得不求助于未记录的方法。有一些方法可以连接到内核调度表并覆盖其中一个调度处理程序以将调用重定向到您的函数。但我希望您永远不会向您的客户运送这样的东西。这有助于了解调度表的工作原理等,但会带来一些安全噩梦。归根结底,你的软件不应该为某人的机器被黑负责。

【讨论】:

  • 良好的响应,谢谢 -> 设备 io 控制是执行此操作的唯一方法吗?
  • Device IoCtrl 是首选方式。之后是读/写文件。您还可以在应用程序和驱动程序之间设置命名管道通信。
  • 有没有一个快速的 api 名称或参考,您可以为此提供吗?您可能刚刚回答了我之前的一个已被驳回的问题!我正在寻找 DeviceIoControl 替代方案的指南
  • 这里是用户和内核之间使用命名管道的通信。 community.osr.com/discussion/71108/…
猜你喜欢
  • 2018-05-07
  • 1970-01-01
  • 2015-04-14
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 2012-12-13
  • 2013-03-30
  • 1970-01-01
相关资源
最近更新 更多