可以使用相同的 dll 多次注入目标应用程序。
这会导致同一个函数被钩住多次。
你知道是否有办法检测目标应用程序是否已经注入?或者有没有办法避免多次注射?
在继续注入之前,您可以检查 DLL 是否已加载到目标应用程序中:
在 .NET 中,您可以使用Process.Modules属性来迭代进程中加载的 DLL。
对于本机 C/C++,您可以使用 Windows 进程状态 API 方法EnumProcessModules来实现相同的结果。可以在此处找到为流程迭代模块的示例。
或者,您可以在注入的 DLL 中使用命名系统互斥锁,以确保不会多次应用挂钩创建逻辑。请参阅.NET的Mutex 类或本机的CreateMutex。这将是更复杂的方法,并且需要您在移除挂钩时清理互斥锁。