我的程序被avast反病毒阻止

Que*_*inC 40 c c++ virus

我是一个业余程序员,我因为一个大问题而变得绝望和疯狂:我的大多数程序都被avast反病毒阻止,而有些则没有,我不明白为什么.我试图调查越多,我就越不明白问题可能是什么.

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

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

三个不同的程序遇到麻烦:

  • 一个文本编辑器,目标是在保持简单,高效和可定制的同时替换Windows记事本
  • 一个非常简单易用的小型业余音频播放器
  • 在线游戏平台的客户端程序,目前拥有超过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文件
  • 我的音频播放器的所有版本都被阻止; 它们是C++,启用了0x功能,由ANSI模式下的GCC 4.7.2编译,以便携式zip文件分发
  • 我的游戏的当前版本1.7.2未被阻止.它在C中,在ANSI模式下用GCC 3.4.5编译,并作为inno-setup 5安装程序分发.
  • 我的游戏2.0.0的新版本目前是私人测试版,已被屏蔽.它是在C++中启用了0x功能,在unicode模式下使用GCC 4.7.2进行编译.我将我的私人测试团队与私人保管箱文件夹中的zip文件分享

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

  1. 用户双击或按可执行文件上的Enter键
  2. 该计划开始但几乎瞬间被avast强行摧毁
  3. 一个弹出窗口出现,并说:avast已将此程序放入他的沙箱,因为他的声誉很低
  4. 如果单击弹出窗口的继续按钮,程序的执行将重新启动并正常工作
  5. 如果没有单击"继续"按钮,则Windows资源管理器会冻结,可执行文件仍保留在任务管理器中,并且总是使用76 KB的RAM而无法终止; 最后大约5分钟后,Windows资源管理器解冻,程序重新启动并正常工作

这是无法接受的.我的程序的新手用户,特别是游戏,不知道防病毒是如何工作的; 不知道怎么把它放到白名单中,为什么它会解锁呢?不知道如何改变他们的反病毒设置; 如果他们看到弹出窗口,不会理解它,最终会害怕或失望,因为他们不知道为什么不能玩; 如果他们没有看到弹出窗口,我不能指望他们用半冷冻电脑等待5分钟.每次他们想玩.

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

  • 我的机器本身并没有被感染,也没有病毒注入我分发的可执行文件中; 否则,所有最近的节目都将被封锁; 我有两个(我的播放器和我的游戏的新版本),而一个不是(我的文本编辑器的最新版本).1.7.2的游戏已于2012年3月编译,而文本编辑器的1.4.1版本将于2012年10月编制.
  • 通过相同的推理,最新版本的GCC 4.7.2没有原因; 对于ANSI与unicode编译相同.
  • minGW C++运行时,作为自动链接DLL分发,在使用GCC 4.7.2编译的所有C++应用程序中是强制性的,可能不是原因,因为许多众所周知的程序都使用它; 并且我的文本编辑器被阻止并且在C中,因此不使用它.
  • 我的音频播放器和我的游戏有共同的音频库; 后来这不是原因,因为我的游戏版本1.7.2和最新的私人测试版没有.当然,该音频库也用于许多其他未被阻止的已知或不太知名的应用程序.
  • 玩家和游戏都使用winsock访问网络; 因此,同样的道理,也不是原因
  • 如果它真的是avast的声誉,为什么我的文本编辑器的版本1.4.1(未被阻止)只被下载了大约70次,而被阻止的版本1.3已被下载超过300次?它看起来完全不合逻辑.70位用户是否足以声称有关声誉的内容?300个用户更多吗?我真的不这么认为......可能需要数十万用户的临界质量.

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

我和我的朋友做了另一次经历,在那里我试图找到程序崩溃的地方,基于使用MessageBeep(MessageBox也被阻止了!).我没有发现任何问题.在登录对话框中第一次调用SetDlgItemText时会阻止游戏,但是如果我删除所有SetDlgItemText,它将被进一步阻止.在文本编辑器中,它在填充菜单栏时被阻止...

我的结论是,在我的游戏的新版本中,在我的文本编辑器的旧版本和我的音频播放器中,avast不喜欢这样的东西.最新版本的文本编辑器中缺少的东西.会是什么呢 ?你有什么线索吗?你是否只知道如何继续找到它是什么让我可以帮忙解决它?是否只有一种方法来分析这样的问题,还是由avast搞砸的洞世界?

请注意,我是一个人,而不是一个公司,所有这些程序都是免费使用的,我没有支付任何IDE来开发它们,而且当用户使用它们时我没有付费,所以我假设一个证书可能根本不负担得起.而且,我不知道它是否是一个真正的解决方案,如何签署一个用GCC编译的应用程序,我真的不想切换到像MSVC这样的"usineàgaz".如果有任何其他解决方案,即使是非常肮脏的解决方案,我宁愿强烈忘记该选项.

谢谢你的阅读.

Ric*_*orn 14

增加所有AV软件信心的一个好方法是对代码进行数字签名.Thawte拥有最便宜的公认证书,起价低于100欧元/年.

- 近两年后@ Herr_Doktor发表评论后更新 -

当代码签名不是一个选项时,我最近遇到了一种新情况 - 我在php中为Joomla编写了开源代码.在我收到Avast将我的文件标记为(假)阳性的第一个迹象后,我联系了他们,他们在几小时内将我的文件列入白名单.

为了让我的生活更轻松,我正在使用所谓的"危险"功能创建一个单独的文件,以便将来对程序的更改不需要重新提交以进行白名单.

可能它们的响应速度有助于读取一个简短的php文件比反向工程编译代码更快; 尽管如此,他们是善良,快速和有效的.

  • 你真的建议人们还清黑手党,这样他们干净的代码就不会被误报了?问题在于Avast,google等,显然不是这个人的代码.为了记录,我的软件有类似的问题,但我肯定不会支付100美元只是为了让那些骗子不要哭狼. (14认同)
  • 这称为Microsoft Authenticode.它不仅解决了一些启发式病毒扫描程序问题,还消除了Windows中"来自未知发布者的软件"可怕警报. (2认同)
  • @RiccardoZorn我到达了这个页面,因为我使用MinGW在C中编译了"hello world",它被隔离为病毒.然后我不得不花费我的周六下午与Avast设置和在线帮助,而不是学习C.无论是编写启发式的人是非常愚蠢的,或者他们的算法设置为超级攻击性并且不关心误报,这两者都不能使Avast非常适合开发人员. (2认同)
  • 不确定是否需要这样说,但是我的hello world程序没有用户,所以这似乎不相关.代码只是从教程中复制粘贴而printfs是一个硬编码字符串,我会对如何针对这样的应用程序安装缓冲区溢出攻击着迷. (2认同)
  • 在我自己搜索了“DRep”+ Avast 之后,我又回到这里。有趣的是看到我已经在这里发表评论了。我的最新问题是,当我从自己的网络服务器下载补丁文件时,Avast 会发出 DRep 警告。该补丁是使用合法版本的VisualPatch创建的,网络服务器是属于我的专用服务器。然而 Avast 现在已经“DRep”了服务器。这是黑手党,荒谬的是我应该付钱给某人,这样 Avast 就不会警告我(或任何将使用我的补丁服务器的人)使用我的干净程序 (2认同)
  • 我正在使用 sha1 和 sha256(双重)签署我的所有应用程序、所有安装程序、所有设置和卸载程序,但 Avast 仍然大惊小怪。就我而言,他们都是新的网络恐怖分子。我可能会在不久的将来起诉他们。 (2认同)

Gun*_*Foo 6

AV程序通过分析文件来处理已知"不良行为"的模式.

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

你应该调试你的代码(如果在linux上尝试valgrind或efence)并确保正确处理内存.