跟踪调试COM组件的接口_第1页
跟踪调试COM组件的接口_第2页
跟踪调试COM组件的接口_第3页
跟踪调试COM组件的接口_第4页
跟踪调试COM组件的接口_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、跟踪调试COM组件的接口-Edit by hklzt刚一开始,对于COM组件的接口,真的不知如何下手,就更谈不上调试IE里的某个ActiveX控件了。在Snake的熏陶下,我经过一翻努力,终于找到了一种方法可以跟踪调试COM组件的接口。为了跟踪调试COM组件的接口,这里需要先了解一些基本知识。Idispatch接口如下:interface IDispatch : IUnknownvirtual HRESULT GetTypeInfoCount(UINT* pctinfo) = 0;virtual HRESULT GetTypeInfo(UINT itinfo, LCID lcid, IType

2、Info* pptinfo) = 0;virtual HRESULT GetIDsOfNames (REFIID riid, LPOLESTR* rgszNames, UINT cNames, LCID lcid, DISPID* rgdispid) = 0;virtual HRESULT Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARMS* pdispparams, VARIANT* pvarResult, EXCEPINFO* pexcepinfo, UINT* puArgErr ) = 0;

3、1、 GetTypeInfoCount():用于获取自动化组件支持的ITypeInfo接口的数目。2、 GetTypeInfo():用于获取指针ITypeInfo接口的指针,通过该指针将能够判断自动化服务程序所提供的自动化支持。3、 GetIDsOfNames():读取一个函数的名称并返回其调度ID(DISPID)。DISPID* rgdisped:是一个long类型的数据,对于IDispatch的一个特定实现,此DISPID值应该是唯一的。REFIID riid:为保留参数,必须设置为IID_NULL,在rgszNames中指定了成员的函数名及其参数,由cNames标识了名字的个数,lcid

4、参数用于指定本地化标识,得到的DISPID 将保存到rgdispid中。4、 Invoke():提供了访问自动化对象暴露出来的方法和属性的方法。将DISPID作为函数指针数组的索引传入dispidMember参数,Invoke()将实现一组按此索引来访问的函数。riid和lcid的含义与在GetIDsOfNames()中的定义相同,分别为保留参数和本地化标识。WORD wFlags:指定了要访问的是接口的属性还是方法DISPPARMS* pdispparams:包括了方法和属性调用的参数数组、DISPID数组以及数组中参数个数等信息。VARIANT* pvarResult:保存返回值信息。EX

5、CEPINFO* pexcepinfo:指向一个有效的异常信息结构UINT * PuArgErr:包含了第一个产生错误的参数指针。综合以上,可以了解到:通过GetIDsOfNames()和Invoke()的结合使用,将可以根据函数名称对方法和属性进行调用。这样,函数地址、AddRef()、Release()以及接口指针等细节问题将无需考虑。基于以上的分析,对于COM里面某个函数的定位思路是:由于在调用COM里面某个函数时,会去分发,然后再调用COM里面的函数,那么,我们就在它分发的时候先把它拦截下来,之后再单步跟入某个函数。好。那么就在它分发的时候拦截下来!但是,它是在哪分发呢?呵呵,在这里不

6、用你去找啦,我已经找出来了,关键函数:DispCallFunc,位于OLEAUT32.dll。如下图:至于为什么不是在COM库:OLE32.dll里面,已经很明显了。分发的地方现在是已经拦截下来了,但是,COM里面的某个函数还没定位出来呀?跟下来吧。在DispCallFunc函数一直“步过”,直到见到Call near ecx时,我们就来到了进入COM里面某个函数的边缘了!那还等什么?就差一步“步进”,就来到了COM里面的某个函数的入口点了。简单不?下面来一个实例。使用工具:COMRaider,OD目标:vuln.dll(COMRaider里面的一个测试DLL)开始:1、 先确认vuln.dl

7、l已经被注册过了,如果没有,则需要注册:regsvr32 X:idefensecomraidervuln.dll2、 运行COMRaider,单击“Start”,如图1:图13、 单击“Next”,选择vuln.dll文件,来到如图2:图24、随便选择一个成员函数,这里选择 Method3,在其上面右击,选择“Fuzz member”,如图3图35、单击“Next” 图46、随便选择一个文件名,在其上面右击,选择“Launch in Olly”,此时,会调用Olly来加载它,加载完毕后,断点在入口点了。7、在OD里,选择菜单“查看”-“可执行模块”,或者按Alt+E,如图5: 图58、双击OLEAUT32,然后按CTRL+N,在里面找到DispCallFunc函数,选择它,按F2为其设断点。如图6、7图6 在此按CTRL+N图7 选择DispCallFunc,按F2设断至此,准备工作已经完毕。下面进行关键步骤。9、按F9,让它运行起来,稍等一会,OD马上就把DispCallFunc给拦截下来了。 图810、一直按F8,单步步过进行跟踪,直到见到Ca

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论