我是一名业余程序员,由于一个大问题,我感到绝望和生气:我的大多数程序都被avast防病毒软件阻止,而有些则不是,我也不知道为什么。
我尝试调查的次数越多,对问题可能的理解就越少。
我请求您的帮助以找到解决方案,以便不再阻止我的程序,或者默认情况下,至少提供一些有力的线索来解释为什么会这样。
网上已经有很多关于这个的话题。但是,它们中的大多数仅给出了肤浅的答案:它们只是说明防病毒如何与签名和检测试探法一起使用,或者声明您只需将有问题的应用程序添加到白名单中,而无需提出任何其他问题。尽管这确实是正确的,但就我的感觉而言,这不是可接受的答案,因为我仍然留下了自己的程序,这些程序在没有任何具体想法开始调查的情况下仍然拒绝工作。
首先,唯一阻止我程序的防病毒软件是avast7.x。没有其他杀毒软件可以运行我的软件。其次,我还没有自欺欺人。它安装在 friend 的机器上。
我有Windows 7,他有Windows XP。我完全确定问题只是严重的:当它被暂时禁用时,或者如果该程序被添加到白名单中,一切都会按预期进行。
三种不同的程序有麻烦:
第一个是开源的,如果需要,我可以提供指向可执行文件和源代码的链接。另外两个是封闭源,但可以免费使用,我只能提供指向当前版本可执行文件的链接。
这三个程序之间唯一明显的共同点是我作为开发人员,我的Windows 7机器对其进行了编译,编译器家族MinGW/GCC,它们都是Win32 GUI应用程序,没有任何框架(没有MFC,没有WPF,没有QT,WXWidgets或其他;仅是纯win32/C GUI应用程序)
这是我的观察,尽管到目前为止:
该问题是由avast 7.x自动沙箱引起的。当尝试启动avast不喜欢的程序时,会发生以下情况:
这是无法接受的。我的程序的新手用户,尤其是游戏的新手,不知道防病毒软件是如何工作的;不知道如何将其列入白名单,以及为何将其取消阻止;不知道如何更改其防病毒设置;如果他们看到弹出窗口,将无法理解它,并最终会因为不知道为什么无法玩而害怕或失望。如果他们没有看到弹出窗口,我就不能指望他们等着半冻结的计算机等待5分钟。每次他们想玩。
从那里,我得出以下推论:
除此之外,尽管我将我的程序作为便携式zip文件分发的事实可能是avast阻止的原因,相反,事实是程序已很好地安装在程序文件中可能是信任它的原因更多。
因此,我做了一个简单的体验:我为游戏的beta 2.0.0编译了一个新的inno-setup 5安装程序,并为我的文本编辑器1.3版编译了一个安装程序,发现安装程序本身被阻止了!
我和我的 friend 又经历了一次尝试,尝试使用MessageBeep(MessageBox也被阻止!)来找到程序崩溃的确切位置。我没有发现任何问题。在登录对话框中首次调用SetDlgItemText时,游戏被阻止,但是如果我删除所有SetDlgItemText,它会被进一步阻止。在文本编辑器中,填充菜单栏时它被阻止...
我的结论是,在新版本的游戏,旧版本的文本编辑器以及音频播放器中,avast都不喜欢。我的文本编辑器的最新版本中缺少某些内容。会是什么呢 ?你有什么线索吗?您是否对如何继续查找它只有一个想法,以便我希望修复它?是否只有一种方法可以分析这样的问题,还是洞口被avast搞砸了?
请注意,我是一个人,而不是一家公司,所有这些程序都可以免费使用,我没有为开发它们而支付任何IDE费用,并且当用户使用它们时,我也没有得到用户的付款,因此我假设证书可能根本负担不起。而且,我不知道这是不是一个真正的解决方案,如何对使用GCC编译的应用程序进行签名,我真的不想切换到MSVC之类的“正当性”。如果有其他解决方案,即使是非常肮脏的解决方案,我也强烈希望忘记该选项。
感谢您的阅读。
最佳答案
增加所有AV软件置信度的一种好方法是对代码进行数字签名。 Thawte拥有公认的最便宜的证书,低于每年100€。
-两年后@Herr_Doktor发表评论后更新-
我最近遇到了无法选择代码签名的新情况-我在php中为Joomla编写了开源代码。在收到第一个迹象表明Avast将我的文件标记为(错误)肯定结果后,我与他们联系,他们在几个小时内将我的文件列入了白名单。
为了使我的生活更轻松,我正在创建一个具有所谓“危险”功能的单独文件,以便将来对该程序进行更改时无需将其重新提交以列入白名单。
读取简短的php文件比进行逆向工程编译的代码要快,这有助于提高响应速度。尽管如此,它们还是友善,快捷且有效的。