不小心制造了病毒?
Posted
技术标签:
【中文标题】不小心制造了病毒?【英文标题】:Accidentally created a virus? 【发布时间】:2010-11-02 21:08:50 【问题描述】:我经常看到这种情况发生:我在 Delphi 中编写了一个应用程序,当我编译它时,病毒扫描程序告诉我我已经创建了病毒,然后立即再次删除了可执行文件。通过完全重建,首先删除 *.dcu 文件,有时只需等待,即可轻松解决此问题。
据我所知,Delphi 6、7、2005 和 2007 都会发生这种情况。赛门铁克、卡巴斯基、迈克菲和 NOD32 都因报告这些误报而犯了罪。我知道这是因为 Delphi 在其 DCU 文件中添加了时间戳,这些时间戳最终会出现在最终的可执行文件中,并且显然似乎是某些随机病毒签名的一部分。
我不想禁用病毒扫描程序,即使是单个文件夹或文件也不行。我并不是真的想要一个解决方案,但我想知道以下几点:
其他编译器也会出现这些误报吗? .NET 可执行文件也会发生这种情况吗? 其他人是否也注意到 Delphi 的类似问题?【问题讨论】:
只是想补充一点,这个错误非常罕见,但我或我的一位同事大约每三个月就会发生一次。 Karpesky 将我标记为病毒的一个程序。我给他们发了电子邮件,他们修复了它以进行以下更新。 @Tom,Delphi 的流行可能与东欧流行的类似帕斯卡的语言有关。 不是误报:Win32/Injector.CKX木马 如果是 Win32/Injector.CKX 特洛伊木马,则 McAfee 和其他病毒扫描程序应该为每个使用 Delphi 编译的项目报告此情况。但是,在另一个系统上使用相同的文件重新编译项目,或者在几个小时甚至一天后重新编译所有内容,都没有更多警告。正如 Tom 所说,Delphi 曾经非常适合编写恶意软件,因此某些恶意软件签名可能与无辜的 Delphi 应用程序的签名相匹配。 (只是因为签名太笼统了。) 【参考方案1】:这些误报是否也会发生 与其他编译器?
是的,这是 AutoIt 过去的一个常见问题,如本论坛帖子 "Are my AutoIt EXEs really infected?" 中所述。在大多数情况下,包括AutoIt,它源于糟糕的启发式实践。由于AutoIt 使用免费且开放的UPX 压缩器,因此经常被误认为也使用UPX 的恶意代码。
您能做的最好的(也可能是唯一的)事情就是报告这些错误,以便他们改进启发式方法或至少将您的应用列入白名单。
以下是一些流行的防病毒公司的联系信息列表。他们都声称感谢提交的内容,因为这有助于他们改进产品。
AntiVir - Contact A2 (A-Squared) - Contact(电子邮件地址) Avast! - Contact AVG - Contact BitDefender - Contact BullGuard - Contact CA Anti-Virus - Contact ClamAV - Contact ClamWin - Contact Comodo - Contact ESET's Nod32 - Contact eSafe - Contact(需要登录) Fortinet - Contact F-PROT - Contact F-Secure - Contact G-Data - Contact Kaspersky - Contact McAfee - Contact(电子邮件地址) Norman - Contact(电子邮件地址) Panda Anti-Virus - Contact Sophos - Contact Symantec (Norton) - Contact Vipre - Contact Windows Live OneCare - Contact ZoneLabs - Contact原来***上有一个很棒的 AV 软件列表,称为 'List of antivirus software'。它比我上面的列表更完整。
Autoit 论坛的一名成员创建了a great script to e-mail a false positive to a huge list of AV vendors 以稍微自动化此过程。
【讨论】:
但他们只对你是作者感兴趣。多年来,McAfee 将我系统上的 .OBJ 文件声明为可能不需要的程序 - 但它与 .EXE 合并它没有问题。不过,我不是作者,因为它是一个不再受支持的旧版本,所以作者不会做任何事情。 @Loren:有趣,我不知道他们做了这样的区分。感谢您的提醒! 另一个给你的列表(我没有代表编辑),来自 Sunbelt Software 的 VIPRE,www.sunbeltsoftware.com @Copas:那是“Vipre”,而不是“Viper”——因为您正在尝试设置参考列表 请注意,UPX 并不是那么有用。它使您的程序运行所需的内存显着增加,并且在现代系统上的好处比以前少得多。【参考方案2】:对我来说,这听起来更像是一种启发式的搞砸。您是否打开了启发式(某些扫描仪可能将其称为“类似病毒的代码”)?时间戳等同于“某些病毒签名的一部分”的可能性似乎太小,不可能一直发生。
当我以前运行病毒扫描程序时,我从未发现 D6 或 D7 存在此问题。
【讨论】:
是的,启发式方法已开启。我不介意,因为计算机应该保持安全,所以我宁愿处理偶尔的误报,也不愿成为感染源。我经常为金融市场开发软件,因此其中大部分是敏感信息。【参考方案3】:野外确实有Delphi病毒,见http://www.sophos.com/blogs/sophoslabs/?p=6117
【讨论】:
【参考方案4】:是的,我的团队在公司环境中使用 Sophos 在 2 到 3 年内可能经历了六次。所以,很少发生,但确实会发生。
我们的 IT 白痴开始要求我审查我们应用程序中的所有 150 万行代码以“让它消失”,但他并没有走得太远去追求那条线......
公平地说,他最初担心我们的客户也可能会收到这样的警告,但我们只见过在开发人员的 PC 上从 IDE 构建 exe 时触发它,从来没有在测试盒或其他地方。
就个人而言,这种情况很少发生,我们不必担心。
【讨论】:
我也不担心这个。这很烦人,因为这意味着在构建新的可执行文件时会出现一些额外的延迟。不过,在我们的自动构建服务器上情况要差一些。编译没问题,但由于可执行文件被立即删除,在这种情况下它只会窒息而死。但同样,它非常罕见。 (在构建服务器上,新的构建运行只是再次修复它。)【参考方案5】:我在部署代码时遇到过这种情况。扫描仪的下一次更新解决了这个问题。一些白痴使用相同的编译器编写了病毒,并且签名是运行时库的一部分,而不是实际上在恶意代码中。
【讨论】:
这类似于 AutoIt 经常遇到的问题。我感受到你的痛苦,部署代码很难(完全)说服客户这是误报。 它是我内部的,运行它的人都知道我。【参考方案6】:在使用非标准编译器或做一些花哨的低级工作时,这种情况并不少见:我记得当我涉足操作系统开发时会产生误报:AntiVir 不喜欢我的一些平面二进制文件。
最近在tinyCC mailing listregading AVG 有一个关于此类问题的帖子。
【讨论】:
实际上,我知道我只需要在 DLL 项目中调用一个 Windows API 函数即可触发几乎每个病毒扫描程序的警报。 (keyhook API 被认为是可疑的。)但是为了避免误报,我不必更改源代码。我需要做的就是扔掉 DCU 文件(Delphi 编译单元),这样它就会用不同的时间戳再次重建这些文件,从而显然会生成不同的签名。【参考方案7】:我从未见过这种情况,我使用 Visual Studio(从 1.5 版到 2010 版)进行了大量 C++ 和 .NET 开发。
【讨论】:
C#病毒的第一次感染仍在进行中,请稍等。它需要一个 250MB 的框架和管理员权限才能安装你知道的。 :-)【参考方案8】:我只在汇编程序中看到过这种情况。例如,MASM32 实际上警告人们它可能会触发病毒扫描程序,因为 EXE 非常小(和/或某些病毒是用汇编编写的)。我的 McAfee 扫描程序将一些示例程序标记为病毒。
这应该只发生在具有“看起来可疑”分析模式的病毒扫描程序中。
【讨论】:
【参考方案9】:在某些应用程序中,如果我使用 RtlVclOptimize.pas,Avira 防病毒软件会告诉我我创建了病毒。
【讨论】:
这很有趣,因为 Avira 不会警告我所有应用程序中的病毒。也许是与其他单位的组合。【参考方案10】:加上其他人所说的,如果您的程序也使用一些“可疑”API(如 URLdownloadFile 或其他与 API 挂钩的 API),现代防病毒程序会提高病毒警报。 如果你用谷歌搜索“delphi RAT FUD API undetectable”,你会发现很多有趣的话题。
【讨论】:
【参考方案11】:一些防病毒程序甚至将批处理文件标记为病毒,但无法确定它不是。很烦人,如果该文件是第三方库的一部分,并且每次 TortoiseSVN 检出它时都会触发病毒警告。我最终禁用了病毒扫描程序,删除了文件并进行了提交。 (如果不禁用扫描仪,我什至无法做到这一点:-( )
【讨论】:
【参考方案12】:如果您遇到误报问题,VirusTotal 在线服务可以帮助您根据防病毒引擎的数量检查您的文件。 它是免费服务,目前可以运行近40个杀毒引擎的杀毒检查。
【讨论】:
当我的 AV 软件在我刚编译的某个可执行文件中报告病毒时,这将是不切实际的。我知道这不是病毒,除非我自己写了一个。问题是当检测到误报时,AV 会阻止我的编译过程。这很烦人。 我知道。 VirusTotal 只是一个可以告诉您哪些防病毒引擎错误地将您的软件视为病毒的地方,然后您可以联系他们并要求他们解决问题。 如果你有准确的肯定,我想它同样有用,不幸的是。【参考方案13】:几年前,每次我们从 mingw 源更新 GNU 链接器并开始使用我们的编译器分发它时,我们都会收到一些报告,称病毒扫描程序将 ld.exe 归类为病毒。 (.exes 写 .exes ...)
【讨论】:
【参考方案14】:我不会称其为“误报”,因为严格来说,它不是假的,而且防病毒软件无论如何都不会“有罪”。
我有 99% 的把握,这是启发式分析(我敢打赌,它会将您的可执行文件检测为类似于 win32.virus.generic 的内容 - 请注意 generic,这是一个签名,这不在其签名数据库中,而是被启发式检测到)并且,由于是启发式的,它并没有给你任何保证,无论它发现什么都是恶意的,它只是让它你知道,该可执行文件是可疑的从它的角度来看。
最简单的解决方案就是按名称为您的文件添加一个例外(它总是同名,对吗?)。如果您对此感到不舒服,您可能应该在采取行动之前让您的防病毒软件提示您,这样您就可以让它手动跳过您的文件。
一般来说,我发现在 Windows 中使用防病毒软件进行编码有些烦人(现在不要这样做,但仍然如此),尤其是在所述软件处于“偏执模式”时。虽然很烦人,但这是不可避免的(IMO)。
【讨论】:
实际上,在 Delphi 中编译的任何源代码都可能出现问题,因此文件名会有所不同。对可执行文件进行例外处理会在很小的程度上增加风险,但我需要这样做才能解决一个非常罕见的问题。特别是因为有一个简单的解决方法,这不是一个真正的问题。只是当它发生时很烦人。正如我所说,我们的系统适用于金融应用程序,所以我们一直都很偏执。 ;-) 烦人,但需要。 怎么可能不是误报?反病毒软件错误地将其识别为恶意软件。 “误报”的含义取决于结果,而不是过程是否合理。许多合理的过程会产生误报。【参考方案15】:我记得另一个奇怪的:
一个文件被标记为可疑文件。唯一的问题是该文件是一个 .OBJ!包含 .OBJ 包含的代码的 .EXE 不被视为问题。
【讨论】:
【参考方案16】:这也发生在我身上。挂钩键盘将触发几乎所有启发式扫描 AV 软件来报告键盘记录器。可能还有许多其他系统调用也会触发它。 解决方案 - 尝试重新设计您的代码或联系 AV 制造商,将您的软件纳入例外列表。
【讨论】:
也有这个问题。有一个在可执行文件中使用的 Delphi 单元,它实现了一个 keyhook。然后在 DLL 中使用该单元在 Outlook 下运行,它似乎正在工作。但是除了我当时使用的卡巴斯基扫描仪之外,它引发了相当多的病毒扫描仪!再说一次,情况更糟,因为 DLL 在每个进程中都安装了 keyhook。从可执行文件调用 API 时,这是不可能的。【参考方案17】:VS 平台工具集 2010 使我的简单程序被检测为病毒。 将工具集更改为 VS 2013 即可解决。
它只是创建一个 HttpWebRequest 并将结果写入文件。
【讨论】:
以上是关于不小心制造了病毒?的主要内容,如果未能解决你的问题,请参考以下文章