c - 需要一个内核模式 API 来找到用户模式 ​​Win32 Dll 的基地址

标签 c windows-xp driver device

我是设备驱动程序编程的新手。我遵循了网上可用的教程,这些教程提供了有用的入门信息。但是现在我开始了一个新项目,其唯一目标是搜索被恶意软件或键盘记录程序 Hook 的功能。所以我想我已经整理出了完成此任务所需的内容,尽管我仍然需要能够找到已经加载到内存中的系统 dll(即 kernel32.dll、user32.dll 等)的加载地址。我需要加载地址,以便我可以解析他们的 PE 以到达导出和导入部分。此外,将加载地址添加到文件大小会给我一个地址范围来交叉引用导出函数的地址,不是吗?交叉引用 IMPORT 地址会涉及更多一些,但可以根据我的估计完成。我认为构建内核模式驱动程序是正确的方法,因为与用户模式应用程序相比,访问内核驱动程序地址范围之外的内存对于驱动程序来说不是问题。我还能如何访问位于目标 dll 的 EAT 和 IAT 中的地址?我知道存在一个可以提供加载地址的用户模式 ​​API,主要是 GetModuleHandle,但我想在内核模式下找到等效项。我可以编写一个用户模式应用程序,将此信息转发给驱动程序,但如果可能的话,我更希望这一切都在内核模式下完成。欢迎提出任何建议或意见。

提前致谢

维克多

p.s 为了更清晰起见,这篇文章已经过编辑。希望它能让我更清楚地了解我要完成的工作。

最佳答案

在内核模式下这可能不是一个好主意。你打算什么时候真正做到这一点并保证流程处于可以通过 IAT 的状态?

如果进程正在加载 DLL 怎么办?如果您在线程内执行(即从系统调用或设备 IOCTL),如果其他线程也在执行怎么办?在您不是操作系统的情况下执行此操作是一个很难正确执行的提议,而且非常很容易破坏客户机器的稳定性(见鬼,即使您是,也很难做到操作系统)

关于c - 需要一个内核模式 API 来找到用户模式 ​​Win32 Dll 的基地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8252162/

相关文章:

Silverlight 隔离存储 PathTooLongException

java - 为什么之前运行的代码中会出现错误 "Uninitialized constant DriverManager"?

c - 用C制作一个shell

silverlight - 需要旧版本的 silverlight

php - 国际扩展 : installing php_intl. dll

linux - 我应该将 Linux 驱动程序移植到 Mac OS X 还是应该重写它

linux - 在 Linux 内核模块中自定义 .mod.c MODULE_ALIAS

c - 显示如何支付找零的程序

c - 使用 SQLite 和 Fast Math 时出现 GCC 错误 : "SQLite will not work correctly with the -ffast-math option of GCC"

c - kbhit() 和 getch() 和系统 ("cls"的可移植替代方案)