【问题标题】:Spying on COM Objects监视 COM 对象
【发布时间】:2022-04-08 22:25:33
【问题描述】:

我为自己设定了一项新任务,其中涉及“监视” COM 对象。

即使您不使用 COM,您也可能熟悉 API 挂钩技术,您可以在其中挂钩到导入的函数并在调用原始代码之前执行您自己的代码。 API 挂钩有些复杂,但如果您尝试挂钩 COM 对象方法,它很快就会变得混乱(对于生产代码 IMO 来说太混乱了)。

所以,目前,为了完成“我的工作”,我为 CoCreateInstance 设置了一个 API 挂钩,并为我感兴趣的接口发送了手写代理。现在接口不多,但不是最好的解决方案。

有没有办法以更简洁的方式做到这一点,最好不使用 API 挂钩?

另一方面,这篇文章似乎很棒http://www.ddj.com/windows/184416546?pgno=5,但二进制文件不再工作了(我猜它是在 Win98 时代写的)。有谁知道它的内部原理并能指出正确的方向让它再次工作?

谢谢

【问题讨论】:

    标签: windows com hook


    【解决方案1】:

    我绝对推荐使用 Keith Brown 的“Universal Delegator”来进行低级拦截。 Kim Grasman 提到的 ComTrace 工具使用它。它允许您将任意 com 对象包装在可以执行拦截、日志记录等操作的“shell”中。描述通用委托器的原始文章(带有代码)是 herehere

    如果您想监视任意进程中的 com 对象(您没有源代码),那么您还需要使用 CreateRemoteThread() 或类似方法进行代码注入。有一篇文章here 可能会帮助您入门,如果您以前没有这样做过。

    【讨论】:

      【解决方案2】:

      我没有明确的答案,但我认识一个人可能:)

      Jonas Blunck's 工具都是关于不同级别的拦截,如果我没记错的话,他的 ComTrace 是基于 Keith Brown 的技术,并且听起来与您正在做的类似,除了他解析类型库和标头以跟踪动态接口。

      我们一起编写了 Developer Playground(我主要编写 UI),它基于 API 挂钩,我知道 Jonas 说他想重新设计 ComTrace 以使用相同的 API 挂钩库,因为它为拦截提供了最佳“解决方案”。

      我不知道你想用这个做什么,但我建议你查看 Jonas 的工具并给他发一封电子邮件 - 他可能会在正确的方向上刺激你。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-07-16
        • 2013-04-01
        • 2015-01-04
        • 2010-11-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-25
        相关资源
        最近更新 更多