Delphi程序被防病毒程序阻止

WeG*_*ars 28 delphi

我有一段代码试图在一秒钟内写入磁盘许多文件.但是,我已经安装了Kaspersky Anrivirus 2011.

Stream:= TFileStream.Create(sName, fmCreate); 
Run Code Online (Sandbox Code Playgroud)

该代码完全适用于卡巴斯基2010,如果我禁用其扫描仪(它不能完全从内存中卸载 - 除非它已卸载),它也适用于卡巴斯基2011.如果(Kaspersky 2011正在运行并且我懒散地写入磁盘),代码也可以工作.所以它显然不够快,无法处理我的磁盘请求.

我得到的错误是EFCreateError('无法创建xxx文件blablabla').错误是随机的.大多数文件都写入磁盘.大约10%的失败.

我曾试图获得支持但却无法在卡巴斯基找到真正的人与之交谈.他们所谓的"支持"实际上是一个FAQ数据库.当然,它讲的是如何安装产品和相关的东西.关于编程相关问题没有任何内容.有任何想法吗?

PS:这对整个Delphi社区都有影响!如果他们使用KIS 2011作为防病毒软件,我们所有客户都将无法使用Delphi软件.目前我建议我的用户禁用他们的防病毒软件,但我需要一个真正的解决方案.

如果有KIS 2011的人可以确认问题,那就太好了.只需创建一个小程序,使用TFileStream将200个小文件写入磁盘.

更新:

  • 仅当文件不存在且创建(创建而不是覆盖)时才会出现此问题.
  • 类似报道:https://forums.embarcadero.com/thread.jspa?threadID = 32751&tstart = 15
  • 类似的报道:http://forum.kaspersky.com/index.php?showtopic = 120561
  • 我想到的一个可能的解决方案是检测KIS是否正在运行,如果是,则在每次写入磁盘后都要延迟.或者在leat,让用户知道可能存在问题.谁知道如何检测服务是否正在运行?
  • 我添加了650毫秒的延迟(每个文件创建后),但仍然存在错误).所以不是关于你写入磁盘的速度有多快,而是你写的文件数量.
  • 刚卸载的KIS 2011.问题不再出现了.
  • 刚重新安装好的旧KIS 2010.该错误仍然存​​在但很少出现(大约每300个文件,而不是KIS 2011中的大约30个).
  • 问题在第二台计算机上得到证实.
  • 新闻:崩溃出现在TFileStream.Create中,但它可能是由之前调用的函数引起的:TestWriteAccess.如果我禁用此功能,TFileStream.Create不会再失败.嗯,这不会改变太多事情.无论哪一行代码生成错误,程序仍然会(随机)在Kaspersky运行时将文件写入磁盘.
  • 还在等待卡巴斯基真人的回复......
  • 从卡巴斯基支持收到更多自动回复(我在几个国家/地区发送了电子邮件支持).所有指向FAQ数据库.
  • 我将我的状态从卡巴斯基的粉丝(和顾客)改为卡巴斯基的仇恨,因为我终于收到了来自卡巴斯基支持的真人的答案,这简直令人讨厌.

要测试代码,请尝试在循环中使用代码来创建1000个文件.该程序创建了一堆文件(随机数),然后在StreamFile:= TFileStream.Create失败.更新:可以通过在创建每个文件后输入一个小延迟来解决此问题.
https://docs.google.com/forms/d/1H3_O1z1iEqfh9ZT9u3B0R1tGEj-Hc9o7rAE0LKPr33Y

2013年更新

从今天下午开始(更新后)KIS与Delphi发生冲突.每次编译项目时,KIS都会达到100%的CPU利用率.我将不得不卸载它.

2017年更新

从2017年开始,我所有的Delphi程序都会神奇地消失所有误报警.似乎卡巴斯基这样的程序从其病毒列表中删除了Delphi生成的可执行文件就足够了; 所有其他较小的防病毒程序紧随其后.


Delphi 7,Win 7(32),KIS 2011

Chr*_*ton 10

您需要告诉您的用户,即卡巴斯基的客户,卡巴斯基正在干扰您的软件操作,并且他们应该报告它.表达您的挫败感,作为开发人员,您无法访问真正的人类.这是反恶意软件公司反应的唯一方式 - 与付费客户的公关差.

  • @Andrey,我不同意.AV供应商应该分担他们粗心大意带来的一些痛苦. (4认同)
  • @Andrey - "误报(你的情况)" - 不,这不是误报,因为KIS没有显示任何警告/信息.如果我的"错误"代码不在TRY EXCEPT子句中,它只会崩溃程序.因此,我开始怀疑:有多少其他程序显示我的错误实际上是错误的,有多少是可以的,但卡巴斯基让他们表现得很糟糕.没有腐败者(一个让其他程序出错的程序),我的电脑会更好.其他用户也可以从更少的防病毒软件中受益(没有迹象表明KIS提供的安全性可以弥补其错误). (4认同)
  • 这有点不适合现实生活.当你说防病毒工作不正常时,当防病毒软件表示它是可疑的时,防病毒的反PR不仅仅是反PR的防PR.您(开发人员)应该联系AV供应商,他们支持此类案例.当然他们不会为你改变AV,但他们可能会给你如何防止报警的有用说明. (3认同)
  • @Chris,你可以不同意你所喜欢的,但是如果你的软件没有做它应该做的或被报告为病毒,那么客户会认为你的软件是坏的.这就是现实. (2认同)
  • @Andrey:他到底有什么安全感?实际上,他正在获得消极安全 - 他认为他受到了保护,所以他会稍微放松一下.(另外,我想我听说Karspersky对这种事情特别不好.) (2认同)

WeG*_*ars 5

卡巴斯基 = 盗版公司?可能是,可能不是。也许只是另一家产品不佳且不存在支持的公司。他们的“支持”包括常见问题数据库和自动电子邮件回复程序。电话也连接到答录机。他们的自动回答不断向我解释如何将我的程序添加到 KIS“异常”数据库中。我一直在回复那些愚蠢的电子邮件,说我不能亲自去我家里的所有客户那里并将我的程序放在“例外”数据库中,如果他们能修复错误会更好。

当我最终得到一个非自动的答案(唯一的)时,支持人员的家伙尽可能粗鲁。

Delphi 程序员可能的解决方案:
* 不要检查用户是否对文件有写权限(为了不触发卡巴斯基错误)
* 检查用户是否有写权限。如果出现错误,通知用户卡巴斯基产生了问题,应该暂时禁用(在程序运行时)。使用 TRY EXCEPT 块来执行此操作。

建议(根据我过去的经验):
如果您在程序尝试写入磁盘时收到来自用户的奇怪错误报告,请不要总是责怪您的代码。还要检查外部因素(如卡巴斯基病毒软件的存在)。

更新:
我刚刚申请了退款。如果他们不退款,我会要求退款(我强烈认为他们不会)。

结论
当我在 StackOverflow 上发布这篇文章时,我没有意识到问题的严重性,也没有意识到它会偏离最初的课程。我仍然认为这完全符合 StackOverflow 的目的。我们都知道,有时程序中的问题可能不是由我们的错误代码引起的,我们也无法控制这些问题的根源(21 人投票赞成这个问题 - 这意味着很多其他人遇到了 KIS 问题)。我们只能希望那些在非常低的水平上与用户系统交互的糟糕设计的程序(例如 KIS 防病毒程序)将很快得到修复,这样我们的销售就不会受到(太多)的影响。

当您的程序被标记为“有问题”而您无能为力时,这令人沮丧!

  • 卡巴斯基在您的文件写入请求和 Windows 之间放置了一个“软件管道”。由于它分析内容,因此处理这么多文件写入请求的速度很慢,因此您的写入请求的一部分被拒绝。您将这种行为归咎于他们是正确的。 (2认同)

cro*_*ocr 4

不是解决您问题的答案,但您应该通知卡巴斯基,他们可能不知道存在与 Delphi 库相关的病毒签名。

如果您的程序不太复杂,您可能想尝试 Lazarus/FPC。它不如Delphi,但我已经使用它好几年了,并且在Windows/MacOS/Linux 中取得了很好的结果。

  • 不可能找到来自卡巴斯基支持的真人。他们仅通过论坛板提供支持。只有不理解问题的普通用户(提供相当愚蠢/基本的答案)才会在那里回答。我刚刚从“错误报告”区域删除了我的帖子。显然他们不会接受这是他们软件中的错误。所以,你可能是对的:我们对卡巴斯基无能为力。但至少我们向 Delphi 社区通报了这个大问题。 (3认同)
  • 有多种反病毒产品通常将 Delphi 可执行文件标记为恶意软件,因为遗憾的是,它们的分析例程检测到出现在病毒中的相同字节序列的出现率很高,也出现在您的代码中。这些字节称为 Delphi RTL(运行时库)。当然,同样的问题会影响 Visual C++,但卡巴斯基的白痴在 VC++ 中构建了他们的应用程序,因此他们将 Visual C++ RTL 列入白名单。 (3认同)