MS办公文档中的VBA代码检测

逆向工程 恶意软件 文件格式 vba
2021-06-24 17:59:00

所以,最近我一直在研究一个涉及通过 MS Office 文档传播的恶意软件的项目,除此之外,我需要检测适当文档流中的 VBA 代码。

我已经阅读了Office VBA 文件格式结构的大部分内容,在我看来,检测压缩代码开头的正确方法是解析dir包含PROJECTMODULES RecordMODULEOFFSET Record其元素TextOffset包含实际偏移量的流到压缩后的源代码里面相应的ModuleStream. 我还发现了一个项目officeparser,它通过以下方式执行VBA代码检测,但是根据Github上的项目站点,最近几年该项目没有任何工作。

但是,我还发现了另外两个项目,它们以不同的方式处理相同的问题,并且是最新的。这些项目是oledumpoletools,它们检测流中压缩 VBA 代码开头的方式是搜索模式\x00Attribut,然后从该位置向后定位 3 个字节。我还没有找到关于这种方法的任何官方文档,所以我想知道的是,这种方法是搜索压缩代码的某种启发式方法,还是我遗漏了文档的某些部分?

2个回答

您应该注意到,文件中的代码最多以 3 种编译状态存在,压缩的源代码是最后的源代码。

VBA 引擎会更喜欢 execode 格式的代码(文件和当前 VBA 环境匹配),然后是 p 代码(文件和 VBA 环境可以更松散地匹配),然后才是压缩的源代码。

p-code 可能与压缩后的源代码不同,如果环境没有不同,源代码将被忽略。

当您打开包含 VBA 的文件时,VBE 通常会将 p 代码解码为您在 Visual Basic 编辑器中看到的源代码。

恶意行为者可以嵌入看似良性的源代码,但 p 代码是恶意的。

请参阅利用OLETools并尝试解码 p 代码pcodedmp项目

您引用的那部分代码仅用于在记录的(?)方法不起作用时手动解析格式错误的 ole。

不确定 office 是否会正确打开它或提供修复选项(M$ 对自己的规格非常自由),但您可能仍然想知道 VBA 是否存在,即使它不能“按原样”工作。

当然,没有关于“格式错误”的 ole 应该是什么样子的官方文档:)