使用API​​Hijack取消激活API Hook

时间:2013-12-04 15:06:09

标签: c++ api-hook

我已经构建了一个通过APIHiJack挂钩到Win32 TextOut函数的应用程序。启动应用程序时,将按预期注入DLL,并成功调用新的TextOut函数。

目前,我正在努力解决这个问题,并且需要一些指导。

1)如果某些应用程序已关闭,它们不会向DLL发送FreeLibrary(?)调用以取消挂起和清除。这是正常的,如果是这样,通常如何处理?

2)更重要的是,如果我的应用程序因任何原因崩溃,应用程序仍然会出现钩子和崩溃,因为我的新TextOut函数不再存在。

我试图枚举所有进程并找到哪些进程包含DLL(几乎是挂钩技术的反向过程)但是它似乎永远不会找到与挂钩时一样多的注入点,因此钩住的应用程序崩溃

非常感谢提前。

2 个答案:

答案 0 :(得分:0)

应用程序two major ways终止:

  • ExitProcess():当他们使用ExitProcess()时,会调用FreeLibrary()(以及THREAD_DETACH中的DLLMAIN

  • TerminateProcess():但是当应用程序使用TerminateProcess()时,它会立即终止而不进行任何清理。

我的解决方案是挂钩TerminateProcess()进行我需要的清理 - 特别刷新我的日志文件的缓冲区并关闭它们。

但是: TerminateProcess()我的终止表示严重错误,应用程序可能不稳定。

答案 1 :(得分:-1)

1)不,但你会在DllMain中获得THREAD_DETACH。

2)如果您的钩子代码验证您的服务器是否正在运行,如果不是,它应该执行钩子函数的默认行为。如果您的处理程序崩溃,它将使主机应用程序崩溃。如果您的服务器应用程序崩溃,您可以避免主机应用程序崩溃,以验证服务器是否正在运行。您可以使用事件或Pid验证它。