【问题标题】:Unhooking API Hook using APIHijack使用 APIHijack 解开 API Hook
【发布时间】:2013-12-04 15:06:08
【问题描述】:

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

目前,我正在努力解决关于移除挂钩的两个问题,并希望得到一些指导。

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

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

我试图枚举所有进程并找出哪些进程包含 DLL(几乎是挂钩技术的逆向过程),但它似乎从来没有找到像挂钩时那么多的注入点,因此挂钩的应用程序崩溃.

非常感谢。

【问题讨论】:

  • 你对我的“应用程序”注入另一个进程的代码是什么意思?

标签: c++ api-hook


【解决方案1】:

应用程序有two major ways 终止:

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不,在每种情况下,您都不会在 DllMain 中获得 THREAD_DETACH。有时应用程序会立即终止,特别是当它们使用TerminateProcess() 结束时。
    猜你喜欢
    • 1970-01-01
    • 2021-03-11
    • 2015-03-22
    • 2020-02-14
    • 2021-12-18
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2022-09-28
    相关资源
    最近更新 更多