【问题标题】:Hooking windows API functions to intercept dll loading (Windows only)挂钩 windows API 函数以拦截 dll 加载(仅限 Windows)
【发布时间】:2010-02-07 12:14:39
【问题描述】:

我想拦截 dll 的加载,以便我可以使用它们。我的第一个想法是挂钩 GetProcAddress。令人惊讶的是,通过挂钩它,我只能拦截在拥有我的库的进程中进行的调用。 (我打开了另一个调用 GetProcAddress 的可执行文件,这些调用没有被拦截)(我猜是因为它是针对我的 lib 动态编译的)

输出示例:

C:\Windows\syswow64\kernel32.dll Module32NextW

C:\Windows\syswow64\kernel32.dll 创建Toolhelp32Snapshot

C:\Windows\system32\DINPUT.dll DirectInputCreateW

C:\Windows\SysWOW64\ntdll.dll DirectDrawCreate

无论如何,我想知道的是我应该从哪里开始拦截 dll 加载,以便我可以使用它们的功能。

基本上,我希望能够为任何加载的 dll 调用 GetModuleInformation。

【问题讨论】:

  • stackoverflow.com/questions/873658/… 的重复以及更多类似问题。
  • 我不知道该叫你名字还是不理你。我不想知道如何挂钩函数。我想知道我应该使用哪些函数来拦截 Dll 的加载。

标签: visual-c++ hook


【解决方案1】:

首先,你在做什么需要全局挂钩?

如果您想通知 DLL 已在任何进程中加载​​,您可以查看 PsSetImageLoadNotifyRoutine,它是一个内核模式例程。 尽管它是内核模式,但使用起来并不难,编写一个基本的驱动程序很有趣。

另一种方法是在每个进程中强制加载库。有多种方法,其中一种更合法的方法是Windows Message hooks

【讨论】:

  • 你好。我现在才看到你的回答,抱歉。这旨在用于拦截游戏的加载,然后修改其工作。就像骗子一样。我看到了通过使用永久循环并查找是否在其中创建进程(按名称)来检测它的代码。我正在寻找一种更干净的方式来执行此操作,您对基本 Windows 驱动程序的建议似乎不错。谢谢!
【解决方案2】:

在 LoadLibrary 函数上安装系统范围的挂钩。 (我不知道如何在问题下面使用那个小评论)

【讨论】:

  • 问题是:如何使它成为“系统范围的”。
  • 由于写时复制功能,您在进程中设置的任何挂钩都不会被复制。要全局挂钩代码,您需要全局插入自己。
猜你喜欢
  • 2014-04-03
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多