以IWebBrowser2组件为例

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

编写代码查看反汇编

可以看到最终调用了CALL EAX

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

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

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

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

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

为IDA编写插件

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

https://github.com/howmp/COMFinder