码迷,mamicode.com
首页 > 其他好文 > 详细

EQNEDT32.EXE 分析思路

时间:2018-11-10 15:23:18      阅读:658      评论:0      收藏:0      [点我收藏+]

标签:结构   根据   oar   port   删除   存储位置   应用   直接   serve   

 

在EQNEDT32.EXE的字符串中我们可以看到如下内容

技术分享图片

对OLE标准比较熟悉的读者可以发现,"\x01Ole10Native"是一个常见的流名,从存储位置上来看,上方的data:00454080字符串大概率也是一个流名。我们来看一下对于这两个流的处理代码。

技术分享图片

对于"\x01Ole10Native"流的Xref引用只有一处,反编译后可以看到如下代码。

技术分享图片

对流名的操作,且有一次Xref,一般来说只能是"打开(读取)"和"删除"操作。此处的代码逻辑很可能是读取流的内容,并写入到v10变量。那么a2的类型应该是IStorage*,而v10的类型应该是IStream*,在IDA中进行标注可得到以下信息。

技术分享图片

虚函数表对应的结果与猜测基本一致。

代码第35行根据v12的值来判断读入流的字节数,如果不为0则读入4个字节,否则读入0x1C(28)个字节。

注意到第30行,当流名为"\x01Ole10Native"的时候,v12的值为1,而根据[MS-OLEDS]的描述,这类流的前4个字节是后续数据的长度,此处的代码逻辑应该是根据不同的流名,解析不同的头部数据并分别处理。

这个页面上,可以发现如下表述:

MTEF data is saved as the native data format of the object. Whenever an equation object is to be written to an OLE "stream", a 28-byte header is written, followed by the MTEF data. The C struct for this header is as follows:

struct EQNOLEFILEHDR {
    WORD    cbHdr;     // length of header, sizeof(EQNOLEFILEHDR) = 28 bytes
    DWORD   version;   // hiword = 2, loword = 0
    WORD    cf;        // clipboard format ("MathType EF")
    DWORD   cbObject;  // length of MTEF data following this header in bytes
    DWORD   reserved1; // not used
    DWORD   reserved2; // not used
    DWORD   reserved3; // not used
    DWORD   reserved4; // not used
};

第35行的v13就是一个EQNOLEFILEHDR类型的变量。在IDA中应用此结构体后我们可以得到如下内容。

技术分享图片

此处的v14是刚才为公式数据所分配的内存空间,接下来直接开始分析以v14为参数的sub_42F8FF即可。

技术分享图片

根据函数参数来看,应该只看第5行和第7行的函数就可以了。第5行大概率是根据公式数据内容a1初始化一个结构体v2,然后在第7行对这个结构体v2进行解析。

第5行的函数大致功能如下所示。

技术分享图片

第7行的函数较为复杂,可以参照这个页面对各个字段进行研究。

EQNEDT32.EXE 分析思路

标签:结构   根据   oar   port   删除   存储位置   应用   直接   serve   

原文地址:https://www.cnblogs.com/mint177/p/reversing-eqnedt32.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!