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

Posted

技术标签:

【中文标题】使用 PyInstaller 制作的程序现在被 AVG 视为特洛伊木马【英文标题】:Program made with PyInstaller now seen as a *** Horse by 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   ***/Agent.am 
NANO-Antivirus  ***.Win32.Agent.elyxeb 
DrWeb   ***.Starter.7246 
Yandex  ***.Crypren!52N9f3NgRrY 
Jiangmin    ***.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 再次将其标记为特洛伊木马时。 ***.com/questions/22693665/… github.com/pyinstaller/pyinstaller/issues/847 github.com/pyinstaller/pyinstaller/issues/603 github.com/google/spatial-media/issues/97 【参考方案1】:

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

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

【讨论】:

鉴于最近发现 PyPi bleepingcomputer.com/news/security/… 的渗透,也许有值得关注。 Windows Defender 现在将“runw.exe”检测为木马。【参考方案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 引导加载程序。

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

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

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

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

Part 1. Manually Compile your Pyinstaller Bootloader Part 2. Working with Anti-Virus Developer(s)

【讨论】:

感谢详细说明,但我仍然遇到同样的安全问题,包括来自 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文件大小增加,因此是短期解决方案。谢谢。 不客气 :) 很高兴听到这个消息

以上是关于使用 PyInstaller 制作的程序现在被 AVG 视为特洛伊木马的主要内容,如果未能解决你的问题,请参考以下文章

使用pyinstaller制作包含Oracle数据库的可执行程序

Python—脚本程序生成exe可执行程序(pyinstaller)

Python 使用pyinstaller将py文件发布成exe程序

pyinstaller的用法,用python制作简单的exe小程序,详细的不能再详细了

运行使用pyinstaller制作的exe文件时出错

使用 pyinstaller [eel] 编译应用程序时出错