7

我刚刚遇到了一个更烦人的问题。突然,Windows Defender 开始将我的一个包含 VBA 宏代码(从浏览器下载)的 excel 文件标记为病毒。被记录的特定病毒是:

木马:O97M/Foretype.A!ml

谷歌搜索它会显示以下信息:

O97M.Downloader 是对下载其他威胁的 Microsoft Office 宏的通用检测。它们通常包含在其他 Microsoft Office 文档中,并且可能通过附件或从网站下载后到达受感染的计算机。

太好了,所以一旦 Windows Defender 检测到它,它基本上会粉碎文件,当您尝试打开它时,excel 会声称文件“已损坏”。我很想将我的 VBA 文件发布到http://www.virustotal.com,但是它包含大量无法与更广泛的社区共享的专有 VBA 代码。我想知道是否有一个网站可以用不同的条款和条件完成同样的事情?

这只是最近才开始,只影响了少数用户/客户。我不确定安装了这个的客户端的分布以及他们运行的是什么版本的 Windows Defender。我担心这种影响会增加,直到我们的大量客户受到影响。更麻烦的是,通常客户可以毫无问题地下载一个版本,但是当他们从不同的来源下载文件(相同的 VBA 代码)时遇到问题,下载源会影响文件被标记的可能性吗?

主要问题

是什么导致 excel VBA 文件被标记为“O97M”病毒,如何防止它被标记?

相关问题

我应该签署我的 VBA 宏,这会影响病毒检测的可能性吗?

它们是我可以改变的其他常见做法,会影响误报的可能性吗?

究竟什么是“Trojan:O97M/Foretype.A!ml”?窗口页面包含的信息太少,它可能不存在,赛门铁克也非常无助,(也许我在这里非常不了解)是否有用于病毒检测的集中存储库?我想人们可能不想分享它,而且我的产品因产品而异,但我会对与此相关的任何信息感兴趣......

外部库

我还使用以下外部代码:

https://gist.github.com/brucemcpherson/3414365/

https://www.thespreadsheetguru.com/the-code-vault/2014/4/23/loop-through-all-excel-files-in-a-given-folder

如何在不关闭调用工作簿的情况下使用 VBA SaveAs?

我还使用以下窗口函数:

Public Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr
Public Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Public Declare PtrSafe Function GetWindowRect Lib "user32" (ByVal hWnd As LongPtr, lpRect As RECT) As LongPtr
Public Declare PtrSafe Function SetWindowPos Lib "user32" (ByVal hWnd As LongPtr, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongPtr
Public Declare PtrSafe Function SetParent Lib "user32.dll" (ByVal hWndChild As LongPtr, ByVal hWndNewParent As LongPtr) As LongPtr
Public Declare PtrSafe Function SetForegroundWindow Lib "user32" (ByVal hWnd As LongPtr) As LongPtr
Public Declare PtrSafe Function GetDeviceCaps Lib "gdi32.dll" (ByVal hdc As LongPtr, ByVal nIndex As LongPtr) As LongPtr
Public Declare PtrSafe Function GetDC Lib "user32.dll" (ByVal hWnd As LongPtr) As LongPtr
Public Declare PtrSafe Function ReleaseDC Lib "user32.dll" (ByVal hWnd As LongPtr, ByVal hdc As LongPtr) As LongPtr
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Public Declare PtrSafe Function SetLastError Lib "kernel32.dll" (ByVal dwErrCode As Long) As Long
Public Declare PtrSafe Function GetActiveWindow Lib "user32.dll" () As Long
Public Declare PtrSafe Function DrawMenuBar Lib "user32" (ByVal hWnd As LongPtr) As Long
4

4 回答 4

3

我们联系了 Microsoft,他们回复了以下消息(由于某种原因无法在文本中复制):

在此处输入图像描述

所以我猜这是 JSON VBA 逻辑,我猜它已经解决了(我还没有看到这种情况再次发生),虽然这真的很难说。

于 2018-11-12T18:26:10.297 回答
1

几天前(2018-10-29)我的一个 xlsm 文件也开始遇到同样的问题。我从头开始制作文件,所以我知道它不包含任何病毒。

不知道 Windows Defender 是否会对以下其中一项做出反应:

  1. 文件存储在我的 OneDrive 上
  2. 它包含从 Web 下载的代码(json-data 和图像)

我自己没有做的唯一事情是我正在使用的这段代码:https ://github.com/VBA-tools/VBA-JSON/blob/master/JsonConverter.bas

我的猜测是 Windows Defender 对 JsonConverter 代码做出反应,“Trojan:O97M/Foretype.A!ml”可能使用了类似的代码。

于 2018-11-11T08:11:06.407 回答
0

在过去的几年里,我在其他几个具有类似条件的文件上遇到了这个问题,以下方法可以帮助我解决这些问题:

  1. 消除并联系供应商- 删除除 VBA 代码之外的违规文件的所有部分,然后系统地消除文件中除代码之外的所有代码,直到您确定导致防病毒软件标记您的文件的特定代码部分. (通常这部分代码非常小)您可以安全地将此逻辑上传到VirusTotal,而无需共享大部分文件 IP。然后,这将允许您确定哪个供应商错误地标记了您的文件。使用文件的“最小化”版本与他们联系,要求他们从那里的数据库中删除它(通常需要几天,但他们会这样做)。

  2. 代码签名证书- 我通过使用代码签名 SSL 证书对我的文件进行数字签名而与一些反病毒供应商合作。我知道其他人对这种方法没有任何运气,我认为它会因供应商而异,有些人尊重它,有些人则不会。

  3. 混淆- 我的文件在我的网站上作为下载提供,因为每个用户在打开文件之前都单击“下载”,所以我有机会在用户打开文件之前修改每个正在下载的文件。如果您不选择选项 2,则有一个质量较低的选项,也就是说,您在每个下载的文件之上实现了一个简单版本的混淆,为每个下载它的用户生成文件的“不同”版本. 这有点像军备竞赛,但我用这种方法取得了成功。最大的优点是,当你的新文件被标记时,只标记被混淆的文件,而不是用于混淆的原始文件,在许多情况下,他们不会选择原始文件中覆盖的 VBA 部分,即只有将检测到被标记的文件,

  4. 解决问题 -您总是可以解决问题,在可能的情况下您可以使用不同的方法来存储您的 VBA,例如这种事情。我将我的方法大量抽象为异步 Web 调用,将我的业务逻辑与 VBA 代码隔离开来。长期解决方案是通过使用VSTO并永久退出 VBA 环境来解决此问题,认为这种方法肯定有缺点。

于 2020-03-23T18:28:56.810 回答
0

尝试在旧的 XLSM excel 文档中编辑 VBA 代码时,我收到打开时未找到的错误文件。当我继续打开时,我发现我的所有 5 个 VBA 模块都被剥离了。研究发现 Bitdefender 报告了 Trojan.Valyrian.3644。我还发现 Bitdefender 已经剥离了同一文件的所有备份文件和版本。当我试图将文件通过电子邮件发回给我时,BD 删除了整个电子邮件,并引用了相同的木马。

我能够获得模块的记事本列表。我一次将 5 个模块中的每一个复制回一个新模块,发现只有 1 个模块引起了问题。然后我逐行恢复该模块,直到 BD 再次不高兴。问题是一个单一的 DIM 语句,其中有几个用逗号分隔的变量(DIM X、Y、Z 等)。将该 DIM 语句拆分为 3 行解决了该问题。

我不明白为什么自 2013 年以来使用相同的 Excel 文件没有任何问题。这个问题直到 2021 年 1 月我试图打开它进行编辑时才出现。事实证明,另一个位置的最终用户今年也遇到了该文件的问题。尽管 VBA 代码是使用 excel 2013 开发的,但现在使用该文件的每个人都拥有 Office 365。

于 2021-02-16T15:06:24.687 回答