gpt4 book ai didi

c++ - 我的程序被 avast 防病毒软件阻止

转载 作者:行者123 更新时间:2023-12-01 19:35:13 26 4
gpt4 key购买 nike

我是一名业余程序员,因为一个大问题,我感到绝望和生气:我的大多数程序都被 avast 防病毒软件阻止,而有些则没有,我不明白为什么。
我尝试调查的次数越多,我就越不了解问题所在。

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

首先,阻止我的程序的唯一防病毒软件是 avast 7.x。没有其他杀毒软件看到有什么不便运行我的软件。其次,我没有放弃自己;它安装在 friend 的机器上。
我有 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 功能,已由 GCC 4.7.2 以 ANSI 模式编译,以可移植的 zip 文件
  • 分发
  • 我的游戏的当前版本 1.7.2 没有被阻止。它是 C 语言,已在 ANSI 模式下使用 GCC 3.4.5 编译,并作为 inno-setup 5 安装程序分发。
  • 我的游戏新版本2.0.0,目前是内测,被屏蔽了。它是在 C++ 中启用了 0x 功能,已在 unicode 模式下使用 GCC 4.7.2 编译。我将它作为 zip 文件与我的私有(private) Beta 测试团队共享,位于私有(private)保管箱文件夹


  • 该问题是由 avast 7.x 自动沙盒引起的。当您尝试启动 avast 不喜欢的程序时,会发生以下情况:
  • 用户双击可执行文件或按 Enter 键
  • 程序启动但几乎瞬间被avast
  • 强行崩溃
  • 出现一个弹出窗口,内容如下:avast 已将此程序放入他的沙箱中,因为他的声誉很低
  • 如果点击弹窗的继续按钮,程序重新开始执行并正常运行
  • 如果不点击继续按钮,windows资源管理器死机,可执行文件留在任务管理器中,总是使用76 KB的RAM而无法杀死;最后大约 5 分钟后,Windows 资源管理器解冻,程序重新启动并正常运行

  • 这是无法接受的。我的程序的新手用户,尤其是游戏,不知道防病毒是如何工作的;不知道怎么加入白名单,为什么会解封;不知道如何更改他们的防病毒设置;如果他们看到弹出窗口,不会理解它,最终会害怕或失望,因为他们不知道为什么就不能玩;如果他们没有看到弹出窗口,我不能指望他们用半卡住的计算机等待 5 分钟。每次他们想玩。

    从那里,我做了以下推论:
  • 我的机器本身没有被感染,我分发的可执行文件中没有注入(inject)病毒;否则,所有最近的程序都将被阻止;我有两个(我的播放器和我的游戏的新版本),而一个不是(我的文本编辑器的最新版本)。游戏的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 有效,而最新的私有(private)测试版无效。当然,该音频库还用于许多其他已知或鲜为人知的未被阻止的应用程序。
  • 玩家和游戏都使用winsock访问网络;所以同理,这也不是原因
  • 如果真的是avast的名声,为什么我的文本编辑器没有被屏蔽的1.4.1版本只下载了70次左右,而被屏蔽的1.3版本却被下载了300多次?它看起来完全不合逻辑。 70 个用户足以声称声誉吗? 300 个用户会更多吗?我真的不这么认为......可能需要数十万用户的临界质量。

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

    我和我的 friend 做了另一个体验,在那里我试图找到程序崩溃的确切位置,基于使用 MessageBeep(MessageBox 也被阻止了!)。我没有注意到任何问题。当第一次在登录对话框中调用 SetDlgItemText 时,游戏被阻止,但如果我删除所有 SetDlgItemText,它会被进一步阻止。在文本编辑器中,它在填充菜单栏时被阻止...

    我的结论是,在我的游戏的新版本、我的文本编辑器的旧版本和我的音频播放器中,有些东西是 avast 不喜欢的。我的文本编辑器的最新版本中没有的东西。会是什么呢 ?你有什么线索吗?您是否只知道我如何才能找到它是什么,以便我可以希望修复它?这样的问题是只有分析方法,还是被avast搞砸了洞世界?

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

    感谢您的阅读。

    最佳答案

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

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

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

    为了让我的生活更轻松,我正在创建一个具有所谓“危险”功能的单独文件,以便将来对程序的更改不需要重新提交以列入白名单。

    他们的响应速度可能得益于读取一个简短的 php 文件比逆向工程编译代码更快这一事实;尽管如此,他们还是友善、快速和有效的。

    关于c++ - 我的程序被 avast 防病毒软件阻止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14375340/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com