需要一个内核模式API,它将找到用户模式Win32 Dll的基地址

时间:2011-11-24 04:16:17

标签: c windows-xp driver device

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

提前致谢

维克多

p.s此帖子已经过编辑,更加清晰。希望它能让我更清楚地了解我想要实现的目标。

3 个答案:

答案 0 :(得分:3)

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

如果进程正在加载DLL,该怎么办?如果您正在执行线程内(即来自系统调用或设备IOCTL),那么如果其他线程也在执行呢?当你不是操作系统时这样做是一个非常难以正确做的事情,并且非常容易破坏客户机器的稳定性(即使你是,它也很难做到 OS)

答案 1 :(得分:1)

看看LdrGetProcedureAddress以及其他人。

编辑:

MmGetSystemRoutineAddress也可能会有所帮助。

答案 2 :(得分:1)

只是想感谢大家的贡献。我确实设法进行了一些进一步的研究,发现有一个名为PsLoadImageNotifyCallback的内核模式API能够找到任何进程的基地址。