我的程序被avast反病毒拦截

我是一个业余程序员,因为一个大问题而变得绝望和疯狂:我的大多数程序都被avast反病毒拦截,有些则不是,我不明白为什么。 我试图调查得越多,我就越不了解问题所在。

我请求你的帮助,find一个解决scheme,以便我的程序不再被阻止,或者,作为默认,至less有一些强大的线索,可以解释为什么可能是这种情况。 网上已经有很多关于这个话题的话题了。 然而,他们大多只给出一些表面的答案:他们只是解释了反病毒如何与签名和检测启发式一起工作,或者说你只需要在白名单中添加违规应用程序而不询问任何其他问题。 虽然这当然是正确的,但我觉得这是不可接受的答案,因为我仍然留下自己的程序,拒绝工作,没有任何具体的想法开始调查。

首先,阻止我的程序唯一的反病毒是avast 7.x. 没有其他反病毒看到任何不方便运行我的软件。 其次,我自己并没有死心塌地; 它安装在朋友的机器上。 我有Windows 7,他有Windows XP。 我完全确定问题只是avast:当它暂时被禁用,或者如果程序被添加到它的白名单,一切都很好地按预期工作。

三个不同的scheme陷入困境:

  • 一个文本编辑器,旨在取代Windows记事本,同时保持简单,高效和可定制
  • 一个小的业余audio播放器使用非常简单
  • 一个在线游戏平台的客户端程序,目前拥有超过1000个用户

第一个是开源的,如果需要,我可以给出一个可执行文件和源代码的链接。 另外两个是封闭的源码,但可以自由使用,我只能给出一个链接到当前版本的可执行文件。 这三个程序之间唯一明显的共同点就是我作为一个开发人员,编译它们的Windows 7机器,MinGW / GCC编译器系列,它们都是没有任何框架的win32 GUI应用程序(没有MFC,没有WPF,没有QT,WXWidgets或其他;只是纯粹的Win32 / C GUI应用程序)

这是我的观察,虽然到目前为止:

  • 我的文本编辑器的版本1.1,1.2.1和1.3被阻止。 它们是C而不是C ++,已经在unicode模式下用GCC 3.4.5编译,并分布在可移植的zip文件中(通过便携式,我只是表示没有安装程序,也不需要安装)
  • 相同文本编辑器的版本1.4.1不会被阻止。 它已经用GCC 4.7.2编译,仍然在C而不是C ++,仍然在unicode模式下,仍然是一个可移植的zip文件
  • 我的audio播放器的所有版本都被阻止; 他们是在C ++中启用了0xfunction,已经由ANSI模式的GCC 4.7.2编译,分发在可移植的zip文件中
  • 我的游戏1.7.2的当前版本没有被封锁。 它在C中,已经在ANSI模式下用GCC 3.4.5编译,并作为inno-setup 5安装程序分发。
  • 我的游戏的新版本,2.0.0,目前是一个私人testing版,被封锁。 它在C ++中启用了0xfunction,已经在unicode模式下用GCC 4.7.2编译。 我将其与我的私人testing团队分享为私人保pipe箱文件夹中的zip文件

问题是由avast 7.x自动沙箱造成的。 当您尝试启动avast不喜欢的程序时,会发生以下情况:

  1. 用户双击或在可执行文件上input
  2. 程序启动,但几乎是瞬间和强行坠毁avast
  3. 出现一个popup窗口,并说:avast把这个程序放到他的沙盒里,因为他的声望很低
  4. 如果点击popup的继续button,程序的执行将重新启动并正常工作
  5. 如果不点击继续button,Windows资源pipe理器冻结,可执行文件保留在任务pipe理器中,并且总是使用76 KB的RAM,而不可能被杀死; 最后约5分钟后,Windows资源pipe理器解冻,程序重新启动,并正常工作

这是无法接受的。 我的程序新手用户,特别是游戏,不知道反病毒如何工作; 不知道如何把它列入白名单,为什么它将解除封锁; 不知道如何改变他们的反病毒设置; 如果他们看到popup窗口,就不会理解它,并最终会害怕或失望,因为他们不知道为什么不能玩; 如果他们没有看到popup窗口,我不能指望他们用一台半冻电脑等5分钟。 每次他们想玩。

从那里,我做了以下的扣除:

  • 我的机器本身不受感染,没有病毒注入到我分发的可执行文件中; 否则,所有最近的程序都将被阻止。 我有两个(我的玩家和我的游戏的新版本),而另一个不是(我的文本编辑器的最新版本)。 游戏的1.7.2已于2012年3月编译,而文本编辑器的1.4.1则为2012年10月。
  • GCC 4.7.2的最新版本并非因为同样的原因, ANSI和unicode编译一样。
  • 在GCC 4.7.2编译的所有C ++应用程序中强制使用minGW C ++运行时作为自动链接的DLL,这可能不是原因,因为许多知名的程序都使用它。 和我的文本编辑器被阻止,并在C中,因此不使用它。
  • 我的audio播放器和我的游戏具有共同的audio库; 这以后不是原因,因为我的游戏1.7.2版本的作品和最新的私人testing版没有。 当然,这个audio库也被用在许多其他已知的或不太被人知道的应用程序中,这些应用程序并没有被阻止。
  • 玩家和游戏都使用winsock访问networking; 所以同样的道理也不是原因
  • 如果真的是avast的名声,为什么我的文本编辑器1.4.1版本没有被封锁,只被下载了70次左右,被封锁的1.3版本下载了300多次呢? IT看起来完全不合逻辑。 70个用户是否足以宣称声誉? 300用户更多吗? 我真的不这么认为……可能是数十万用户的关键人物是必要的。

除此之外,我还认为我将程序作为便携式压缩文件分发可能是avast阻止的一个原因,相反,程序安装在程序文件中的事实可能是一个信任它的理由更多。 所以我做了一个简单的体验:我为我的游戏的beta 2.0.0编译了一个新的inno-setup 5安装程序,以及我的文本编辑器的1.3版本,并发现安装程序本身被阻止!

我与我的朋友做了另一个经验,在那里我试图根据使用MessageBeep(MessageBox也被阻止!)来准确地find程序崩溃的地方。 我没有注意到任何问题。 当在login对话框中第一次调用SetDlgItemText时,游戏被阻塞,但是如果我删除所有SetDlgItemText,它将被进一步阻塞。 在文本编辑器中,它在填充菜单栏时被阻止…

我的结论是,在我的游戏的新版本,我的文本编辑器的旧版本,以及我的audio播放器中,有一些avast不喜欢。 在我的文本编辑器的最新版本中没有的东西。 会是什么呢 ? 你有什么线索吗? 你是否只有一个想法,我怎么可以find它是什么,以便我可以希望修复它? 是否只有一种方法来分析这样的问题,还是由avast的洞世界?

请注意,我是一个人,而不是一个公司,所有这些程序都是免费使用的,我没有支付任何IDE来开发它们,而且在用户使用它的时候我没有付费,所以我假设证书可能根本不能承受。 此外,我不知道这是否是一个真正的解决scheme,如何签署使用GCC编译的应用程序,我真的不想像MSVC那样切换到“usineàgaz”。 如果还有其他解决scheme,我宁愿强烈地忘记这个选项,即使是非常肮脏的解决scheme。

感谢您的阅读。

增加所有AV软件的信心的一个好方法是数字签名你的代码。 Thawte拥有价格低于100欧元/年的最便宜的公authentication书。

– 近两年后@ Herr_Doktor的评论更新 –

我最近碰到一个新的情况,当代码签名不是一个选项 – 我写在PHP的Joomla的开源。 在我收到第一个迹象表明Avast将我的文件标记为(错误)正面信息后,我联系了他们,他们在几个小时内将我的文件列入了白名单。

为了使我的生活更轻松,我创build了一个单独的文件,其中包含所谓的“危险”function,以便将来更改程序时不需要重新提交白名单。

可能他们的反应速度有助于阅读一个简短的PHP文件比反编译代码更快的事实; 尽pipe如此,他们善良,快捷,有效。

AV程序通过分析已知“不良行为”模式的文件来工作。

如果您的程序取消引用指针,将200字节写入100字节的缓冲区或类似内容,则可能会生成类似于已知攻击签名的代码。 (因为大多数攻击都利用这种编程错误)

您应该debugging您的代码(如果在Linux上尝试valgrind或efence),并确保内存处理正确。

您可以对这篇文章感兴趣:

http://www.codeproject.com/Articles/71128/The-Case-of-Evil-WinMain

它说明了在处理链接一个简单的C运行库的小程序时,杀毒软件如何能够坚持下去。

你唯一能做的就是把这个问题告诉防病毒厂商,希望他们有一个公平的行为。

好吧,算了一下,去你的avast设置,有一个地方,你可以添加例外设置>防病毒,然后你向下滚动菜单,并有一个标题为EXCLUSIONS的地方,你可以浏览到你的视觉工作室的path,即。 c:> john> documents> visualStudio2010> projects :::select您的项目path,它会将其添加到扫描例外列表中,您应该能够testing运行您的文件…为我工作的很好。 由于来自其他成员的build议,我也在相同的菜单中禁用了深度扫描

我最近遇到一个问题,我的一些应用程序不能运行。 他们会显示为进程(在窗口下),但从来没有在任务pipe理器中的应用程序选项卡下。 进程通常有大约120K的内存大小,有时会有多个进程。

罪魁祸首是Avast DeepScreen。 来自Avast:“DeepScreen技术允许Avast在未知文件执行时做出实时决策”。

在我的情况下,Matlab被封锁,一些其他的应用程序。

Avast没有迹象表明它阻止了一个应用程序,使得“删除Avast!” 以上评论相当合适。

上面的评论指的是“如果你正在引用指针”。 如果你使用C或者C ++,那么你的程序将会这样做 – 这就是他们的工作方式。

而像carpetsmoker说,修复你自己的Avast设置是没有用的,所有的人都想下载你的软件,但被Avast吓坏了。

去avast“文件系统sheild”,然后点击“专家设置”button。 然后find并点击左侧菜单中的“排除”选项。 将您的项目文件夹添加到文件排除列表中。 这是安全的,除非危险的病毒爬到你的项目文件夹没有你knowldge:P

您需要转到您的反病毒帐户 – >设置 – >排除或类似的东西,并input他人提到的文件path。 我用avast做了。 第一次,它没有工作,所以我卸载并安装,然后去排除,现在它的作品。