EQNEDT32.EXE 分析思路

Posted mint177

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EQNEDT32.EXE 分析思路相关的知识,希望对你有一定的参考价值。

 

在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 分析思路的主要内容,如果未能解决你的问题,请参考以下文章

片段(Java) | 机试题+算法思路+考点+代码解析 2023

Motan在服务provider端用于处理request的线程池

恶意代码分析实战11-2

Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段

命令行下的“蒙面歌王”rundll32.exe

js代码片段