检测是否已从注入的 dll 调用函数

Detect if a function has been called from an injected dll

本文关键字:dll 调用 函数 注入 是否 检测      更新时间:2023-10-16

目前,我正在努力找出我的可执行文件中的函数(Foo())是否已从注入的dll调用。

我的第一个想法是调用GetModule(NULL)然后用GetModule("InjectedDllName")给出的地址检查结果,所有这些都是在 Foo() 中完成的。

显然GetModule(NULL)将返回可执行文件的地址,而不是当前调用模块的地址。我的问题还有其他解决方案吗?

我的另一个想法是在调用 foo() 时找到线程开始地址,并检查它是否在注入的 dll 地址空间内,如果可能的话,不知道。

您可以使用 EnumProcessModulesEx 获取加载的 DLL 的句柄,然后使用 GetModuleFileNameEx 来识别文件名,或检查是否有任何重复的导出函数名称,这可能暗示了劫持/包装器。

但是,这可能不会阻止用户重命名 DLL 并将其包装或其他高级调试工具操作的情况。处理每个案例可能会变得非常混乱,而且技术性太强,无法用几行来解释。