使用 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程序