使用 PyInstaller 制作的程序现在被 AVG 视为特洛伊木马

Program made with PyInstaller now seen as a Trojan Horse by AVG

大约一个月前,我使用 PyInstaller 和 Inno Setup 为我的 Python 3 脚本生成了一个安装程序。我的 AVG Business Edition AntiVirus 刚开始抱怨今天的更新,该程序在用于启动程序的主 .exe 文件中有一个 SCGeneric 特洛伊木马程序(在 PyInstaller 创建的文件夹中,其中包含所有 Python "guts").起初我只是认为这是 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 启动器不被视为木马吗?

感谢任何意见。

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

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

我总是从 VirusTotal 收到一些关于 Pyinstaller 的误报。我就是这样修复它的:

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

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

在你的机器上用VS编译Pyinstaller的bootloader。它会自动更新 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 安装

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

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

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

它支持 pyinstaller 3.5 的规范,Windows10 内置防火墙

未检测到 onefile-app

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

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

我的解决方案包含以下步骤:

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

这个问题我纠结了两天,终于发现我的应用有问题。问题出在应用程序的图标上。

tkinter 示例:

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

当我去掉这行代码后,误报木马就没有了

此外,确保在将 .py 文件转换为 .exe 时不要使用 --icon 依赖项。否则,这将导致同样的误报木马检测。

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

我的临时解决方案是允许 windows defender 和

中的应用程序

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

不知道对不对。但这对我有用。

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

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

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

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

I posted the specific steps on my medium blog. Shared the link below, but the basic steps are as follows

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

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

我在使用 python 3.8.5 和 pyinstaller 4.5.1

时遇到了同样的问题

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

我花了数周时间搜索了很多博客。但是我什么也没找到。。 今天找到一个py转exe的方法,没有病毒错误。

Virus Total Report

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

您需要安装名为 Nuitka.

的模块

python -m pip install nuitka

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

仅此而已。

您可以使用命令 nuitka --help

您可以在 - Nuitka Guide

找到更多信息