COM组件中函数的定位

以IWebBrowser2组件为例

目的:获得Navigate和Navigate2的两个函数的地址(它们都是虚函数,即用virtual关键字修饰)

编写代码查看反汇编

code

od

可以看到最终调用了CALL EAX

往上追溯EAX,发现其最终是由[EBP-8]也就是lpWebBrowser2指针计算出IWebBrowser2组件函数的地址。

然后,我们再看看lpWebBrowser2指针中到底是什么

堆栈 SS:[0012FF60]=00159AD8 而 [00159AD8]=7E55DAE0 也就是虚函数表第一个函数地址

我们Navigate函数地址也就是[7E55DAE0]+0x2C=7E57BCB2

vftable

试验-从虚表获取函数地址

testcode

watch

为IDA编写插件

对任意指定的COM组件获取函数地址

https://github.com/howmp/COMFinder

文章作者: 半块西瓜皮
文章链接: https://guage.cool/com-vftable/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 半块西瓜皮的博客