【问题标题】:Program made with PyInstaller now seen as a Trojan Horse by AVG使用 PyInstaller 制作的程序现在被 AVG 视为特洛伊木马
【发布时间】:2017-10-02 07:00:48
【问题描述】:

大约一个月前,我使用 PyInstaller 和 Inno Setup 为我的 Python 3 脚本生成了安装程序。我的 AVG Business Edition AntiVirus 刚刚开始抱怨今天的更新,该程序在用于启动程序的主 .exe 文件中有一个 SCGeneric 特洛伊木马程序(在 PyInstaller 创建的包含所有 Python“胆量”的文件夹中)。起初我只是认为这是 AVG 中的误报,但将 .exe 文件提交给 VirusTotal 我得到了这样的分析:

https://virustotal.com/en/file/9b0c24a5a90d8e3a12d2e07e3f5e5224869c01732b2c79fd88a8986b8cf30406/analysis/1493881088/

这表明 61 台扫描仪中有 11 台检测到了问题:

TheHacker   Trojan/Agent.am 
NANO-Antivirus  Trojan.Win32.Agent.elyxeb 
DrWeb   Trojan.Starter.7246 
Yandex  Trojan.Crypren!52N9f3NgRrY 
Jiangmin    Trojan.Agent.asnd 
SentinelOne (Static ML)     static engine - malicious 
AVG     SCGeneric.KTO 
Rising  Malware.Generic.5!tfe (thunder:5:ujHAaqkyw6C) 
CrowdStrike Falcon (ML)     malicious_confidence_93% (D) 
Endgame     malicious (high confidence)     20170503
Zillya  Dropper.Sysn.Win32.5954 

现在我不能说这些其他扫描仪是我以前听说过的......但我仍然担心它不仅仅是 AVG 给出误报。

我已将有问题的 .exe 文件提交给 AVG 进行分析。希望他们能够放弃他们认为自己试图检测到的任何东西。

我还能用 PyInstaller 做些什么来使它创建的 .exe 启动器不会被视为木马?

感谢您的任何意见。

【问题讨论】:

  • 那么PrimerPrep.exe 是什么?是 Inno Setup 安装程序还是应用程序本身?
  • PyInstaller 创建一个 dist 文件夹,其中包含 Python 运行程序所需的所有位。 PrimerPrep.exe 文件是实际启动程序的那些位中的启动器文件。 Inno Setup 打包该 dist 文件夹并创建 PrimerPrep Installer.exe 文件 - 将程序安装到 Program Files 文件夹中的单个文件,创建桌面快捷方式等。但是如果我通过 VirusTotal 运行该安装程序 .exe,则只有 2标记它的扫描仪(DrWeb 和 NANO)。 AVG 说安装程序正常,即使它包含它自己标记的 .exe 文件。
  • 好的,所以您的问题实际上与 Inno Setup 无关,对吧?这是关于 PyInstaller .exe 的。
  • 我并没有真正想到这一点,但是,是的,据称有木马的 .exe 文件是由 PyInstaller 创建的。 Inno Setup 创建的安装程序 .exe 实际上从 AVG 中“隐藏”了假定的特洛伊木马......直到它被安装,当然,当 AVG 再次将其标记为特洛伊木马时。

标签: pyinstaller antivirus virus


【解决方案1】:

我能够将相关文件提交到 AVG 的“报告错误检测”页面,地址为 https://secure.avg.com/submit-sample。我很快就收到了回复(我不记得确切的时间,但不到一天),他们分析了我的文件并确定它没有病毒。他们说他们已经调整了病毒定义,这样就不会再引发误报。我更新了我的定义,但它仍然在触发,所以我再次联系他们用我的病毒定义版本,我听说我的版本不够高 - 我认为我的定义有一些延迟,因为我是从本地服务器。但在一天之内,我得到了正确版本的定义,并且不再触发误报。

因此,如果您对 AVG 有误报,我会推荐此解决方案 - 相当快速且容易地解决问题。

【讨论】:

【解决方案2】:

我总是收到来自VirusTotal 的 Pyinstaller 的一些误报。这就是我修复它的方法:

Pyinstaller 带有针对不同操作系统的预编译引导加载程序二进制文件。我建议在你的机器上自己编译它们。确保你的机器上的一切都是一致的。对于 Windows 64 位,安装 Python 64 位。下载适用于 Windows 的 PyInstaller 64 位。确保安装了与您的 Python 对应的 Visual Studio (VS),检查如下:

https://wiki.python.org/moin/WindowsCompilers

用 VS 在你的机器上编译 Pyinstaller 的引导加载程序。它会自动更新 DownloadedPyinstallerFolder\PyInstaller\bootloader\Windows-64bit 中的 run.exe、runw.exe、run_d.exe、runw_d.exe。查看下面有关如何编译引导加载程序的更多信息:

https://pyinstaller.readthedocs.io/en/stable/bootloader-building.html

最后安装 Pyinstaller。在 Pyinstaller 目录下运行

python setup.py 安装

【讨论】:

  • “对于 Windows 64bit,安装 Python 64bit。下载 PyInstaller 64bit for Windows”
  • 这真的很有用 - 重建引导加载程序删除了我的应用程序上的许多错误检测,包括 Microsoft Defender。
  • 对我来说这根本不起作用。在此之前,我得到了 7 次 VirusTotal 检测。到了 15 岁之后。
  • 我已经完成了上面编译引导加载程序的步骤,然后通过“python setup.py install”安装,但在趋势科技防毒墙网络版(Apex One安全代理)中没有用:(
【解决方案3】:

从 3.4 恢复到 PyInstaller 3.1.1 解决了我的类似问题(至少暂时)。

【讨论】:

    【解决方案4】:

    正如@boogie_bullfrog 所说,恢复到以前的版本可能是一种解决方案。但是我使用 *.spec 文件来存储一些数据(如图片和图标)。我有最新的 3.5 版本(2019 年 8 月),迁移到 3.1.1 导致编译应用程序时出错(可能是由于支持 Python 3.7)。

    所以现在最简单的解决方案是降级到 3.4

    它支持 pyinstaller 3.5 的规格,并且 Windows 10 内置防火墙未检测到 onefile-app

    【讨论】:

    • 不幸的是,即使 3.4 Virustotal 报告 9/70 的假阳性。但是是的,AVG 和 Avast 变成了负数virustotal.com/gui/file/…
    【解决方案5】:

    我在 Windows 下使用 pyinstaller exe 时遇到了类似的问题。 Avira 将该文件隔离,因为它被认为具有潜在危险(由于启发式算法,这意味着某些片段看起来很典型,但实际上没有发现病毒)。

    请记住,您自己生成的 exe 文件是唯一的(因此,Avast 扫描仪通常会返回一条消息“您找到了一个稀有文件,我们正在快速测试”,并延迟执行 15 秒以进行更彻底的测试)。

    我的解决方案包括几个步骤:

    • 我已将 exe 上传到https://www.virustotal.com/gui/home/upload 以使用许多扫描仪进行检查。如果只有一两个检测到病毒,您应该注意安全。
    • 为了让您的本地病毒扫描程序接受该文件,您可以为您的计算机手动接受该文件,但这并不能解决根本问题,因此在其他计算机上它仍会被标记为病毒。
    • 因此,我将该文件报告为误报给 Avira,只需通过电子邮件发送即可。其他扫描仪也有类似的反馈线。我在一天内通过电子邮件收到了一个反馈,它是好的,我电脑上的扫描仪现在同意这一点。希望这有助于我的 exe 的下一次迭代,使其保持干净。

    【讨论】:

      【解决方案6】:

      我为这个问题困惑了两天,终于发现我的申请有问题。问题出在应用程序的图标上。

      tkinter 示例:

      root.iconbitmap('./icon.ico')
      

      当我删除这行代码后,误报木马就消失了。

      另外,在将 .py 文件转换为 .exe 时,请确保不要使用 --icon 依赖项。否则,这将导致相同的假阳性木马检测。

      【讨论】:

      • 所以你是在告诉我我们不能添加图标?如果您不使用该标志,您还如何将其添加到您的应用中?
      • 这节省了我的时间,删除图标消除了误报标记。
      【解决方案7】:

      我的小文档注册项目代码遇到了同样的问题。

      我的临时解决方案是允许 Windows Defender 中的应用程序和

      其他解决方案是使用命令pyinstaller filename.py 而不是pyinstaller --onefile filename.py

      我不知道它是否正确。但它对我有用。

      【讨论】:

      • 删除--onefile 可能在这里有所帮助。根据另一个线程,PyInstaller 用于将文件捆绑到一个存档中的方法使防病毒软件看起来很可疑。
      【解决方案8】:

      我所做的是解决这个问题(使 exe 文件无法检测为病毒)是通过输入 cmd 来降级 pyinstaller:pip install pyinstaller==4.1.0

      顺便说一句,它在 3.4.0 上不起作用,所以我只是随机选择了那个版本(4.1),到目前为止它看起来还不错:> 我很确定它不仅适用于那个版本,而且我亲身体验过

      【讨论】:

        【解决方案9】:

        重新编译然后手动重新安装您的 Pyinstaller 引导加载程序。

        这是我有一段时间遇到的问题,我和我的朋友在许多其他人的帮助下想出了这个解决方案。它几乎总能解决问题。

        我在我的中型博客上发布了具体步骤。分享了下面的链接,但基本步骤如下

        1. 清除项目中的 Pyinstaller 文件并重新构建
        2. 卸载 Pyinstaller
        3. 使用您的编译器构建 Pyinstaller 引导加载程序
        4. 安装新编译的 Pyinstaller
        5. 使用 Pyinstaller 重新构建您的 EXE,并确保它没有被标记为病毒

        如何解决 Python Pyinstaller 误报木马病毒

        【讨论】:

        • 感谢详细说明,但我仍然遇到同样的安全问题,包括来自 Microsoft 的问题。
        • @Manngo 错误信息是什么?即使在您将 EXE 提交给反病毒公司标记之后也是如此吗?
        • VirusTotal 在使用预编译的 Pyinstaller 或手动编译的 Pyinstaller 编译后给了我 5 或 6 个警报。我能够签署它并将应用程序提交给 Microsoft,这样它就通过了 Defender。
        【解决方案10】:

        我在使用 python 3.8.5 和 pyinstaller 4.5.1 时遇到了同样的问题

        在我的情况下,第一个 exe 版本被防病毒软件 (Windows Defender) 接受,但随后的版本被标记为有木马。 我每次构建可执行文件时都使用pyinstaller --clean 选项解决了这个问题

        【讨论】:

        • 这比其他解决方案容易得多,而且似乎可以工作,我能够创建文件,然后与同事共享而不会被标记
        • 在花费大量时间研究其他方法来冻结我的代码但没有成功后,我回到了这个解决方案并且它奏效了。我同意这对我来说是最简单的方法。
        • 至少在我的情况下,这对我来说似乎也是正确的解决方案。与 --onefile 一起工作正常
        【解决方案11】:

        我搜索了数周的博客。但是我什么也没找到。。 今天找到了一种将py转为exe的方法,不会出现任何病毒错误。

        Virus Total Report

        所以在这个方法中你不需要发送任何报告..其实很简单。

        您需要安装一个名为 Nuitka 的模块。

        python -m pip install nuitka

        然后你需要从文件路径中打开命令。并使用命令; python -m nuitka --mingw64 filename.py

        仅此而已。

        你可以使用命令 nuitka --help

        您可以在 -Nuitka Guide

        找到更多信息

        【讨论】:

        • 趋势科技防毒墙网络版(Apex One安全代理)没有将其视为病毒,但exe文件大小增加,因此是短期解决方案。谢谢。
        • 不客气 :)
        • 很高兴听到这个消息
        猜你喜欢
        • 2016-06-04
        • 1970-01-01
        • 2021-05-01
        • 1970-01-01
        • 2021-08-17
        • 2021-02-22
        • 2019-02-22
        • 1970-01-01
        相关资源
        最近更新 更多