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的线程池
Android 逆向整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )(代码片段