无意中造成了病毒?

我经常看到这种情况:我用Delphi编写了一个应用程序,当我编译它时,病毒扫描程序告诉我我已经创build了一个病毒,然后立即再次删除可执行文件。 这是讨厌的,但合理的,很容易通过做一个完整的重build,删除* .dcu文件,有时候通过简单的等待来修复。

据我所知,Delphi 6,7,2005和2007发生了这种情况。 赛门铁克,卡巴斯基,迈克菲和NOD32都报告了这些误报。 我知道这是因为Delphi为它的DCU文件添加了时间戳,这些时间戳最终在最终的可执行文件中,显然是一些随机病毒签名的一部分。

我不想禁用病毒扫描程序,即使是单个文件夹或文件。 我并不是真的想要解决scheme,但是我想知道以下几点:

  • 其他编译器也会出现这些误报吗?
  • 这是否也发生在.NET可执行文件?
  • 其他人也注意到与Delphi类似的问题?

其他编译器也会出现这些误报吗?

是的,这是AutoIt过去的一个常见问题,正如本文所论述的“我的AutoIt EXE真的感染了吗? 。 在大多数情况下,包括AutoIt,都是因为糟糕的启发式做法。 由于AutoIt使用自由开放的UPX压缩器,因此经常被误认为也使用UPX的恶意代码。

你可以做的最好的(也可能是唯一的)事情是报告这些错误,所以他们可以改进他们的启发式,或者至less白名单你的应用程序。

以下是一些stream行的反病毒公司的联系信息列表。 他们都声称赞赏意见,因为它可以帮助他们使自己的产品更好。

  • AntiVir – 联系人
  • A2(A平方) – 联系人 (电子邮件地址)
  • AVAST! – 联系
  • AVG – 联系人
  • BitDefender – 联系人
  • BullGuard – 联系
  • CA反病毒 – 联系
  • ClamAV – 联系人
  • ClamWin – 联系
  • Comodo – 联系
  • ESET的Nod32 – 联系人
  • eSafe – 联系 (需要login)
  • Fortinet – 联系人
  • F-PROT – 联系
  • F-Secure – 联系人
  • G-Data – 联系人
  • 卡巴斯基 – 联系人
  • McAfee – 联系人 (电子邮件地址)
  • 诺曼 – 联系 (电子邮件地址)
  • pandas反病毒 – 联系
  • Sophos – 联系
  • 赛门铁克(诺顿) – 联系
  • Vipre – 联系
  • Windows Live OneCare – 联系人
  • ZoneLabs – 联系人

事实certificate,在维基百科有一个伟大的AV软件清单,名为“杀毒软件列表” 。 它比我上面的清单更完整。

Autoit论坛的一名成员做了一个很棒的脚本,通过电子邮件向大量的AV供应商发送了一个误报,让这个过程自动化一下。

听起来更像是一个启发式的搞砸了我。 你是否启用了启发式扫描(一些扫描程序可能将其称为“类似病毒的代码”)? 时间戳记等于“某种病毒签名的一部分”的可能性似乎太小而无法一直发生。

当我运行病毒扫描程序时,我从来没有看到D6或D7的这个问题。

在野外确实有Delphi病毒,请参阅http://www.sophos.com/blogs/sophoslabs/?p=6117

是的,我们的团队在两三年内与Sophos在企业环境中共同经历了这样的事情。 所以很less,但确实发生了。

我们的IT克莱汀开始要求我检查我们的应用程序中的所有150万行代码,以“让它消失”,但他并没有太过于追求这一行。

公平起见,他最初担心的是,我们的客户也可能会收到这样的警告,但是我们只有在开发人员的电脑上从IDE构build一个exe文件时才会触发这个警告,从来没有在一个testing框上释放build exe或者别处。

就个人而言,这种情况很less发生,我们不担心。

当使用非标准编译器或做低级别的东西时,这并不罕见:我记得在涉足操作系统开发时创build了误报:AntiVir不喜欢我的一些平面二进制文件。

最近,在tinyCC邮件列表中 ,有一个关于这个问题的post提到了AVG。

我已经发生了与我部署的代码。 扫描仪的下一次更新解决了这个问题。 一些cretin使用相同的编译器编写了一个病毒,签名是运行时库的一部分,实际上并不在恶意代码中。

我从来没有见过这个,用Visual Studio做了很多C ++和.NET开发(从1.5到2010)。

我只看到这个与汇编器发生。 例如, MASM32实际上警告人们可能会触发病毒扫描程序,因为EXE非常小(和/或一些病毒是用汇编语言编写的)。 我的McAfee扫描器将一些示例程序标记为病毒。

这应该只发生有“看起来可疑”分析模式的病毒扫描程序。

在某些应用程序中,如果我使用RtlVclOptimize.pas,则Avira防病毒软件会告诉我已经创build了病毒。

加上其他人所说的话,现代的反病毒程序如果你的程序也使用了一些“可疑”的API(如URLdownloadFile或其他API挂钩相关的API),就会引发病毒警报。 如果你谷歌“delphiRAT FUD API无法检测”,你会发现很多有趣的话题。

一些防病毒程序甚至将batch file标记为病毒,不能确信它不是。 很烦人,如果该文件是第三方库的一部分,每次TortoiseSVN检查时都会触发病毒警告。 我结束了禁用病毒扫描器,删除文件,并做了提交。 (不禁用扫描仪,我甚至不能这样做:-()

几年前,每次我们从mingw源代码更新GNU Linker并开始将其与我们的编译器一起发布,我们得到了一些报告,virusscanners将ld.exe归类为病毒。 (.exes写.exes …)

我不会把它称为“误报”,因为严格地说,这并不是假的,杀毒软件也不是以任何方式“有罪”的。

我99%肯定,这是启发式分析行事(我敢打赌,它检测到你的可执行文件是沿着win32.virus.generic线 – 注意generics ,这是一个迹象,这是不是在其签名数据库,而是被启发式检测到的),并且是启发式的,并且不会给你任何保证,无论它发现什么是恶意的,它只是让你知道,可执行文件是可疑的它的观点

最简单的解决scheme就是按名称为文件添加一个例外(它总是相同的名称,是正确的?)。 如果您对此感到不舒服,那么在采取措施之前,您可能应使防病毒软件提示您,以便手动跳过您的文件。

一般来说,我发现在防毒软件的窗口编码有些恼人(现在不要做太多,但仍然),特别是如果说软件处于“偏执狂模式”。 虽然刺激,但它是不可避免的(国际海事组织)。

它也发生在我身上。 挂钩键盘将触发几乎所有的启发式扫描AV软件来报告一个键盘logging器。 可能还有很多其他的系统调用也会触发它。 解决scheme – 尝试重新devise您的代码或联系AV制造商,将您的软件纳入例外列表。

我记得另外一个奇怪的:

一个文件被标记为可疑。 唯一的是这个文件是.OBJ! 包含.OBJ包含代码的.EXE不被认为是一个问题。

如果您有误报的问题,有VirusTotal在线服务,可以帮助您检查您的文件与防病毒引擎的数量。
这是免费服务,目前它可以运行近40个防病毒引擎的防病毒检查。

许多诚实的开发人员因为不小心的防病毒软件而有问题。 另请参阅: 如何防止我的软件出现假阳性病毒报警?

想象一下,对于他们显示的每一个误报,你都会失去一个可能的顾客。 也许我们可以联合起来对抗这些杀毒产品,强迫他们更加小心误报,甚至为了我们因此而失去的销售收入。

VS平台工具集2010呈现我简单的程序被检测为病毒。 将工具集更改为VS 2013即可解决此问题。

它只是创build一个HttpWebRequest并将结果写入文件。

Interesting Posts