2009-10-01 56 views
6

我已经为自己设置了一个新任务,它涉及到“侦察”COM对象。在COM对象上执行侦测

即使你不这样做COM,你可能熟悉的API钩子技术,在那里你可以钩住导入函数和调用前原执行自己的代码。 API挂钩有点复杂,但如果试图挂接到COM对象方法上,它会很快变得混乱(生产代码IMO太混乱)。

因此,为了做“我的工作”,我为CoCreateInstance设置了一个API钩子,并为我感兴趣的接口分派手写代理。现在,这不是很多接口,但它不是也是最好的解决方案。

有没有办法做到这一点的更合适的方法,最好不使用API​​钩子?

在另一个说明,这篇文章似乎是伟大的工作http://www.ddj.com/windows/184416546?pgno=5,但二进制文件不再工作了(我猜它是围绕Win98时间写的)。有没有人知道它的内部,并可以指向正确的方向,使其再次工作?

感谢

回答

2

我肯定会推荐使用基思·布朗的“通用委托”做低层次的拦截。 Kim Grasman提到的ComTrace工具使用它。它可以让你在一个“壳”,可以做拦截,记录等原创文章(有代码)包装的任意COM对象描述通用委托是herehere

如果你想窥探任意进程中的com对象(你没有源代码),那么你还需要使用CreateRemoteThread()或类似的方法进行代码注入。有一篇文章here可能会让你开始如果你以前没有做过。

3

我没有一个明确的答案,但我知道谁可能:)

Jonas Blunck's工具都在不同层面对拦截,他ComTrace基于基思·布朗的技术一个家伙,如果我记得正确,并且听起来与你正在做的类似,除了他分析类型库和头以动态跟踪接口。

我们一起编写了开发者游乐场(我主要做了UI),它基于API挂钩,我知道Jonas说他想重写ComTrace以使用相同的API挂钩库,因为它为截取提供了最好的“分辨率” 。

我不知道你想用这个东西,但我建议你看看Jonas的工具和射击他的电子邮件 - 他或许能督促你在正确的方向。