PyInstaller制作的程序现在被AVG视为木马病毒

68

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


1
那么PrimerPrep.exe是什么?它是Inno Setup安装程序还是应用程序本身? - Martin Prikryl
1
PyInstaller创建了一个dist文件夹,其中包含运行程序所需的所有Python位。PrimerPrep.exe文件是这些位中实际启动程序的启动器文件。Inno Setup打包该dist文件夹,并创建PrimerPrep Installer.exe文件 - 一个单独的文件,将程序安装到Program Files文件夹中,创建桌面快捷方式等。但如果我通过VirusTotal运行该安装程序.exe,则只有2个扫描器会标记它(DrWeb和NANO)。AVG表示该安装程序是OK的,即使它包含了被其自身标记的.exe文件。 - Jeff H
1
好的,所以你的问题实际上不是关于Inno Setup,对吧? 而是关于PyInstaller .exe。 - Martin Prikryl
2
我其实没有仔细考虑过,但是是的,那个据说有特洛伊木马的.exe文件是由PyInstaller创建的。而由Inno Setup创建的安装程序.exe实际上会将所谓的特洛伊木马“隐藏”起来,直到它被安装,当然,这时AVG又会将其标记为特洛伊木马。 - Jeff H
请返回翻译后的文本:https://dev59.com/DH7aa4cB1Zd3GeqPlhfj https://github.com/pyinstaller/pyinstaller/issues/847 https://github.com/pyinstaller/pyinstaller/issues/603 https://github.com/google/spatial-media/issues/97 - kirbyfan64sos
很不幸,这是一个已知的问题,我几个小时前也遇到了。:/ 尝试重新编译PyInstaller的引导程序,现在被标记的杀毒软件数量从9降至...8...如果我没记错的话,使用64位的PyInstaller编译可以解决这个问题? - kirbyfan64sos
12个回答

48

我经常从VirusTotal那里得到一些PyInstaller的误报。这是我如何解决的:

PyInstaller附带了不同操作系统的预编译引导程序二进制文件。我建议您在自己的机器上编译它们。确保您的计算机上一切都是一致的。对于64位Windows,请安装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 install

6
对于Windows 64位系统,请安装Python 64位版本。下载适用于Windows的PyInstaller 64位版本。这对我很有帮助,谢谢。我之前在Windows上使用了一个pyenv分支,并安装了Python 3.7.0版,但是这样做是错误的,我需要安装Python 3.7.0-amd64版。现在,PyInstaller生成的二进制文件不再被我的大学杀毒软件标记为病毒了。请注意,在Linux上测试时,3.7.0-amd64是一个不存在的版本,因此我不能再依赖pyenv的.python-version文件了。相反,我会使用PYENV_VERSION环境变量。 - Biganon
5
这非常有用 - 重新构建引导加载程序可以消除我的应用程序上的许多假检测,包括Microsoft Defender。 - xioxox
6
对我而言,这完全没有用。在此之前,我有7个VirusTotal检测结果,在此之后我有15个。 - iBent
2
我已经完成了编译引导程序并通过“python setup.py install”进行安装的步骤,但在趋势科技OfficeScan(Apex One Security Agent)中无效 :( - kyc1109
1
使用Python 64位3.8.8和Pyinstaller 5.4.1。引导程序编译采用MSVC 14.34,效果无与伦比。然而,“Avast”仍将我的编译程序检测为威胁! - s.paszko

20

我成功地将相关文件提交给 AVG 的“报告误判”页面,地址为 https://secure.avg.com/submit-sample。很快就收到了回复(具体多久我记不清了,但不到一天),他们分析后认定该文件没有病毒,并表示已经调整病毒库的定义,不会再出现误报。我更新了病毒库后依然出现误报,于是我再次联系他们并提供了我的病毒库版本,他们回复说我的病毒库版本太低了——我从本地服务器获取病毒库可能有些延迟。但是在一天内,我获得了正确的病毒库版本,误报问题也解决了。

所以,如果您在使用 AVG 时遇到误报问题,我建议您采用这种解决方案,非常快速和容易解决问题。


鉴于最近有关PyPi渗透的发现https://www.bleepingcomputer.com/news/security/ten-malicious-libraries-found-on-pypi-python-package-index/,或许确实存在担忧的原因。Windows Defender现在将'runw.exe'检测为特洛伊木马。 - kfsone

9
我在我的小型文档注册项目代码中遇到了同样的问题。
我的临时解决方案是允许Windows Defender中的应用程序,另一种解决方案是使用命令pyinstaller filename.py而不是pyinstaller --onefile filename.py
我不知道它是否正确。 但是对我起作用了。

4
移除 --onefile 可能会有所帮助。根据另一个讨论串,PyInstaller 用于将文件捆绑成一个存档的方法是导致反病毒软件感到可疑的原因。 - Zenahr

8

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

tkinter示例:

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

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

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


2
那你是在告诉我我们不能添加图标吗?如果不使用标志,你还有什么其他方法将其添加到应用程序中呢? - Zenahr
这个救了我的一天,移除图标解决了误报的问题。 - PanDe
移除图标导致卡巴斯基崩溃,但提高了赛兰丝的效果。 - Ratul Hasan

7

我搜索了多个博客数周,但是没有找到任何有用的信息。
今天,我发现一种可以无需担心病毒错误的方法,来将py文件转换为exe文件。

病毒总报告

实际上,这种方法非常简单。你只需要安装一个名为Nuitka的模块:

python -m pip install nuitka

然后,你需要从文件路径打开命令行,并使用以下命令:
python -m nuitka --mingw64 filename.py

就是这样了!

你可以使用以下命令:
nuitka --help

你可以在 Nuitka指南 中找到更多信息。


1
趋势科技 OfficeScan(Apex One 安全代理)没有将其视为病毒,但 exe 文件大小增加了,因此这只是一个短期解决方案。谢谢。 - kyc1109

6

我曾经在使用Python 3.8.5和Pyinstaller 4.5.1时遇到了同样的问题。

在我的情况下,第一个exe构建通过了杀毒软件(Windows Defender)的检测,但随后的构建被标记为木马病毒。

我通过每次构建可执行文件时使用pyinstaller --clean选项来解决这个问题。


4

重新编译并手动重新安装Pyinstaller引导程序。

我曾遇到这个问题一段时间,但是在许多人的帮助下,我和我的朋友找到了这个解决方法。这个方法几乎总是有效的。

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

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

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


我很感激详细的说明,但我仍然遇到相同的安全问题,包括来自微软的一个。 - Manngo
错误信息是什么?即使您已将EXE提交给反病毒公司进行标记,这种情况是否仍然存在? - Erik Plachta
在使用预编译的Pyinstaller或手动编译的Pyinstaller进行编译后,VirusTotal给了我5或6个警报。我能够对其进行签名并将应用程序提交给Microsoft,以此方式绕过了Defender。 - Manngo
我无法使用--noconsole选项完成构建,但是这个答案解决了问题。 - undefined

2

从3.4版本回退到PyInstaller 3.1.1解决了我的类似问题(至少是暂时的)。

“Original Answer”翻译成中文是“最初的回答”。


2
根据@boogie_bullfrog的建议,回滚到以前的版本可能是一种解决方案。然而,我使用*.spec文件来存储一些数据(如图片和图标)。我有最新的3.5版本(2019年8月),但是降级到3.1.1后,当应用程序编译时出现了错误(可能是由于支持Python 3.7)。因此,目前最简单的解决方案是降级到3.4。它支持来自pyinstaller 3.5的规格,并且onefile-app未被Windows 10内置防火墙检测到。

不幸的是,即使是3.4版本,Virustotal也报告了9/70个误报。但是,AVG和Avast为负。https://www.virustotal.com/gui/file/b0003534879798e827d8f8b45534e21d809685bb2e7ab2d5e1094dda3a03db74/detection - radioxoma

2
我所做的是通过在cmd中输入以下命令降级pyinstaller来解决这个问题(使exe文件无法被检测为病毒): pip install pyinstaller==4.1.0。
顺便提一下,它在3.4.0上不起作用,所以我随机选择了那个版本(4.1),到目前为止看起来还不错: > 我相信它可以在更多版本上运行,但这只是我个人的经验。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接