我有一个dll文件,其中包含一些导出的函数和COM方法。

这是我的DLL信息,由DLL Export Viewer打开:但是,当我在ida pro中打开dll文件时,我只看到导出的函数,而未列出任何COM方法。

ida pro中的COM方法?

评论

我很想知道一个好的解决方案。我一直以来的“解决方案”是:在每个函数中都设置一个断点(不包括导出的函数),然后调用我要检查的方法,并等到断点被击中。 “太先进了。”

#1 楼

原始问题
由于一个非常简单的原因,这并不像人们希望的那么简单,COM对象是内部对象,并且不通过导出函数来公开其实现细节。相反,COM提供了一个接口来创建使用类UUID(通常称为CLSID)作为识别COM类的手段的特定类的COM实例。通过调用此处记录的CoCreateInstance创建COM对象。返回的对象是实现作为该COM对象的虚函数表公开的一组API,因此无需导出这些函数,并且您无法使用IDA的exports视图找到它们。都太稀缺了,与反转COM类有关的问题少得多。大多数与COM相关的问题都涉及尝试使用COM对软件进行反向工程,而OP似乎正试图对COM类进行反向工程。我猜这是因为大多数COM类在某种程度上已被记录。我将在几段中介绍COM类型库,您将看到如何在IDAPython中获取数据。
从原始站点:

版本1.10


增加了对64位DLL文件的支持。


新选项:COM类型库的显示方法和属性。



实际上是对COM提供程序进行逆向工程
尽管您的问题有点误导,但仍有一些资源可以帮助您RE COM对象提供程序。
文档
有一些资源以便在线上深入了解COM(并因此进行反向操作),例如MSDN的基本COM开发指南,Microsoft System Journal关于Come类型库首先,为了对COM对象有基本的了解并具有浏览计算机上定义的COM对象的能力,您应该尝试使用Oleview,它可以作为Windows Driver Kit或类似工具的一部分下载。它们提供(描述由该COM对象实现的实际方法),每个COM对象的类ID等。如果您可以在此处找到您的COM对象,则将在以后的工作中为您提供很大帮助。 br />使用类通知者IDA插件,您也许可以找到COM对象的RTTI信息。这将帮助您查找并部分映射COM对象的虚拟功能表(该表再次通过实际指向实现方法来描述COM对象的可用功能)。使用IDA内置的COM Helper插件也可能会有用。解析找到的任何*.tlb文件(通常位于COM DLL附近或作为其中的资源嵌入)以获取您感兴趣的信息(包括在实现函数的二进制文件中的偏移量)。为此存在pythoncom,它是win32扩展的python的一部分。文档在这里,可以在这里下载该模块

#2 楼

Dieter Spaar有一个旧的插件,该插件使用TypeLib API枚举COM方法并找到其地址。该代码有些陈旧,因此可能需要对以后的IDA版本进行一些调整。 />它是基于Matt Pietrek的这篇文章。

编辑:还有一件事。为了弄清接口方法的地址,插件必须实际创建实现接口的类(通过调用CoCreateInstance),这意味着它将执行DLL / OCX中的代码。因此,您需要注意来源不确定的文件。