我刚刚遇到了一个even more annoying problem。突然windows defender开始标记我的一个包含VBA宏代码的excel文件(从浏览器下载)为病毒。具体病毒被记录为:
Trojan:O97M/Foretype.A!ml
谷歌搜索会显示以下信息:
O97M.Downloader is a generic detection for Microsoft Office macros that download other threats. They are usually contained in other Microsoft Office documents and may arrive on the compromised computer through attachments or after being downloaded from a website.
太好了,所以一旦windows defender检测到它,它基本上粉碎文件,当你试图打开它,excel声称文件已“损坏”.我很想发布我的VBA文件到http://www.virustotal.com,但它包含了大量的专有VBA代码,无法与更广泛的社区共享.我想知道是否有一个网站,用不同的条款和条件完成同样的事情?
这是最近才开始的,只影响了几个用户/客户端。我不确定安装了这个的客户端的分布,以及他们运行的是什么版本的windows defender。我担心这个影响会增加,直到我们的大量客户端受到影响。更麻烦的是,通常客户端可以下载一个版本而没有问题,但是当他们从不同的源下载文件(相同的VBA代码)时,他们会遇到这个问题,下载源是否会影响文件被标记的可能性?
主要问题
是什么原因导致Excel VBA文件被标记为“O 97 M”病毒?如何防止标记?
相关问题
I sign my VBA Macro's是否会影响病毒检测的可能性?
它们是否是我可以改变的其他常见做法,这些做法会影响误报的可能性?
什么是“特洛伊木马:O 97 M/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
5条答案
按热度按时间new9mtju1#
We reached out to Microsoft,他们回复了以下消息(由于某种原因,无法在文本中复制):
所以我猜这是JSON VBA逻辑,我猜它已经解决了(我还没有看到这种情况再次发生),尽管这真的很难说。
mkh04yzy2#
开始得到同样的问题与我的xlsm文件之一,以及几天前(2018-10-29).我已经从头开始,所以我知道它不包含任何病毒的文件.
不知道Windows Defender是否会对以下情况之一作出React:
1.文件存储在我的OneDrive上
1.它包含可从Web下载的代码(json-data和图像)
我唯一没有自己做的是我正在使用的代码:https://github.com/VBA-tools/VBA-JSON/blob/master/JsonConverter.bas
我的猜测是Windows Defender对JsonConverter代码做出React,“Trojan:O97M/Foretype.A!ml”可能使用了类似的代码。
xzlaal3s3#
在过去几年中,我在其他几个具有类似情况的文件上遇到过此问题,以下方法可帮助我解决这些问题:
1.消除并联系供应商-删除有问题文件中除VBA代码以外的所有部分,然后系统地从文件中删除除该代码以外的所有代码,直到您确定了导致防病毒软件标记文件的特定代码部分。(通常这段代码非常小)您可以安全地将此逻辑上传到VirusTotal,而无需共享大部分文件IP。这将允许您识别哪个供应商错误地标记了您的文件。与他们联系,并提供您文件的“最小化”版本,要求他们将其从数据库中删除(通常需要几天时间,但他们会做到这一点)。
1.代码签名证书-我有幸与一些防病毒供应商合作,使用代码签名SSL证书对我的文件进行数字签名。我知道其他人没有这种方法,我的意见是,它会因供应商而异,一些人尊重它,另一些人则不会。
1.模糊处理-我的文件在我的网站上提供下载,因为每个用户在打开文件之前都要单击“下载”,所以我有机会在用户打开文件之前修改每个正在下载的文件。如果您不选择选项2,则有一个质量较低的选项,即您在每个下载的文件上实现了一个简单版本的模糊处理,为每个下载文件的用户生成一个“不同”的文件版本。这有点像军备竞赛,但我已经成功地使用了这种方法。最大的好处是,当你的新文件被标记时,只标记模糊文件,而不是用于模糊的原始文件,在许多情况下,他们不会在原始文件中覆盖的VBA部分上拾取,即,仅检测被标记的文件,所有其他用户不受影响。
1.**解决问题-**您总是可以解决问题,在可能的情况下,您可以使用不同的方法来存储VBA,如this sort of thing。我将我的方法大量抽象为Async Web调用,将我的业务逻辑与VBA代码隔离。长期的解决方案是通过使用VSTO并永久退出VBA环境来解决问题。认为这种方法肯定有缺点。
vsikbqxv4#
当我尝试在旧的XLSM Excel文档中编辑VBA代码时,我收到了打开时找不到的错误文件。当我继续打开时,我发现我的所有5个VBA模块都被剥离了。研究发现Bitdefender报告了Trojan.Valyrian.3644。我还发现Bitdefender剥离了同一文件的所有备份文件和版本。当我试图让文件通过电子邮件发送回我时,BD剥离了整个电子邮件,引用了同一个木马。
我得到了一个模块的记事本列表。我将5个模块中的每一个一次复制回一个新模块,发现只有一个模块导致了问题。然后我逐行恢复了那个模块,直到BD再次不满意。问题是一个单一的DIM语句,其中有几个变量用逗号分隔(DIM X,Y,Z等)。将该DIM语句分成3行解决了问题。
我不明白的是,为什么从2013年开始使用同一个Excel文件就没有出现任何问题。直到2021年1月,当我试图打开它进行编辑时,问题才出现。原来,今年另一个地方的最终用户也遇到了这个文件的问题。现在,使用这个文件的每个人都有Office 365,尽管VBA代码是用Excel 2013开发的。
zdwk9cvp5#
在搜索如何控制Windows Defender的提示时,我点击了这个页面。2 Windows Defender喜欢删除我机器上的加载项,以防止误报:特洛伊木马:O 97 M/Sadoca.C!ml最近。这些文件中的一些是一年或更早的,它们是用我的官方代码签名证书签名的。它们是.ppam和. xlam。其中一些是模糊的,其他是纯文本VBA代码。
在失去所有工作之前,我关闭了Windows Defender。Windows Defender不断添加文件隔离在随机的时间间隔,它没有列出这些行动的保护历史记录,我允许这些“威胁”。所以它似乎Windows Defender是坏了。这是一个噩梦,没有简单的补救过程。我不介意发送一个签名和混淆文件给微软。仍在寻找联系人。可能以下是这样的信息:https://learn.microsoft.com/en-us/microsoft-365/security/defender/m365d-autoir-report-false-positives-negatives?view=o365-worldwide.明天再查。
这并不好笑,这些加载项整天都在公司的许多机器上运行。如果Windows Defender开始隔离这些加载项,将是一个灾难/停止整个生产线。-我在出汗!-必须有一个更好的过程来纠正误报;无论是你自己的工作,还是Windows Defender开始删除微软自己签署的Windows系统文件,正如一些人在其他网站上报告的那样。我们是依靠IT来运行恶意软件或安全软件使我们破产的风险的方式。